Leco RP 6 Denunciar post Postado Novembro 2, 2013 Fala pessoal, Estou como dúvida: como montar dois foreach encadeados com array? Explicando melhor, tenho dois arrays que recebo (via POST) sendo o primeiro com o ID do produto e seu valor e o segundo com o ID do produto e seu prazo de entrega. O que eu queria fazer é o seguinte: 1 - Comparar se foi digitado valor e prazo de entrega; 2 - Caso tenha sido, inserir esse registro no banco. Tentei fazer da seguinte forma (sem sucesso): if ($_POST){ $avalor = $_POST["valor"]; $aprazo = $_POST["prazo"]; foreach($avalor as $produto => $valor) { foreach($aprazo as $produto => $prazo) { If ($valor <= "0" AND $prazo <= "0"){ echo "Você deve inserir o valor e o prazo para o produto $produto"; } } } } O foreach não está pegando a variável $prazo. Alterei o nome da variável $produto do segundo foreach também mas também não deu certo. Caso consiga passar por essa validação, acredito que não terei problemas em montar a query de inserção. Agradeço desde já. Compartilhar este post Link para o post Compartilhar em outros sites
paulinhosupriano 103 Denunciar post Postado Novembro 2, 2013 como está o formulario de envio? Compartilhar este post Link para o post Compartilhar em outros sites
Leco RP 6 Denunciar post Postado Novembro 3, 2013 Olá paulinhosupriano, O POST está ok. Dei um print_r e os vetores estão passando corretamente os valores, veja: Array ( [valor] => Array ( [1] => 15,00) [prazo] => Array ( [1] => 10)) Abraço. Compartilhar este post Link para o post Compartilhar em outros sites
paulinhosupriano 103 Denunciar post Postado Novembro 3, 2013 amigo mostra o formulario porque pode ser que não esteja vindo como array. o proprio $_POST e um array. vendo o formulario poderei lhe ajudar. Compartilhar este post Link para o post Compartilhar em outros sites
Leco RP 6 Denunciar post Postado Novembro 3, 2013 Segue: echo "<form action='cria_lista.php' method='post'>"; // Carrrega os produtos $sql = "SELECT * FROM produtos"; $resp = mysql_query($sql); while ($linha = mysql_fetch_array($resp)) { $idproduto = $linha['idproduto']; echo "Valor <input type='text' name='valor[$idproduto]' value='' />"; echo "Prazo <input type='text' name='prazo[$idproduto]' value='' /><br />"; } echo "<button type='submit'>Enviar</button>"; echo "</form>"; Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Novembro 3, 2013 if ($_POST){ $avalor = $_POST["valor"]; $aprazo = $_POST["prazo"]; foreach($avalor as $k => $v) { echo 'valor: ' . $v; echo PHP_EOL . '<br />prazo: ' . $v; echo PHP_EOL . '<br />'; } } apenas um exemplo.. coloque a condicional conforme pretende. Compartilhar este post Link para o post Compartilhar em outros sites
Leco RP 6 Denunciar post Postado Novembro 3, 2013 Olá hinom, Dessa forma que você propôs eu pego apenas o valor... Veja que tenho dois vetores, um com o ID do produto e valor e o outro com ID do produto e o prazo. Abraços Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Novembro 3, 2013 foi mal, eu copiei e colei e não percebi que faltou o vetor nesse trecho, echo PHP_EOL . '<br />prazo: ' . $v; troque por echo PHP_EOL . '<br />prazo: ' . $aprazo[$k]; obs: obviamente, é apenas um exemplo.. precisa verificar se o índice do vetor exite antes de dar um echo.. Compartilhar este post Link para o post Compartilhar em outros sites
paulinhosupriano 103 Denunciar post Postado Novembro 3, 2013 <form action="#" method="post" enctype="multipart/form-data"> Valor <input type='text' name='valores[<?php echo $idproduto; ?>][]' value="" /> Prazo <input type='text' name='prazos[<?php echo $idproduto; ?>][]' value="" /> <input type="submit" name="enviar" value="enviar" /> </form> <?php if(isset($_POST['enviar']) && $_POST['enviar'] == "enviar"){ $produtos = $_POST['valores']; $prazo = $_POST['prazos']; foreach($produtos as $id_produto => $valor_produto){ foreach($valor_produto as $key_valores => $valor_do_produto){ foreach($prazo as $key_prazo => $abrir_array_valor){ foreach($abrir_array_valor as $valor_do_prazo); echo $valor_do_produto . " - " . $valor_do_prazo . "<br />"; } } } }// fim if ?> Este post solucionou a sua dúvida, peço que coloque como resolvido e me der um ponto positivo de reputação para que eu possa continuar ajudando outros colegas como você. Caso não solucione o seu problema, peço que coloque a sua dúvida abaixo. Att: João Paulo Sousa Supriano Compartilhar este post Link para o post Compartilhar em outros sites
Leco RP 6 Denunciar post Postado Novembro 4, 2013 hinom, A sugestão com a alteração que você sugeriu, deu certo. Ficou assim: foreach($avalor as $produto => $valor) { if ($valor <= "0" AND $aprazo[$produto] <= "0"){ echo "Você deve inserir o valor e o prazo para o produto $produto ."; } } Mas agora travei no loop para inserção.. :joia: Estou usando o mesmo form para inserir e/ou atualizar os registros (os produtos já cadastrados eu exibo nos textbox do form que postei anteriormente). Até aí tudo bem. O problema agora é que no foreach ele insere apenas o primeiro produto e quando é para fazer o UPDATE, está atualizando com o ID do produto, e não o valor e prazo. Fiz assim: foreach($avalor as $produto => $valor) { // Consulta tabela listaprodutos para saber se há o registro desse produto $sqlproduto = "SELECT * FROM listaprodutos WHERE idprodutos=$produto"; $executa = mysql_query($sqlproduto); $resultado = mysql_num_rows($executa); if ($resultado == "0"){ $insere = mysql_query("INSERT INTO listaprodutos (idproduto, valor, prazo) VALUES ('$produto', '$valor','$aprazo[$produto]')") or die(mysql_error()); }else{ $atualiza = mysql_query("UPDATE listaprodutos SET valor='$valor', prazo='$aprazo[$produto]' WHERE idproduto='$produto'") or die(mysql_error()); } } echo 'Sucesso'; O que estou fazendo de errado? Abraços e obrigado novamente. Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Novembro 4, 2013 aí é outra conversa filho.. isso aí é vc que tem que se virar para fazer.. afinal esse é o seu trabalho. bom trabalho aí Compartilhar este post Link para o post Compartilhar em outros sites
Leco RP 6 Denunciar post Postado Novembro 4, 2013 Bom dia hinom, A ideia não é que alguém "faça" pra mim. Tanto é que postei o código que tentei fazer e não deu certo. Não teria postado se não fosse dúvida. Diferentemente do que por vezes acaba acontecendo com muita frequência, não estou querendo tudo pronto, pelo contrário, só preciso de ajudar para saber o que estou fazendo de errado. Mais uma vez, obrigado pela ajuda. Abraços. Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Novembro 4, 2013 não importa amigo.. realmente nada contra ti.. mas isso é o trabalho de um programador. faça debugs nos códigos sabe criar técnicas de breakpoints ? Compartilhar este post Link para o post Compartilhar em outros sites
Leco RP 6 Denunciar post Postado Novembro 4, 2013 Não conheço, hinom. Vou pesquisar a respeito. Abraços Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Novembro 4, 2013 só uma dica, evite executar queries sql dessa forma dentro de um laço de repetição o insert permite uma sintaxe para mútiplas inserções exemplo, ao invés de fzer insert into tabela (campo1, campo2) values ('valor1', 'valor2'); insert into tabela (campo1, campo2) values ('valor1', 'valor2'); insert into tabela (campo1, campo2) values ('valor1', 'valor2'); insert into tabela (campo1, campo2) values ('valor1', 'valor2'); pode montar uma query só insert into tabela (campo1, campo2) values ('valor1', 'valor2'), ('valor1', 'valor2'), ('valor1', 'valor2'), ('valor1', 'valor2'); A lógica é montar numa string os valores ('valor1', 'valor2') e após o loop, executar tudo de uma vez só. Apenas atente-se a quantidade de inserções. Algo em torno de 10000 é um limite razoável. Compartilhar este post Link para o post Compartilhar em outros sites
Leco RP 6 Denunciar post Postado Novembro 4, 2013 hinom, É uma boa alternativa mesmo. Como eu faço inserção e/ou atualização, seria uma string para cada, correto? Para montar essa string, teria que ser um array também, ou não? Pois como não sei a quantidade teria que ir armazenando esses valores até acabar o laço. Abraços Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Novembro 4, 2013 não.. basta concatenar a string.. e para saber a quantidade basta ler o tamanho do array $avalor echo count( $avalor ); dificil chegar a mais que 10 mil em operações pequenas e corriqueiras.. nao se preocupe muito com isso. procure o básico do php.. como manipular strings, arrays, etc.. Compartilhar este post Link para o post Compartilhar em outros sites
Leco RP 6 Denunciar post Postado Novembro 5, 2013 Obrigado pela ajuda, hinom. Resolvido. Abraços. Compartilhar este post Link para o post Compartilhar em outros sites