Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, como eu posso pegar os valores de cada pergunta e dar o INSERT no banco de dados? por exemplo, eu tenho o:
select name="Perguntas1" select name="Perguntas2" select name="Perguntas3" Pois são as opções que usuário seleciona por exemplo: O meu insert ficaria na sequencia como ficaria o meu $_POST para capturar e salvar? INSERT INTO table (p1,p2,p3) VALUES (1,2,3)[/size] INSERT INTO table (p1,p2,[/size]p3[/size]) VALUES (2,3,1,)[/size] INSERT INTO table (p1,p2,[/size]p3[/size]) VALUES (3,3,2)[/size] print da tela:[/size] /applications/core/interface/imageproxy/imageproxy.php?img=http://capella.inf.br/Listagem.jpg&key=ecf5fb7650293ae5a4fa14291e7f990a6629b3a3cce313b0ce2eaa71ac714786" alt="Listagem.jpg" /> $sql = ("select * from perguntas "). $res = mysql_query($sql). while ($row = mysql_fetch_array($res)){ $data = $row['data']. $id = $row['id']. $sqlNome = 'select * from nome where id = '.$id. $resNome = mysql_query($sqlNome). while ($rowNome = mysql_fetch_assoc($resNome)){ $nome = $rowNome['nome']. }?> <input type="hidden" id="CodigoNome" name="CodigoNome[]" value="<?php echo $id?>"/> <tr> <td class="td-data"><? echo converte_data(substr($data,0,10)).' '.substr($data,11,5)?></td> <td class="td-nome"><? echo ($nome)?></td> <td class="td-menor" align="center"> <select name="Perguntas3" id="" class="select-pergunta"> <option value="1">1-Regular</option> <option value="2" selected="selected">2-Bom</option> <option value="3">3-Ótima</option> </select></td> <td align="center"> <select name="Perguntas2" id="" class="select-pergunta"> <option value="1">1-Regular</option> <option value="2" selected="selected">2-Bom</option> <option value="3">3-Ótima</option> </select> </td> <td align="center"> <select name="Perguntas3" id="" class="select-pergunta"> <option value="1">1-Regular</option> <option value="2" selected="selected">2-Bom</option> <option value="3">3-Ótima</option> </select> </td>Ola, obrigado pela resposta,
fiz conforme me falou mas não esta trazendo os resultados veja:
for ($i = 1; $i <= 3; $i++)
{
$vPerguntas1= $_POST['Perguntas1' . $i];
$vPerguntas2= $_POST['Perguntas2' . $i];
$vPerguntas2= $_POST['Perguntas3' . $i];
$sql = "INSERT INTO table (p1,p2,p3) VALUES ($vPerguntas1,$vPerguntas2,$vPerguntas3)";
echo $sql.'<br>';
}
INSERT INTO table (p1,p2,p3) VALUES (,,,)
INSERT INTO table (p1,p2,p3) VALUES (,,,)
INSERT INTO table (p1,p2,p3) VALUES (,,,)Se você fizer $_POST['Perguntas1' . $i], terá $_POST['Perguntas11'], $_POST['Perguntas12'] e $_POST['Perguntas13'].
Por isso eu coloquei só $_POST['Perguntas' . $i]. O "$i" é que vai completar o nome do campo
E você resgata o valor uma única vez dentro do loop. Ele será executado 3 vezes. A intenção do loop é justamente evitar duplicação de código
entendi, fiz desta forma, mas não saiu o resultado desejado:
for ($i = 1; $i <= 3; $i++)
{
$vPerguntas1 = $_POST['Perguntas' . $i];
$sql = "INSERT INTO table (p1,p2,p3) VALUES ($vPerguntas1,$vPerguntas1,$vPerguntas1)";
echo $sql.'<br>';
}
INSERT INTO table (p1,p2,p3) VALUES (1,1,1)
INSERT INTO table (p1,p2,p3) VALUES (2,2,2)
INSERT INTO table (p1,p2,p3) VALUES (1,1,1)
não sai os valores que seleciono nos selec name
Se você quer guardar os 3 valores em uma única linha, não pode fazer 3 INSERTs. Tem que fazer um só.
Ou seja, há duas opções:
1. Fazer manualmente, fixando sempre os 3 valores:
$sql = "INSERT INTO table (p1,p2,p3) VALUES ('" . $_POST['Perguntas1'] . "', '" . $_POST['Perguntas2'] . "', '" . $_POST['Perguntas1'] . "')";
2. Usar o loop do meu exemplo e gerar um array com os valores, aí dar um implode() e usar o resultado no VALUES. Isso será útil se você tiver uma quantidade sempre diferente de perguntas. Se tiver sempre 3, poderá usar a forma 1.
Essa forma torna o sistema mais dinâmico. Mas você deveria ter uma tabela separada para as perguntas, podendo ter infinitas perguntas e não apenas 3. É a ideia que mostro aqui: http://rberaldo.com.br/usando-campos-multivalorados/
eu da primeira forma, mas só esta pegando os valores do último select name Pergunta3
$sql = "INSERT INTO table (p1,p2,p3)
VALUES ('".$_POST['Perguntas1'] . "', '" . $_POST['Perguntas2'] . "', '" . $_POST['Perguntas3'] . "')";
echo $sql.'<br>';
INSERT INTO table (p1,p2,p3) VALUES ('1', '2', '3')Está correto. São 3 valores diferentes. Se estivesse pegando só o valor de um select, seriam 3 valores iguais.
Dê um print_r em $_POST e verá exatamente o que o formulário envia pro PHPEntendi,
mas o certo seria três INSERT
insert do select name Pergunta1
INSERT INTO table (p1,p2,p3) VALUES ('1', '2', '3')
insert dp select name Pergunta2
INSERT INTO table (p1,p2,p3) VALUES ('3', '1', '2')
insert do select name Pergunta3
INSERT INTO table (p1,p2,p3) VALUES ('2, '3', '2')
que ficaria assim que são de todos o select names selecionados e enviado via $_POST:
INSERT INTO table (p1,p2,p3) VALUES ('1', '2', '3')
INSERT INTO table (p1,p2,p3) VALUES ('3', '1', '2')
INSERT INTO table (p1,p2,p3) VALUES ('2, '3', '2')pq ao invés de inserir 3 vezes, não usa 3 colunas, uma para cada pergunta? Assim, cada pessoa ficaria salva em uma linha apenas.
Ops... falei besteira rsrs... ja vi que faz isso... mas tem um detalhe, voce tem que identificar de quem é cada pergunta... eu fiz isso adicionando o id na string que vai no atributo name.. tenta algo assim.
Melhor ainda, ja que cada um vai responder 3 perguntas, ao invés de identificar as perguntas como "pergunta1", "pergunta2" e "pergunta3", coloca no name do select o nome do usuário e trata como vetor esses dados... ja sabera que o elemento 1 do vetor corresponde a pergunta 1 e assim por diante.
Cara legal, obrigado pela sua atenção,
você teria um pequeno exemplo de como ficaria?
fiz um exemplo básico, você adapta ao seu:
<html>
<head>
<title>Agenda - Contatos</title>
<link rel="stylesheet" type="text/css" href="estilo.css">
</head>
<body>
<form action="index.php" method="post">
<select name="usuario[]">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<select name="usuario[]">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<select name="usuario[]">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<input type="submit" value="ok">
</form>
</body>
</html>
no codigo acima, seu formulario identificado por nome do "usuario", no atributo name..
<?php
if(isset($_POST['usuario'])){
for ($i= 0; $i < 3 ; $i++) {
echo "tem sim<br/>";
echo $_POST['usuario'][$i];//tratando como array
echo "<br/>";
}
}else{
echo "não veio post";
}
?>
em seguida, basta tratar esses dados no php como array. Ai é só fazer quantos desejar rsrs
Repare que a name da tag select é identificada com um nome de usuario, e no script o php verifica se aquele nome de usuario existe... tenta adaptar e posta as dúvidas.
desta forma ele só pega os valores do primeiro selec name
HTML:
<select name="Perguntas[]" id="" class="select-pergunta">
<option value="1">1-Regular</option>
<option value="2" selected="selected">2-Bom</option>
<option value="3">3-Ótima</option>
</select></td>
<td>
<select name="Perguntas[]" id="" class="select-pergunta">
<option value="1">1-Regular</option>
<option value="2" selected="selected">2-Bom</option>
<option value="3">3-Ótima</option>
</select>
</td>
<td>
<select name="Perguntas[]" id="" class="select-pergunta">
<option value="1">1-Regular</option>
<option value="2" selected="selected">2-Bom</option>
<option value="3">3-Ótima</option>
</select>
</td>
if(isset($_POST['Perguntas'])){
for ($i= 0; $i <= 3 ; $i++) {
echo $_POST['Perguntas'][$i];
}
}else{
echo 'erro';
}
resultado:
123
deveria ser:
123
312
131
que são as opções que seleciono..
veja a imagem abaixo:
/applications/core/interface/imageproxy/imageproxy.php?img=http://www.capella.inf.br/Listagem.jpg&key=e39a243094f52f1e3a8cfcd03bed4795928a19d3f594653f1aadb86842c1c2a3" alt="Listagem.jpg" />
Se você quer N perguntas para M usuários, você precisará de um array bidimensional.
Só isso.
Veja:
<?php
echo "<pre>";
print_r($_POST);
echo "</pre>";
?>
<form action="" method="post">
<?php for ($i = 0; $i < 3; $i++): ?>
Pergunta 1 para o usuário <?php echo $i + 1; ?>
<select name="Perguntas[<?php echo $i ?>][]" id="" class="select-pergunta">
<option value="1">1-Regular</option>
<option value="2" selected="selected">2-Bom</option>
<option value="3">3-Ótima</option>
</select>
<br>
Pergunta 2 para o usuário <?php echo $i + 1; ?>
<select name="Perguntas[<?php echo $i ?>][]" id="" class="select-pergunta">
<option value="1">1-Regular</option>
<option value="2" selected="selected">2-Bom</option>
<option value="3">3-Ótima</option>
</select>
<br>
Pergunta 3 para o usuário <?php echo $i + 1; ?>
<select name="Perguntas[<?php echo $i ?>][]" id="" class="select-pergunta">
<option value="1">1-Regular</option>
<option value="2" selected="selected">2-Bom</option>
<option value="3">3-Ótima</option>
</select>
<br><br>
<?php endfor; ?>
<input type="submit" value="Enviar">
</form>
A ideia geral é a que descrevo neste artigo:
http://rberaldo.com.br/inserindo-multiplos-registros-em-tabela-de-banco-de-dados/
Você pode fazer um loop:
for ($i = 1; $i <= $numero_de_perguntas; $i++)
{
PS: funções mysql_* estão obsoletas desde o PHP 5.5 e já foram removidas no PHP 7. Prefira usar MySQLi ou PDO. Veja mais aqui: http://rberaldo.com.br/mysql-obsoleto-php/