Ir para conteúdo

POWERED BY:

Arquivado

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

DouGuAra

Repertir formularios ao INSERIR

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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
        )

)
Array
(
    [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:

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.