Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Leco RP

Array "encadeado"

Recommended Posts

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

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

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

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
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

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

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
<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

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

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.