Array
(
)

Depois do AutoComplete não consigo enviar Id para para o Banco

André
   - 21 set 2015

Galera, Bom Dia! Estou com uma dúvida. Tenho um formulário que faz um atocomplete de determinados itens no banco, depois que busca oi item seleciono com o mouse e ele teria que ser enviado junto ao formulário em outra tabela que tem relacionamento. Mas na hora de enviar ele está enviando array e não o id como eu quero que envie. Toda a Função de busca funciona perfeitamente. Só que na hora de enviar para o banco não consigo.

Cod. do Formulário:
<form>
<div class="label_div">Part Number: </div>
<div class="input_container">
<input type="text" name="pn" id="pn" > <ul id="lista_pn"></ul>
</div>
</form>
Cod. da Pesquisa
<?php
// PDO connect *********
function connect() {
return new PDO('mysql:host=localhost;dbname=controle', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
}

$pdo = connect();
$keyword = '%'.$_POST['keyword'].'%';
$sql = "SELECT * FROM reparaveis WHERE pn LIKE (:keyword) ORDER BY pn ASC LIMIT 0, 10";
$query = $pdo->prepare($sql);
$query->bindParam(':keyword', $keyword, PDO::PARAM_STR);
$query->execute();
$list = $query->fetchAll();
foreach ($list as $rs) {
// put in bold the written text
$country_name = str_replace($_POST['keyword'], '<b>'.$_POST['keyword'].'</b>', $rs['pn']);
// add new option
echo '<li >}
?>

Cod. para envio ao banco:
<?php
@ini_set('display_errors', '1');
error_reporting(E_ALL);
include("init.php");
$contrato = $_POST["id_contrato"];
$pj = $_POST["id_pj"];
$pn = $_POST["pn"];
$qtd = $_POST["quantidade"];
$unitario = $_POST["valor_unitario"];
$total = $_POST["valor_total"];
$id = mysql_query("SELECT id_pn FROM reparaveis WHERE pn='$pn' ");
$id_pn = mysql_fetch_assoc( $id );

mysql_query("insert into itens_contratados ( id_contrato , id_pj , id_pn , quantidade , valor_unitario , valor_total )
values ( '$contrato' , '$pj' , '$id_pn', '$qtd' , '$unitario' , '$total')");
mysql_close();
echo "<script>alert('Salvo com Sucesso!');</script>
?>
<?php
Por favor me ajudem nessa demanda. Grato!

André
   - 21 set 2015

esqueci de enviar esse cod
// autocomplet : this function will be executed every time we change the text
function autocomplet() {
var min_length = 0; // min caracters to display the autocomplete
var keyword = $('#pn').val();
if (keyword.length >= min_length) {
$.ajax({
url: 'ajax_refresh.php',
type: 'POST',
data: {keyword:keyword},
success:function(data){
$('#lista_pn').show();
$('#lista_pn').html(data);
}
});
} else {
$('#lista_pn').hide();
}
}

// set_item : this function will be executed when we select an item
function set_item(item) {
// change input value
$('#pn').val(item);
// hide proposition list
$('#lista_pn').hide();
}

É o da função tudo funciona bem, entretanto ao enviar o resultado para o banco nao envia, parece que vai um array

0
|
0

André
   - 23 set 2015


Citação:
A solução foi dada pelo nosso amigo William http://www.devwilliam.com.br/.

A solução foi mudar a função set_item que ficou assim:

Aqui ela passa dois parametros

#Código
// set_item : this function will be executed when we select an item
function set_item(item,texto) {
// change input value
$('#id_registro').val(item);
$('#pn').val(texto);
// hide proposition list
$('#lista_pn').hide();
}

e aqui onde mostro o que quero:

echo '<li onclick="set_item(\''.str_replace("'", "\'",$rs['id_pn']).'\',\''.str_replace("'", "\'",$rs['pn']).'\')">'.$pn.'</li>';

Aqui passo o cod todo, para verem o que foi feito.

<!--ajax_refresh.php-->

<?php
// ********************************************************* PDO connect ************************************************************************
function connect() {
return new PDO('mysql:host=localhost;dbname=controle', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
}

$pdo = connect();
$keyword = '%'.$_POST['keyword'].'%';
$sql = "SELECT * FROM reparaveis WHERE pn LIKE (:keyword) ORDER BY pn ASC LIMIT 0, 10";
$query = $pdo->prepare($sql);
$query->bindParam(':keyword', $keyword, PDO::PARAM_STR);
$query->execute();
$list = $query->fetchAll();
foreach ($list as $rs) {
// put in bold the written text
$pn = str_replace($_POST['keyword'], '<b>'.$_POST['keyword'].'</b>', $rs['pn']);
// add new option ****AQUI****
echo '<li onclick="set_item(\''.str_replace("'", "\'",$rs['id_pn']).'\',\''.str_replace("'", "\'",$rs['pn']).'\')">'.$country_name.'</li>';

}
?>

<!--cadastro_contratados.php-->

<?php
@ini_set('display_errors', '0');
error_reporting(E_ALL);

include("init.php"); #Aqui chamo o arquivo que contém meu acesso ao banco de dados

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Cadastro de Itens Contratados</title>
<link rel="stylesheet" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css" />
<link rel="stylesheet" href="css/style.css" />
<script type="text/javascript" src="js/jquery.js" ></script>
<script type="text/javascript" src="js/jquery-ui-1.10.4.custom.js"></script>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/script.js"></script>

</head>

<body bgcolor=#F8F8FF>
<div id="itens_contratados">
<form id="form1" name="form1" method="post" action="insere_itens_contratados.php">
<h2 align="center"><font color=#0005E0><strong>Cadastro de Itens Contratados</strong></font></h2>

<!-- Aqui Eu faço um combobox chamando os contratos que estão cadastratados, sem nenhuma dificuldade me retorna o numero do contrato e eu envio o id correspondente. Aqui está tudo bem quanto a isso-->

<table width="700" border="0" align="center">
<td height="20"><font size="3" color=#0005E0 >Contrato<font color="#6495ED"></font></font></td>
<td height="20"><font color="#6495ED" size="1" face="Verdana, Arial, Helvetica, sans-serif">
<select name="id_contrato" id="id_contrato" type="text" >
<option value="" selected></option>
<?php

$resultado = mysql_query("select * from contratos order by numero_contrato");
while ($l = mysql_fetch_array($resultado)) {
echo "
<option value=\"".$l["id_contrato"]."\">".$l["numero_contrato"]."</option>";
}
?>
</select>
</font></td>

<td> <div class="label_div"><font color=#0005E0>Part Number</font></div>
</td><td>
<div class="input_container">
<input type="text" name="pn" id="pn" onkeyup="autocomplet()" size="20">
<ul id="lista_pn"></ul>

</div></td><input type="hidden" name="id_registro" id="id_registro">
<!--Aqui, como no caso anterior porém busco outra informação. Funciona Perfeitamente-->

<td height="20"><font size="3" color=#0005E0 >Projetos<font color="#6495ED"></font></font></td>
<td height="20"><font color="#6495ED" size="1" face="Verdana, Arial, Helvetica, sans-serif">
<select name="id_pj" id="id_pj" type="text">
<option value="" selected></option>
<?php
$resultado = mysql_query("select * from projetos order by projeto");
while ($l = mysql_fetch_array($resultado)) {
echo "
<option value=\"".$l["id_projeto"]."\">".$l["projeto"]."</option>";
} ?>

</select>
<!--Aqui como visto são inputs normais para receber dados-->
<tr>
<td><font color=#0005E0>Quantidade</font></td>
<td><input name="quantidade" type="text" id="quantidade" /></td>

<tr><td><font color=#0005E0>Valor Unitário</font></td>
<td><input name="valor_unitario" onblur="multiplica()" type="text" id="valor_unitario" />

<td><font color=#0005E0>Valor Total</font></td>
<td><input name="valor_total" type="text" id="valor_total" readonly /></td>
<td></td>

<td><input type="submit" name="Submit" value="Cadastrar"></td>
</tr>
</form>

<!--ESSA FUNÇÃO É SÓ PARA MULTIPLICAR AUTOMATICAMENTE NUMEROS NO FORM-->
<script language="javascript">

function multiplica()
{
numer1 = parseInt(document.form1.quantidade.value);
numer2 = parseFloat(document.form1.valor_unitario.value);
soma = numer1 * numer2;
document.form1.valor_total.value = soma;
}

</script>

<!--No que segue abaixo é um incremento que vou colocar, assim que o usuário for alimentando a tabela vai mostrando em uma div abaixo os itens
contratados já cadastrados-->

<?php
$resultado_pn = mysql_query("select a.pn, b.numero_contrato, c.projeto , d.* from reparaveis a, contratos b, projetos c, itens_contratados d where d.id_pn = a.id_pn and d.id_projeto = c.id_projeto and d.id_contrato = b.id_contrato");
?>
</table>
</form>
</div>

<!--Div com os dados dos Pn's incluidos -->

<div id="pn_contratados"><h2 align="center"><font color=#0005E0>PN'S</font></h2>
<?php
if(mysql_num_rows($resultado_pn) < 1) {
exit;
}
?>
<table width="500" border="1" align="center">
<tr>

<th><font color=#0005E0>Part Number(Pn)</font></th>
<th><font color=#0005E0>Projeto</font></th>
<th><font color=#0005E0>Quantidade</font></th>
<th><font color=#0005E0>Valor Total</font></th>
<th><font color=#0005E0>EDITAR</font></th>
</tr>
<?php
while($l = mysql_fetch_array($resultado_pn)) {

$pn = $l["pn"];
$pj = $l["projeto"];
$qtd = $l["qtd"];
$valor_total = $l["valor_total"];
echo"
<tr>

<td><font color=#0005E0>$pn</font></td>
<td><font color=#0005E0>$pj</font></td>
<td><font color=#0005E0>$qtd</font></td>
<td><font color=#0005E0>$valor_total</font></td>
<td><font color=#0005E0><a href=\"editar_pn_contratados.php?nome=$pn & posto=$serial\"></font>[Editar]</a> </tr>\n";
}
?>
</table>

</div>
</body>
</html>

<!--insere.php-->

<?php
@ini_set('display_errors', '1');
error_reporting(E_ALL);

$contrato = $_POST["id_contrato"];
$pj = $_POST["id_pj"];
$id_pn = $_POST["id_registro"];
$qtd = $_POST["quantidade"];
$unitario = $_POST["valor_unitario"];
$total = $_POST["valor_total"];

#Aqui eu envio os dados do form para a tabela itens_contratados onde lê id_pn

mysql_connect("localhost", "root", "");
mysql_select_db("controle");

mysql_query("insert into itens_contratados ( id_contrato , id_projeto , id_pn , qtd , valor_unitario , valor_total )
values ( '$contrato', '$pj',$id_pn, '$qtd', '$unitario', '$total')");

mysql_close();

echo "<script>alert('Salvo com Sucesso!');</script>;

?>
<?php

<!--script.js Onde modificamos a função-->

// autocomplet : this function will be executed every time we change the text
function autocomplet() {
var min_length = 0; // min caracters to display the autocomplete
var keyword = $('#pn').val();
if (keyword.length >= min_length) {
$.ajax({
url: 'ajax_refresh.php',
type: 'POST',
data: {keyword:keyword},
success:function(data){
$('#lista_pn').show();
$('#lista_pn').html(data);
}
});
} else {
$('#lista_pn').hide();
}
}

// set_item : this function will be executed when we select an item
function set_item(item,texto) {
// change input value
$('#id_registro').val(item);
$('#pn').val(texto);
// hide proposition list
$('#lista_pn').hide();
}

Obrigado William, resolveu meu problema. E como voce disse "Conhecimento não significa nada se não for compartilhado. "

0
|
0

William (devwilliam)
   - 23 set 2015

Obrigado André pelo retorno, estou finalizando o tópico!

0
|
0