Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fala galera, bom dia.
Gostaria de saber se alguem pode me dar um help.
Tenho uma aplicaçao em PHP que me ajuda muito. O problerma que que tenho que inserir por dia uns 28 registro.
So que meu formulario funciona da maneira tradicional, ou seja.
CAMPO 1 - CAMPO 2 - CAMPO3 - CAMPO 4
SUBMIT
carrega, o insert php e volta, so que tenho que fazer isso 28 vezes.
Eu ja vi em alguns sites, que em uma mesma pagina eu posso "INSERIR" outros forms igual, com um unico SUBMIT
OU seja, eu preencho:
CAMPO 1 - CAMPO 2 - CAMPO3 - CAMPO 4
CAMPO 1 - CAMPO 2 - CAMPO3 - CAMPO 4
CAMPO 1 - CAMPO 2 - CAMPO3 - CAMPO 4
CAMPO 1 - CAMPO 2 - CAMPO3 - CAMPO 4
CAMPO 1 - CAMPO 2 - CAMPO3 - CAMPO 4
e depois salvo tudo
Alguem sabe o nome dessa "soluçao"
Grato desde ja
Vamos lá, coisa simples,
1.php
<form action="2.php" method="post">
Musica <input type="text" name="musica[]" id="musica" size="50"/> Nome:<input type="text" id="contato" name="contato[]"/>Numero<input type="text" id="fone" name="fone[]"/><br>
Musica <input type="text" name="musica[]" id="musica" size="50"/> Nome:<input type="text" id="contato" name="contato[]"/>Numero<input type="text" id="fone" name="fone[]"/><br><br>
<input type="submit" value="Inserir" />
</form>
2.php
<?php
echo "Musicas: <br>";
foreach($_POST['musica'] as $musica) {
echo $musica."<br>";
}
echo "<br>Contatos: <br>";
foreach($_POST['contato'] as $contato) {
echo $contato."<br>";
}
echo "<br>Fone: <br>";
foreach($_POST['fone'] as $fone) {
echo $fone."<br>";
}
echo "<br><br>";
//aqui teria que fazer um loop - mostrar todos - pra eu fazer o insert de todos de uma só vez
echo $musica. " - " . $contato . " - " . $fone . "<br>";
?>
O que eu preciso é que ao fazer esses dois cadastros - que em breve terá uns 12 formularios - faça um loop e e mostre tudo junto, ou seja, Musica - contato - fone, dai eu faço um insert pro mysql
Alguém pode dar uma ajuda.
Parte da solução, que é você definir um par de colchetes vazios no atributo name do HTML, você já fez.
Te falta saber como usar de forma apropriada esses valores no programa. Pra isso você tem duas opções:
1. Ter certeza de que todos os arrays tenham o mesmo tamanho (número de elementos) ou que todos os índices que você definir tenham valor ou estejam setados.
2. Modificar ligeiramente o atributo name para, então, transpô-lo.
A primeira opção é um pouco mais complicada ou pode vir a se tornar longa se, com o tempo, o número de campos aumentar.
A segunda é mais fácil, mesmo que você perca os índices:
<form action="index2.php" enctype="multipart/form-data" method="post">
Musica #1
<input type="text" name="add[musica][]" id="musica" size="50"/>
Nome #1
<input type="text" id="contato" name="add[contato][]"/>
Numero #1
<input type="text" id="fone" name="add[fone][]"/>
<br />
Musica #2
<input type="text" name="add[musica][]" id="musica" size="50"/>
Nome #2
<input type="text" id="contato" name="add[contato][]"/>
Numero #2
<input type="text" id="fone" name="add[fone][]"/>
<br />
<input type="submit" name="submit" value="Inserir" />
</form>
Veja que mudei o radical do atributo para algo comum à todos os campos para que a técnica de transposição funcione adequadamente.
Esse treho simples:
<?php
if( isset( $_POST['add'] ) ) {
function transpose($array) {
array_unshift($array, null);
return call_user_func_array('array_map', $array);
}
print '<pre>';
print_r( $_POST['add'] );
print_r( transpose( $_POST['add'] ) );
}
?>
Produz:
Array
(
[musica] => Array
(
[0] => Teste
[1] => Teste 2
)
[contato] => Array
(
[0] => Bruno
[1] => Fulano
)
[fone] => Array
(
[0] => 123
[1] => 456
)
) [0] => Array
(
[0] => Teste
[1] => Bruno
[2] => 123
)
[1] => Array
(
[0] => Teste 2
[1] => Fulano
[2] => 456
)
)
Sendo o primeiro o array POST original e o segundo transposto.
Agora você itera o array transposto (só pra reforçar :grin: ) com um único foreach e, a cada iteração, sempre, o índice zero vai ser o nome da música, o segundo o nome da pessoa e o terceiro o contato.
E como precisa mostrar os resultados inseridos, vem a calhar criar outro array populado com os dados cujo INSERT resultou em sucesso, assim você não corre o risco de um falso-positivo.
É possível dinamizar ainda mais na rotina dentro do foreach, pra você sequer precisar ficar testando manualmente cada entrada, se tem valor ou não e etc. Mas aí fica por sua conta. :thumbsup:
Poste o seu código para podermos ver!