gust.php 1 Denunciar post Postado Setembro 22, 2015 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
Rafael R Silva 27 Denunciar post Postado Setembro 22, 2015 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
gust.php 1 Denunciar post Postado Setembro 22, 2015 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
Marcos Vilela Alves 4 Denunciar post Postado Setembro 22, 2015 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
gust.php 1 Denunciar post Postado Setembro 22, 2015 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
gust.php 1 Denunciar post Postado Setembro 23, 2015 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