Ir para conteúdo

POWERED BY:

Arquivado

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

gust.php

foreach insert 3 arrays

Recommended Posts

Pessoal,

tenho um form para cadastro de telefones que esta assim:

 
<legend>Telefone</legend>

      <div class="row">

      <div class="col-xs-3 col-md-3">

         <label>Número:</label>

        <input id="telefone" name="telefone[]" type="text" placeholder="Telefone" class="form-control" required>

      </div>

      <div class="col-xs-3 col-md-3">

        <label>Tipo:</label>

        <select name="tipo[]" class="form-control" tabindex="2">

        <option value="">Selecione Um Tipo</option>

              <option value="C">Celular</option>

              <option value="E">Empresa</option>

              <option value="R">Residencial</option>

        </select>

      </div>

      <div class="col-xs-3 col-md-3">

        <label>Principal:

        <input name="principal[]" type="radio" value="S" checked>

        </label>

        </div>

              

    </div>

Os inputs acima são repedidos mais duas vezes na página para o usuário cadastrar até 3 telefones diferentes. Estou tentando dar um insert no mysql da seguinte maneira:

foreach($_POST['telefone'] as $tel => $telefone){

    if(!empty($telefone)){

$res2 = mysql_query("INSERT INTO TELEFONE(ID_TEL_FORNC,TIPO_FONE,NUMERO,N_PRINCIPAL) VALUE ('$idd','$tipo','$telefone','$principal')");
 }
}

Beleza, se eu preencher somente o primeiro campo, como se o usuário tivesse apenas um telefone, ele é cadastrado perfeitamente. Agora, se eu preencher 2 ou os 3 campos ele cadastra os 2 ou os 3 telefones, mais o tipo e a flag principal ficam sempre iguais.

 

Como posso fazer para que se o usuário preencher todos os campos, ele insira os dados como foram marcados, assim:

 

21 99999-6754 C S C = Celular S=Sim é Principal

21 3412-7865 R N R = Residencial N=Não é Principal

 

Ele ta cadastrando assim:

 

21 99999-6754 C S

21 3412-7865 C S

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro aonde você defini os valores das variaveis $idd ,$tipo e $principal?

Pois o único valor dinâmico que estou vendo é o $telefone;

foreach($_POST['telefone'] as $tel => $telefone){

    if(!empty($telefone)){

$res2 = mysql_query("INSERT INTO TELEFONE(ID_TEL_FORNC,TIPO_FONE,NUMERO,N_PRINCIPAL) VALUE ('$idd','$tipo','$telefone','$principal')");
 }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Rafael,

 

Cara, as variáveis $tipo e $principal são os outros 2 inputs do form, tenho que recebe-los com o foreach como estou fazendo com o telefone, só que como vou cadastra-los?

O $idd é o ID do fornecedor cadastrado antes de tudo, essa minha tabela TELEFONE esta relacionada a tabela FORNECEDOR.

Assim quase deu certo:

 

 

foreach($_POST['telefone'] as $tel => $telefone){
    foreach($_POST['tipo'] as $t => $tipo){
        foreach($_POST['principal'] as $prin => $principal){
    
    if(!empty($telefone) && !empty($tipo) && !empty($principal)){
 
$res2 = mysql_query("INSERT INTO TELEFONE(ID_TEL_FORNC,TIPO_FONE,NUMERO,N_PRINCIPAL) VALUE ('$idd','$tipo','$telefone','$principal')");
      }
    }
  }
}

 

Assim, se eu preencher só os primeiros campos, ele cadastra perfeitamente. Agora se eu colocar mais um telefone ele cadastra 3 vezes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao fiz nenhum teste, mas talvez algo como:

foreach($_POST['telefone'] as $tel => $telefone){

    if(!empty($telefone)){
      $tipo = $_POST['tipo'][$tel];
      $principal = $_POST['principal'][$tel];
$res2 = mysql_query("INSERT INTO TELEFONE(ID_TEL_FORNC,TIPO_FONE,NUMERO,N_PRINCIPAL) VALUE ('$idd','$tipo','$telefone','$principal')");
 }
}

partindo do princípio que sempre serão colocados na mesma sequencias os tipos, telefones e principais respectivos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Marcos,

Para isso eu teria que colocar todos os meus inputs com name="telefone[]", seria isso?

Tenho 6 campos ao todo no meu form com os seguintes names

 

telefone[] | tipo[] | principal[]

 

Quando eu envio o form, estou enviando 6 campos ou 3 arrays contendo telefone,tipo e uma flag principal. Na maneira que vc colocou aqui eu teria apenas um array com todas essas informações.

 

Seria isso mesmo ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvi com um exemplo que achei na net. Coloco o código abaixo. Se alguém tiver alguma sugestão, agradeço, pois na fonte que cito aqui o autor fala sobre a vulnerabilidade que posso vir a ter com sql injection.

if (

   !empty($_POST['telefone']) && !empty($_POST['tipo']) && !empty($_POST['principal'])

   && is_array($_POST['telefone']) && is_array($_POST['tipo']) && is_array($_POST['principal'])

   && count($_POST['telefone'])

) {



    $tel_array = $_POST['telefone'];

    $tipo_array = $_POST['tipo'];

    $prin_array = $_POST['principal'];

    for ($i = 0; $i < count($tel_array); $i++) {

        

        $tipo = mysql_real_escape_string($tipo_array[$i]);

        $telefone = mysql_real_escape_string($tel_array[$i]);

        $principal = mysql_real_escape_string($prin_array[$i]);

     if (!empty($telefone)){   

 

$res2 = mysql_query("INSERT INTO TELEFONE(ID_TEL_FORNC,TIPO_FONE,NUMERO,N_PRINCIPAL) VALUE ('$idd','$tipo','$telefone','$principal')");

        }

    }

}



Fonte:

http://stackoverflow.com/questions/18156505/insert-multiple-fields-using-foreach-loop

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.