Ir para conteúdo

POWERED BY:

Arquivado

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

Alecsander Hoppe

PHP e MYSQL

Recommended Posts

Galera, estou fazendo um sistema de perguntas e respostas, mais estou tendo dificuldades com as seguintes coisas...

 

tenho 2 tabelas, uma perguntas e outra respostas

 

na "respostas" tem uma chave estrangeira para pegar o id da pergunta, da tabela pergunta

 

eu fiz, tudo certo a parte de pergunta e tals, tenho que fazer um While, para exibir todas as respostas, porém tenho muito HTML, e várias resposta em um campo de resposta, como nome, data e resposta.

 

Andei procurando e achei no site do PHP este código..

 

*a pergunta é pega pela url, ?id=1

 

quero pegar a resposta, só da pergunta selecionada

$pergunta = $row_perguntas['id'];
$f = mysql_query("SELECT * FROM respostas WHERE pergunta = '".$pergunta."'");
$row = mysql_fetch_array($f, MYSQL_ASSOC);
    printf("%s", $row["nome"]);  

o código, faz a consulta, e pega o resultado certinho, como preciso, porém, ele pega, se eu fizer um while, assim:

 

<?php do { ?>
                    <?php 
$pergunta = $row_perguntas['id'];
$f = mysql_query("SELECT * FROM respostas WHERE pergunta = '".$pergunta."'");



    printf("%s", $row["nome"]);

?>
                    <?php } while ($row = mysql_fetch_array($f, MYSQL_ASSOC)); ?>

 

ele, da certo! porém ele cria vários, milhões, a cada segundo que deixo a página on, tem um geito de eu mostrar 1 por registro pego, da tabela?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça isso:

 

echo "SELECT * FROM respostas WHERE pergunta = '" . $pergunta . "'";

E veja o que vai imprimir.

 

Cara isso, nem preciso testar, se eu dar um echo, e "" ele vai imprimir o que a dentro, tem que ter alguma variável, algum string.

 

Neste caro ai ele iria imprimir SELECT * FROM respostas WHERE pergunta = '" . $pergunta . "'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, a intenção é ver se $pergunta está sem problemas, se vai chegar o valor correto. Se sim, execute a query no banco de dados. Se não, corriga o valor da $pergunta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, a intenção é ver se $pergunta está sem problemas, se vai chegar o valor correto. Se sim, execute a query no banco de dados. Se não, corriga o valor da $pergunta.

 

O $pergunta é recebido pela url.......

 

se a URL for ?id=1 o pergunta vai ser 1.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você precisa por um limite para seu SCRIPT SQL, lógico caso você tenha bilhões de resultados da mesma pergunta, caso contrário não precisa por o LIMIT (se houver apenas um resultado para cada resposta), o problema está no seu LOOP (laço), talvez este resolva, tente:

$limite = 5;
$pergunta = $_GET['id'];
$sql = mysql_query("SELECT nome FROM respostas WHERE id = '".$pergunta."' LIMIT ".$limite." ORDER BY nome ASC ");
 $rows = mysql_num_rows($sql);

if($rows > 0){
 while($result = mysql_fetch_obecj($sql)){
        $result->nome;
   }
}//Esta select irá mostrar os nomes que forem iguais os ID's da tabela respostas. Cujo ID está sendo passado pelo METHOD (método) GET pelo formulário de busca, pra saber se está funcionando, basta por lá na URL ?id=1 ou ?id=2, etc.

Você só precisa especifícar no seu formulario o method GET! espero ter ajudado.

 

Att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, você não está recebendo o valor pela url, veja:

Está recebendo assim:

 

$pergunta = $row_perguntas['id'];

Pela URL seria assim:

 

$pergunta = $_GET['id'];

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Não, você não está recebendo o valor pela url, veja:

Está recebendo assim:

 

$pergunta = $row_perguntas['id'];

Pela URL seria assim:

 

$pergunta = $_GET['id'];

 

O Valor row_perguntas está em um outro select feito pelo dreamweaver, e nele está marcado para pegar um parâmetro URL..

 

Você precisa por um limite para seu SCRIPT SQL, lógico caso você tenha bilhões de resultados da mesma pergunta, caso contrário não precisa por o LIMIT (se houver apenas um resultado para cada resposta), o problema está no seu LOOP (laço), talvez este resolva, tente:

$limite = 5;
$pergunta = $_GET['id'];
$sql = mysql_query("SELECT nome FROM respostas WHERE id = '".$pergunta."' LIMIT ".$limite." ORDER BY nome ASC ");
 $rows = mysql_num_rows($sql);

if($rows > 0){
 while($result = mysql_fetch_obecj($sql)){
        $result->nome;
   }
}//Esta select irá mostrar os nomes que forem iguais os ID's da tabela respostas. Cujo ID está sendo passado pelo METHOD (método) GET pelo formulário de busca, pra saber se está funcionando, basta por lá na URL ?id=1 ou ?id=2, etc.

Você só precisa especifícar no seu formulario o method GET! espero ter ajudado.

 

Att.

 

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in www\pergunta.php on line 285

 

O get, está vindo do dreamweaver, no parametro url..

mais fiz com seu método e ele da o erro, na linha 285 qual é essa $rows = mysql_num_rows($sql);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Altere a linha da query pra essa:

 

$sql = mysql_query("SELECT nome FROM respostas WHERE id = '".$pergunta."' LIMIT ".$limite." ORDER BY nome ASC ") or die(mysql_error());

E veja se vai retornar algum erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeira coisa a se fazer é testar sua SQL, ela está trazendo o resultado desejado? tipo..

 

 

"SELECT respostas.nome FROM respostas
LEFT JOIN perguntas
ON resposta.id = perguntas.id
WHERE resposta.id = $pergunta"

 

 

teste o script no lugar da variável "$pergunta" coloca um ID que exista no seu registro e veja se o script retorna a resposta correspondente!

 

não sabe fazer dentro do banco? blz faça o teste pelo PHP então:

$sql = mysql_query("SELECT respostas.nome FROM respostas LEFT JOIN perguntas ON resposta.id = perguntas.id WHERE resposta.id = $pergunta")or die (mysql_error());

$row = $mysql_num_rows($sql);

if($row > 0 ){
 print "o resultado da sua consulta é: ".$row;
} else {
 print "nenhum registro encontrado.";
}

 

 

O Valor row_perguntas está em um outro select feito pelo dreamweaver, e nele está marcado para pegar um parâmetro URL..



 

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in www\pergunta.php on line 285

 

O get, está vindo do dreamweaver, no parametro url..

mais fiz com seu método e ele da o erro, na linha 285 qual é essa $rows = mysql_num_rows($sql);

 

 

mude o mysql_num_rows para mysql_affected_rows($sql); isto é para saber se alguma coluna foi afetada, ou seja, se existe alguma coluna com o ID informado na sua tabela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Altere a linha da query pra essa:

 

$sql = mysql_query("SELECT nome FROM respostas WHERE id = '".$pergunta."' LIMIT ".$limite." ORDER BY nome ASC ") or die(mysql_error());

E veja se vai retornar algum erro.

 

$sql = mysql_query("SELECT nome FROM respostas WHERE id = '".$pergunta."' LIMIT ".$limite." ORDER BY id ASC") or die(mysql_error());

 

ou com a linha q vc me deu, da este erro:

 

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER BY id ASC' at line 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
$sql = mysql_query("SELECT nome FROM respostas WHERE id = '".$pergunta."' LIMIT ".$limite." ORDER BY id ASC") or die(mysql_error());

mude esta sintax para:

$sql = mysql_query("SELECT nome FROM respostas WHERE id ='$pergunta'  ORDER BY nome ASC LIMIT $limite ") or die(mysql_error());

deixe o LIMIT depois do ORDER BY nos scripts SQL.

Espero ter ajudado!

 

Att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

$sql = mysql_query("SELECT nome FROM respostas WHERE id = '".$pergunta."' LIMIT ".$limite." ORDER BY id ASC") or die(mysql_error());

mude esta sintax para:

$sql = mysql_query("SELECT nome FROM respostas WHERE id ='$pergunta'  ORDER BY nome ASC LIMIT $limite ") or die(mysql_error());

deixe o LIMIT depois do ORDER BY nos scripts SQL.

Espero ter ajudado!

 

Att.

 

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''5'' at line 1

 

 

 

Primeira coisa a se fazer é testar sua SQL, ela está trazendo o resultado desejado? tipo..

 

 

"SELECT respostas.nome FROM respostas
LEFT JOIN perguntas
ON resposta.id = perguntas.id
WHERE resposta.id = $pergunta"

 

 

teste o script no lugar da variável "$pergunta" coloca um ID que exista no seu registro e veja se o script retorna a resposta correspondente!

 

não sabe fazer dentro do banco? blz faça o teste pelo PHP então:

$sql = mysql_query("SELECT respostas.nome FROM respostas LEFT JOIN perguntas ON resposta.id = perguntas.id WHERE resposta.id = $pergunta")or die (mysql_error());

$row = $mysql_num_rows($sql);

if($row > 0 ){
 print "o resultado da sua consulta é: ".$row;
} else {
 print "nenhum registro encontrado.";
}

 

 

 

 

mude o mysql_num_rows para mysql_affected_rows($sql); isto é para saber se alguma coluna foi afetada, ou seja, se existe alguma coluna com o ID informado na sua tabela.

 

com o codigo q vc deu, deu erro por causa dos resposta, era respostas, ai botei, e deu erro, na linha

 

Notice: Undefined variable: mysql_num_rows in www\pergunta.php on line 286

 

a linha é esta $row = $mysql_num_rows($sql);

 

este é o problema, pois olhe, botei mysql_affected_rows($sql)

quando boto ?id=1 na url ele da erro na mesma linha, quando tiro, ele da este erro:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

 

detalhe, ja fiz isso, em outro campo..

 

$joinha = $row_joinha['id'];
$resp_joia = $row_respostas['id'];
$sqle = mysql_query("SELECT * FROM joinha WHERE resposta = '".$resp_joia."'");
$numera = mysql_num_rows($sqle);

echo $numera;   

 

ele da certo, só que ele exibe a quantidade de registros, quero fazer a mesma coisa, só que mostrando o registro, e q possa ter um while legalzin

Compartilhar este post


Link para o post
Compartilhar em outros sites

Notice: Undefined variable: mysql_num_rows in www\pergunta.php on line 286
a linha é esta $row = $mysql_num_rows($sql);

Neste o motivo está pq foi posto um Cifrão na frente da função MYSQL

repare:

$row = $mysql_num_rows($sql)

é só remover, deixando assim:

$row = mysql_num_rows($sql)

no outro caso, o resultado que mostra o limite!

tire as aspas simples deixando só a variavel, exemplo:

 

LIMIT $limite ");

 

Vamos por parte então, me manda o script que está atual, o que você já modificou ai... quero olhar os detalhes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Notice: Undefined variable: mysql_num_rows in www\pergunta.php on line 286
a linha é esta $row = $mysql_num_rows($sql);

Neste o motivo está pq foi posto um Cifrão na frente da função MYSQL

repare:

$row = $mysql_num_rows($sql)

é só remover, deixando assim:

$row = mysql_num_rows($sql)

no outro caso, o resultado que mostra o limite!

tire as aspas simples deixando só a variavel, exemplo:

 

LIMIT $limite ");

 

Vamos por parte então, me manda o script que está atual, o que você já modificou ai... quero olhar os detalhes.

 

Cara, da certinho,

 

 <?php
				$pergunta = $row_perguntas['id'];
			$sql = mysql_query("SELECT respostas.nome FROM respostas LEFT JOIN perguntas ON respostas.id = perguntas.id WHERE respostas.id = $pergunta")or die (mysql_error());

$row = mysql_num_rows($sql);

if($row > 0 ){
 print $row;
}
 ?>

Porém ele mostra o id, quero o nome, data e tals da resposta, como mudo isto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Calma, isso ai foi um teste pra ele te mostrar o numero de colunas afetadas... agora podemos prosseguir e exibir os dados que você deseja!

 

script atual:

 <?php
$pergunta = $row_perguntas['id'];
$sql = mysql_query("SELECT respostas.nome FROM respostas LEFT JOIN perguntas ON respostas.id = perguntas.id WHERE respostas.id = $pergunta")or die (mysql_error());

$row = mysql_num_rows($sql);

if($row > 0 ){
 print $row;
}
 ?>

modifique ele pra este aqui:

 

 <?php
$pergunta = $row_perguntas['id'];
$sql = mysql_query("SELECT respostas.nome FROM respostas LEFT JOIN perguntas ON respostas.id = perguntas.id WHERE respostas.id = $pergunta")or die (mysql_error());

$row = mysql_num_rows($sql);

if($row > 0 ){
 while ($result = mysql_fetch_object ($sql)){
   print 'Nome : '.$result->nome.'<br />';
  }
}
 ?>

retonará o valor do campo "NOME" no laço (WHILE), mostrando todos os registro neste campo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Calma, isso ai foi um teste pra ele te mostrar o numero de colunas afetadas... agora podemos prosseguir e exibir os dados que você deseja!

 

script atual:

 <?php
$pergunta = $row_perguntas['id'];
$sql = mysql_query("SELECT respostas.nome FROM respostas LEFT JOIN perguntas ON respostas.id = perguntas.id WHERE respostas.id = $pergunta")or die (mysql_error());

$row = mysql_num_rows($sql);

if($row > 0 ){
 print $row;
}
 ?>

modifique ele pra este aqui:

 

 <?php
$pergunta = $row_perguntas['id'];
$sql = mysql_query("SELECT respostas.nome FROM respostas LEFT JOIN perguntas ON respostas.id = perguntas.id WHERE respostas.id = $pergunta")or die (mysql_error());

$row = mysql_num_rows($sql);

if($row > 0 ){
 while ($result = mysql_fetch_object ($sql)){
   print 'Nome : '.$result->nome.'<br />';
  }
}
 ?>

retonará o valor do campo "NOME" no laço (WHILE), mostrando todos os registro neste campo.

 

sim o campo existe, porem,

 

eu botei 3 respostas, tenho 2 perguntas, olhe..

 

1 PERGUNTA:

2 RESPOSTAS, AS ID 1 E 2

 

2 pergunta:

1 RESPOSTA, A ID 3

 

quando eu boto id=1

ele retorna, a 1, com nome q é resp num 1

quando era pra retornar a 1 e a 2. pois quero filtrar por pergunta.. e mostrar as respostas daquela pergunta..

 

quando boto id=2

ele retorna a resp num 2, que é a id 2 da pergunta 1,

 

q na verdade era pra ser a 3, pois estou querendo a resposta da pergunta 2, intendes?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu entendi, você usa phpmyadmin? se usar... teste este script SQL aqui:

SELECT resposta.nome FROM resposta 
LEFT JOIN pergunta
ON resposta.id = pergunta.id

verifica se o nome da tabela está correta, ele deverá te exibir os nomes relacionados ao id da pergunta.

por exemplo: se você tiver no ID = 1 (da tabela pergunta) 2 resposta, então lá na tabela resposta você terá na chave estrangeira o ID =1 apontando pro ID da tabela resposta 1, 2.

id_tabela_resposta | id_tabela_pergunta
1                  |      1
2                  |      1
3                  |      2

entendeu? o resultado será parecido com este se estiver tudo certo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu entendi, você usa phpmyadmin? se usar... teste este script SQL aqui:

SELECT resposta.nome FROM resposta 
LEFT JOIN pergunta
ON resposta.id = pergunta.id

verifica se o nome da tabela está correta, ele deverá te exibir os nomes relacionados ao id da pergunta.

por exemplo: se você tiver no ID = 1 (da tabela pergunta) 2 resposta, então lá na tabela resposta você terá na chave estrangeira o ID =1 apontando pro ID da tabela resposta 1, 2.

id_tabela_resposta | id_tabela_pergunta
1                  |      1
2                  |      1
3                  |      2

entendeu? o resultado será parecido com este se estiver tudo certo!

 

sim, agora ele listou todas as respostas, não importa o id da url...

e uso o phpmyadmin..

 

com os nomes certos ficou assim...

$sql = mysql_query("SELECT respostas.nome FROM respostas
LEFT JOIN perguntas
ON respostas.id = perguntas.id")or die (mysql_error());

no phpmyadmin ta igual ao que você botou, mais na pratica, com sua listagem ele listou todos os resultados das perguntas :3

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom se a sua SQL está retornando os dados corretamente para você agora basta exibir ele no seu site,

vamos lá: manda o seu HTML pra eu dá uma olhada, mas me informe sobre a TABELA reposta e a tabela pergunta, se possível o script que você usou pra criar estas tabelas no banco, mais especificamente os campos de cada tabela.

 

Att.

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.