BAR WEB 0 Denunciar post Postado Fevereiro 27, 2012 galera, boa noite, esta dando o seguinte erro no cadastro de meu form. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1,'10.00')' at line 1 meu cadastro e o seguinte: <?php include"../includes/conecta.php"; include"versessao.php"; $sql_tipo = mysql_query("select * from produto order by nome ASC", $db); $id = $_GET['id']; $sql = mysql_query("select * from os where id = '$id'", $db); ?> <script type="text/javascript" src="../financeiro/aplicacoes/aplicjava.js"></script> <script language="javascript"> var input = 0; function mais(campo) { var nova = document.getElementById("aqui"); var novadiv = document.createElement("div"); var nomediv = "div"; novadiv.innerHTML = "Produto: <select name='prod[]' id='produto'><option value='0'><Selecione o tipo></option><?php while($array = mysql_fetch_array($sql_tipo)) {?><option label='<?php echo $array[nome] ?>' value='<?php echo $array[nome] ."_". $array[precovenda]; ?>'><?php echo $array[nome] ?> - <?php echo $array[precovenda] ?></option><?php } ?></select> Quantidade: <input type='text' name='qtd[]' value='' style='width:193px;height:20px;'> Desconto no Produto: <input type='text' name='desconto[]' value='' onkeypress='mascara(this,mvalor)' style='width:193px;height:20px;'> "; nova.appendChild(novadiv); input++; }</script> <form method='post' action='recebe_itensos.php'> <input type="hidden" name="id_os" value="<?php echo $id ; ?>" /> <input type='button' value='Inserir Produto na OS' onClick='mais(campo.value)'> <input type='hidden' name='campo' value=''> <div id='aqui'> </div> <input type='submit' name='enviar' value='Enviar Itens Da OS'> </form> e o recebe_itensos.php que e onde da o erro: <?php include"../includes/conecta.php"; function moeda($get_valor) { $source = array('.', ','); $replace = array('', '.'); $valor = str_replace($source, $replace, $get_valor); //remove os pontos e substitui a virgula pelo ponto return $valor; //retorna o valor formatado para gravar no banco } $id_os = $_POST['id_os']; $prod = explode( '_', $_POST[ 'prod' ] ); $produto = $prod[0]; $valor = $prod[1]; $qtd = $_POST['qtd']; $desconto = moeda($_POST['desconto']); $posicoes = count($produto);//pega a quantidade de itens for( $i = 0; $i < $posicoes; $i++){ //monta a query $query = "INSERT INTO `os_itens` (`id_os`,`produto`,`valor`,`qtd`,`desconto`) VALUES ({$id_os},'{$produto[$i]}',{$valor[$i]},{$qtd[$i]},{$desconto[$i]})"; //aqui você tem que ver se você ta recebendo cada uma dessas variáveis como "arrays", $sql = mysql_query($query) or die(mysql_error());//executa a query } echo"Itens cadastrados com sucesso"; ?> sera pq esta dando esse erro? Compartilhar este post Link para o post Compartilhar em outros sites
shini 318 Denunciar post Postado Fevereiro 27, 2012 da um echo na consulta. ele insere algo ou da erro na primeira iteração. Compartilhar este post Link para o post Compartilhar em outros sites
BAR WEB 0 Denunciar post Postado Fevereiro 27, 2012 cara, deu um echo na query, e verificando, o problema esta que nao esta vindo os dados do nome do produto e valor. INSERT INTO `os_itens` (`id_os`,`produto`,`valor`,`qtd`,`desconto`) VALUES (1,'A',,1,14.00) o problema maior esta aqui o: value='<?php echo $array[nome] "._." $array[precovenda]; ?>'> la no cadastro. Como o select fica dentro de um javascript, ele esta dando erro. ja substitui por '._.' e mesmo assim nao leva os valores. alquem sabe o que posso fazer? Compartilhar este post Link para o post Compartilhar em outros sites
GabrielFerrari 41 Denunciar post Postado Fevereiro 27, 2012 Você quer concatenar uma string ( _ ) com as variaveis? Está errado, pois os ( . ) está dentro das aspas Ficaria assim: $array[nome]."_".$array[precovenda] Compartilhar este post Link para o post Compartilhar em outros sites
BAR WEB 0 Denunciar post Postado Fevereiro 27, 2012 Fala Gabriel, mesmo com as alterações, segue indo sem valor. Compartilhar este post Link para o post Compartilhar em outros sites
shini 318 Denunciar post Postado Fevereiro 27, 2012 veja o seu explode, o produto n deveria estar dentro do for? $prod = explode( '_', $_POST[ 'prod' ] ); $produto = $prod[0]; $valor = $prod[1]; $qtd = $_POST['qtd']; $desconto = moeda($_POST['desconto']); Compartilhar este post Link para o post Compartilhar em outros sites
BAR WEB 0 Denunciar post Postado Fevereiro 27, 2012 o problema que posso colocar mais de um produto. entao a cada vez que ele entra no for ele cadastra um. entendeu a ideia? Compartilhar este post Link para o post Compartilhar em outros sites
GabrielFerrari 41 Denunciar post Postado Fevereiro 27, 2012 printa seu array $prod print "<pre>"; print_r($prod); print "</pre>"; a tag <pre> serve para formatar o array e facilitar a leitura, posta ele ai. Compartilhar este post Link para o post Compartilhar em outros sites
BAR WEB 0 Denunciar post Postado Fevereiro 27, 2012 Gabriel o problema que ele nao esta vindo o value. Array ( [0] => Array ) Compartilhar este post Link para o post Compartilhar em outros sites
GabrielFerrari 41 Denunciar post Postado Fevereiro 27, 2012 Posta o formulário dos produtos para eu ver como está. Você tem um array dentro de um array, faz um print_r assim: print_r($pord[0]); e posta também; Compartilhar este post Link para o post Compartilhar em outros sites
BAR WEB 0 Denunciar post Postado Fevereiro 27, 2012 meu form: <script type="text/javascript" src="../financeiro/aplicacoes/aplicjava.js"></script> <script language="javascript"> var input = 0; function mais(campo) { var nova = document.getElementById("aqui"); var novadiv = document.createElement("div"); var nomediv = "div"; novadiv.innerHTML = "Produto: <select name='prod[]' id='produto'><option value='0'><Selecione o tipo></option><?php while($array = mysql_fetch_array($sql_tipo)) {?><option label='<?php echo $array[nome] ?>' value='<?php echo $array[nome].'_'.$array[precovenda]; ?>'><?php echo $array[nome] ?> - <?php echo $array[precovenda] ?></option><?php } ?></select> Quantidade: <input type='text' name='qtd[]' value='' style='width:193px;height:20px;'> Desconto no Produto: <input type='text' name='desconto[]' value='' onkeypress='mascara(this,mvalor)' style='width:193px;height:20px;'> "; nova.appendChild(novadiv); input++; }</script> <form method='post' action='recebe_itensos.php'> <input type="hidden" name="id_os" value="<?php echo $id ; ?>" /> <input type='button' value='Inserir Produto na OS' onClick='mais(campo.value)'> <input type='hidden' name='campo' value=''> <div id='aqui'> </div> <input type='submit' name='enviar' value='Enviar Itens Da OS'> </form> Compartilhar este post Link para o post Compartilhar em outros sites
GabrielFerrari 41 Denunciar post Postado Fevereiro 27, 2012 No código fonte do formulário o select está correto? As informações estão preenchidas corretamente? Faça o print que te falei no post anterior também print_r($pord[0]); Não estou conseguindo enxergar o erro por esses trechos do código. :( Compartilhar este post Link para o post Compartilhar em outros sites
BAR WEB 0 Denunciar post Postado Fevereiro 27, 2012 entao, na verdade eu seleciono o cadastro. e ele vai em branco. quando dei um print_r($pord[0]); na apareceu nada. e pq nao esta passando nenhum valor. Compartilhar este post Link para o post Compartilhar em outros sites
GabrielFerrari 41 Denunciar post Postado Fevereiro 27, 2012 Quando passa os valores do formulário para PHP, apenas esse não está aparecendo Isso me leva a crer que o erro está na montagem do <select> e não no script PHP. Ao exibir o código-fonte da página é possível analisar como o HTML foi montado, e se tiver algum erro, fica mais fácil de procurar no script. Compartilhar este post Link para o post Compartilhar em outros sites
BAR WEB 0 Denunciar post Postado Fevereiro 27, 2012 cara, e o pior que na select ele esta montando beleza. da uma olhada: novadiv.innerHTML = "Produto: <select name='prod[]' id='produto'><option value='0'><Selecione o tipo></option><option label='teste' value='teste_180.00'>teste - 180.00</option></select> Quantidade: <input type='text' name='qtd[]' value='' style='width:193px;height:20px;'> Desconto no Produto: <input type='text' name='desconto[]' value='' onkeypress='mascara(this,mvalor)' style='width:193px;height:20px;'> "; o problema e que dai nao esta passando para o recebe. Compartilhar este post Link para o post Compartilhar em outros sites
GabrielFerrari 41 Denunciar post Postado Fevereiro 27, 2012 Ok, acho que encontrei! $prod = explode( '_', $_POST[ 'prod' ] ); esse trecho faz um explode de uma sting onde tem "_" porém $_POST['prod'] é uma array! não tem "_" em um array. Foi isso que o shini quis dizer no post dele. você precisa faz um laço onde pegue todos os dados do $prod e faça o explode neles. Sabia que estava deixando algum detalhe simples passar. rs Compartilhar este post Link para o post Compartilhar em outros sites
BAR WEB 0 Denunciar post Postado Fevereiro 27, 2012 cara perdao, nao entendi. como eu faria isto?? abçs Compartilhar este post Link para o post Compartilhar em outros sites
GabrielFerrari 41 Denunciar post Postado Fevereiro 27, 2012 Exemplificando o que você tem com o código no momento é mais ou menos isso: $prod = array (0 => array(0 => "produto1_outrovalor", 1 => "Teste_codigo", 2 => "Mais_umitem")); Ele tentou explodir um array o que gerou um array dentro do outro, em vez do textos. O que você precisa é dividir os itens do array que você recebeu do formulário que seria assim: $prod = explode($_POST['prod'][0]); $prod1 = explode($_POST['prod'][1]); $prod2 = explode($_POST['prod'][2]); porém isso é inviável pois não sabe quantos produtos vai receber. Já que cada um vai ser inserido individualmente no banco podemos criar algo assim: <?php $x = array (0 => "produto1_outrovalor", 1 => "Teste_codigo", 2 => "Mais_umitem"); foreach($x as &$key){ $prod = explode("_", $key); print "<pre>"; print_r($prod); print "<pre>"; } ?> O retorno desse código é o seguinte: Array ( [0] => produto1 [1] => outrovalor ) Array ( [0] => Teste [1] => codigo ) Array ( [0] => Mais [1] => umitem ) $x seria o seu $_POST['prod'] foreach percorre o seu array jogando o conteudo na variavel $key então explodimos o $key para pegar o texto dele o que retorna um outro array com a divisão da string. conseguiu pegar a idéia? Depois é só usar o foreeach para alimentar o banco Compartilhar este post Link para o post Compartilhar em outros sites
BAR WEB 0 Denunciar post Postado Fevereiro 27, 2012 Cara fiz assim: $id_os = $_POST['id_os']; $desc = $_POST['qtd']; $desconto = moeda($_POST['desconto']); $x = $_POST[ 'prod' ]; foreach($x as &$key){ $prod = explode("_", $key); $produto = $prod[0]; $valor = $prod[1]; } $posicoes = count($desc);//pega a quantidade de itens for( $i = 0; $i < $posicoes; $i++){ //monta a query echo $query = "INSERT INTO `os_itens` (`id_os`,`qtd`,`produto`,`valor`,`desconto`) VALUES ({$id_os},{$qtd[$i]},'{$produto[$i]}',{$valor[$i]},{$desconto[$i]})"; //aqui você tem que ver se você ta recebendo cada uma dessas variáveis como "arrays", $sql = mysql_query($query) or die(mysql_error());//executa a query } ele da o erro: INSERT INTO `os_itens` (`id_os`,`qtd`,`produto`,`valor`,`desconto`) VALUES (1,,'t',1,12.00)You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''t',1,12.00)' at line 1 fiz o teste e os valores estao vindo quando testei assim: $id_os = $_POST['id_os']; $desc = $_POST['qtd']; $desconto = moeda($_POST['desconto']); $x = $_POST[ 'prod' ]; foreach($x as &$key){ $prod = explode("_", $key); print "<pre>"; print_r($prod); print "<pre>"; } $posicoes = count($desc);//pega a quantidade de itens for( $i = 0; $i < $posicoes; $i++){ //monta a query echo $query = "INSERT INTO `os_itens` (`id_os`,`qtd`,`produto`,`valor`,`desconto`) VALUES ({$id_os},{$qtd[$i]},'{$produto[$i]}',{$valor[$i]},{$desconto[$i]})"; //aqui você tem que ver se você ta recebendo cada uma dessas variáveis como "arrays", $sql = mysql_query($query) or die(mysql_error());//executa a query } traz o seguinte resultado: Array ( [0] => teste [1] => 180.00 ) mais para cadastrar ele nao vai. o que devo fazer??? Compartilhar este post Link para o post Compartilhar em outros sites
GabrielFerrari 41 Denunciar post Postado Fevereiro 27, 2012 No seu código não existe $qtd sendo declarado. Existe o $desc = $_POST['qtd']; Compartilhar este post Link para o post Compartilhar em outros sites