Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Colegas ninjas em php, podem me dar um help?
no código abaixo tenho dois whiles.. um dentro do outro.. no segundo preciso pegar o número da linha atual do select...
quebrei a cabeça e não acho uma solução...
tabela: tab_pesquisa
Colunas: id_ab_pesquisa / id_perguntas / perguntas / respostas
o primeiro while traz as perguntas..
o segundo while traz as respostas(são check box para o usuário selecionar....)
no segundo while preciso deixar uma variável no select da condição where... que pegue o número atual da linha da consulta select...
Desde já muito obrigado.
<html>
<head>
<title>Pesquisa</title>
</head>
<body>
<?php
$conn = new mysqli('localhost', 'root', '', 'pesquisa');
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT * FROM tab_pesquisa";
$result = $conn->query($sql);
$linhas = mysqli_num_rows($result);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "<br>" . $row["perguntas"]. "<br>";
$conn2 = new mysqli('localhost', 'root', '', 'pesquisa');
// Check connection
if ($conn2->connect_error) {
die("Connection failed: " . $conn2->connect_error);
}
$sql2 = "SELECT * FROM tab_pesquisa where id_perguntas = " **echo . $row["id_perguntas"].** " ";
$result2 = $conn2->query($sql2);
$linhas2 = mysqli_num_rows($result2);
if ($result2->num_rows > 0) {
// output data of each row
while($row2 = $result2->fetch_assoc()) {
echo "<br>Responda à: " . $row2["respostas"]. "<br>";
$option ='<label class="checkbox-inline"><input type="checkbox" name="respostas[]" value=""</label>';
echo "$option<br>";
}
}
}
}
// Código para pegar valores no checkbox ............................................
if(isset($_POST['acao']) && $_POST['acao'] == "enviar") {
if(!empty($_POST['chek'])){
$campo = $_POST['chek'];
foreach($campo as $value){
echo $value. '<br/>';
$conn = new mysqli('localhost', 'root', '', 'pesquisa');
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "INSERT INTO respostas (respostas)
VALUES ('$value')";
if ($conn->query($sql) === TRUE) {
echo "Pesquisa gravada no banco!";
}else{
echo "Erro: " . $sql . "<br>" . $conn->error;
}
}
}
else{
echo "não existe nada marcado";
}
}
?>
<p><input type="checkbox" name="chek[]" value="resp1" />Resposta 1<p><br>
<p><input type="checkbox" name="chek[]" value="resp2" />Resposta 2<p><br>
<p><input type="checkbox" name="chek[]" value="resp3" />Resposta 3<p><br>
<input type="hidden" name="acao" value="enviar" />
<input type="submit" value="Enviar"/>
</form>
</body>
</html>Não é uma boa prática colocar as consultas no meio do HTML, mas com o tempo você vai aprendendo isso.
Pelo que entendi a sua tabela funciona mais ou menos assim:
id_ab_pesquisa
id_perguntas
perguntas
respostas
1
1
o que é lorem ipsum?
2
1
lorem ipsum
3
1
lorem ipsum
4
1
lorem ipsum
Correto? Poderia então pegar todos os registros, ou os que lhe interessam, e colocá-los num array. Você teria um array parecido com:
<?php
$Valores = array(
array('id_ab_pesquisa'=>'1', 'id_perguntas'=>'1', 'perguntas'=>'o que é lorem ipsum', 'resposta'=>''),
array('id_ab_pesquisa'=>'2', 'id_perguntas'=>'1', 'perguntas'=>'', 'resposta'=>'lorem ipsum'),
array('id_ab_pesquisa'=>'3', 'id_perguntas'=>'1', 'perguntas'=>'', 'resposta'=>'lorem ipsum'),
array('id_ab_pesquisa'=>'4', 'id_perguntas'=>'1', 'perguntas'=>'', 'resposta'=>'lorem ipsum')
);
E então você usaria o *foreach *para
<?php
$Perguntas = array();
foreach($Valores as $Valor) {
$Codigo = $Valor['id_perguntas'];
// Ele é uma pergunta
if(!is_null($Valor['perguntas'])) {
$Perguntas[$Codigo]['titulo'] = $Valor['perguntas'];
continue;
}
$Resposta = $Valor['id_ab_pesquisa'];
$Perguntas[$Codigo]['respostas'][$Resposta] = $Valor['resposta'];
}
E depois disso partir para o HTML:
<?php
foreach($Perguntas as $Pergunta) {
echo "<br>{$Pergunta["titulo"]}<br>";
// output data of each row
foreach($Pergunta['respostas'] as $IDResposta => $Resposta) {
echo "<br>Responda à: {$Resposta}<br>";
echo "<label class=\"checkbox-inline\"><input type=\"checkbox\" name=\"respostas[]\" value=\"{$IDResposta}\"/></label><br>";
}
}
No seu caso coloque o PHP no inicio do documento, junto ao "include "conexao.php";" por exemplo.
Com o tempo vai perceber que dar manutenção no código com o PHP, e principalmente com a conexão, junto ao HTML lhe trará dores de cabeça.
Acho que a resposta era muito grande, estava dando 404...
Tentei enviar separadamente, acho que vai dar pra entender.Olá Tadeu.
É não dá pra esconder sou novo no php kkkkk
Sim toda ajuda é bem vinda, realmente fiz uma lambança no código kkkk
Vou pegar as dicas, vlew!
Tranquilo, no começo é assim mesmo
Amigo, boa noite.
Pelo que vi está no PHP a pouco tempo. Há algumas coisas que gostaria de te ajudar... espero que receba a resposta como construtiva, para seu aprendizado.
Olha, não precisa abrir uma conexão para cada requisição que for fazer ao banco de dados. Você deve abrir a conexão uma única vez e dai em diante utilizar desta em todo o seu código (percebi que fez três). Pra isso geralmente usamos um arquivo, algo como
// Check connectionconexao.php, talvez assim: