Depois do AutoComplete não consigo enviar Id para para o Banco
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!
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é
Curtidas 0
Respostas
André
21/09/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
// 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
GOSTEI 0
André
21/09/2015
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
A solução foi mudar a função set_item que ficou assim:
Aqui ela passa dois parametros
// 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. "
GOSTEI 0
William
21/09/2015
Obrigado André pelo retorno, estou finalizando o tópico!
GOSTEI 0