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