Ir para conteúdo

Arquivado

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

Danny89

Qual é o erro desse código?

Recommended Posts

Boa tarde, estou criando um campo de pesquisa por filtro onde o usuário poderá fazer combinações e com isso retornar um valor Ex: Buscar somente usuarios que possuem curso de ingles, engenharia e moram em SP

 

Tenho esse código, mas n sei como proceder e o que há de errado nele

 

Segue

 

html

head>

<title>Filtro com HTML e PHP</title>
    </head>
    <body>
        <form method="post" action="filtro.php">
            <table cellpadding="10">
                <tr>
                    <td rowspan="2">Filtrar por:</td>
                    <td>
                        Estado: <select name="estado">
                            <option value="TODOS">Todos</option>
                            <option value="MG">MG</option>
                            <option value="RJ">RJ</option>
                            <option value="SP">SP</option>
                        </select>
                    </td>
                    <td>
                        Sexo: <select name="sexo">
                            <option value="TODOS">Todos</option>
                            <option value="M">Masculino</option>
                            <option value="F">Feminino</option>
                        </select>
                    </td>
                </tr>
                <tr>
                    <td>Idade: <input type="text" name="idade" size="5"></td>
                    <td>Formacao: <input type="text" name="formacao"></td>
                    <td><input type="submit" name="filtrar" value="Filtrar"></td>
                </tr>
            </table>
        </form>
    </body>
</html>
 
php

 

 $estado = $_POST['estado'];
$sexo = $_POST['sexo'];
$formacao = $_POST['formacao'];

$sql = mysql_query('SELECT * FROM candidatos WHERE id = $id');
$result = mysql_fetch_assoc($sql);
while ($result = mysql_fetch_assoc($retorno))

{
if ($estado != 'TODOS') {
    $sql .= " AND estado = '$estado' ";
}

if ($sexo != 'TODOS') {
    $sql .= " AND sexo = '$sexo' ";
}


if (!empty($formacao)) {
    $sql .= " AND formacao = '$formacao' ";
}

$query = mysql_query($sql);
        }
        ?> 
Se puderem me dar uma luz eu agradeço

Compartilhar este post


Link para o post
Compartilhar em outros sites

O script retorna alguma msg de erro ??

Sim

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\wamp\www\recrutamento\filtro.php on line 15

 

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\wamp\www\recrutamento\filtro.php on line 16

 

está setando para essas linhas

$result = mysql_fetch_assoc($sql);

while ($result = mysql_fetch_assoc($retorno))

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu modifiquei, mas continua dando o mesmo erro e apontando pras mesmas linhas

 

$sql = mysql_query('SELECT * FROM candidatos WHERE id = $id');

$result = mysql_fetch_assoc($sql);

while ($result = mysql_fetch_assoc($sql))

Compartilhar este post


Link para o post
Compartilhar em outros sites

A sql em mysql_query('SELECT * FROM candidatos WHERE id = $id'); não é executada, pois você está usando aspas simples, com isso, o php não irá colocar o valor da variável $id. Mude para aspas duplas "

 

assim

mysql_query("SELECT * FROM candidatos WHERE id = $id");

#Ou

 

mysql_query('SELECT * FROM candidatos WHERE id ='. $id);

Compartilhar este post


Link para o post
Compartilhar em outros sites
 $estado = $_POST['estado'];
$---o = $_POST['---o'];
$formacao = $_POST['formacao'];

$sql = 'SELECT * FROM candidatos WHERE id =' . $id';
if ($estado != 'TODOS') {
    $sql .= " AND estado = '$estado' ";
}

if ($---o != 'TODOS') {
    $sql .= " AND ---o = '$---o' ";
}


if (!empty($formacao)) {
    $sql .= " AND formacao = '$formacao' ";
}
$query = mysql_query($sql);
while ($result = mysql_fetch_assoc($query))

{
        print_r $result;
}
        ?> 

Acho que é isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 $estado = $_POST['estado'];
$---o = $_POST['---o'];
$formacao = $_POST['formacao'];

$sql = 'SELECT * FROM candidatos WHERE id =' . $id';
if ($estado != 'TODOS') {
    $sql .= " AND estado = '$estado' ";
}

if ($---o != 'TODOS') {
    $sql .= " AND ---o = '$---o' ";
}


if (!empty($formacao)) {
    $sql .= " AND formacao = '$formacao' ";
}
$query = mysql_query($sql);
while ($result = mysql_fetch_assoc($query))

{
        print_r $result;
}
        ?> 
Agora caiu no seguinte erro Parse error: syntax error, unexpected T_STRING in C:\wamp\www\recrutamento\busca.php on line 15

 

Nessa linha if ($estado != 'TODOS') {

 

Acho que é isso.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ops, desculpe.

Ficou sobrando uma aspa simples depois do $id. Agora sim.

$estado = $_POST['estado'];
$---o = $_POST['---o'];
$formacao = $_POST['formacao'];

$sql = 'SELECT * FROM candidatos WHERE id =' . $id;
if ($estado != 'TODOS') {
    $sql .= " AND estado = '$estado' ";
}

if ($---o != 'TODOS') {
    $sql .= " AND ---o = '$---o' ";
}


if (!empty($formacao)) {
    $sql .= " AND formacao = '$formacao' ";
}
$query = mysql_query($sql);
while ($result = mysql_fetch_assoc($query))

{
        print_r $result;
}
        ?> 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ops, desculpe.

Ficou sobrando uma aspa simples depois do $id. Agora sim.

$estado = $_POST['estado'];
$---o = $_POST['---o'];
$formacao = $_POST['formacao'];

$sql = 'SELECT * FROM candidatos WHERE id =' . $id;
if ($estado != 'TODOS') {
    $sql .= " AND estado = '$estado' ";
}

if ($---o != 'TODOS') {
    $sql .= " AND ---o = '$---o' ";
}


if (!empty($formacao)) {
    $sql .= " AND formacao = '$formacao' ";
}
$query = mysql_query($sql);
while ($result = mysql_fetch_assoc($query))

{
        print_r $result;
}
        ?> 

 

Ops, desculpe.

Ficou sobrando uma aspa simples depois do $id. Agora sim.

$estado = $_POST['estado'];
$---o = $_POST['---o'];
$formacao = $_POST['formacao'];

$sql = 'SELECT * FROM candidatos WHERE id =' . $id;
if ($estado != 'TODOS') {
    $sql .= " AND estado = '$estado' ";
}

if ($---o != 'TODOS') {
    $sql .= " AND ---o = '$---o' ";
}


if (!empty($formacao)) {
    $sql .= " AND formacao = '$formacao' ";
}
$query = mysql_query($sql);
while ($result = mysql_fetch_assoc($query))

{
        print_r $result;
}
        ?> 

 

Estranho, agora aponta erro de sintaxe nessa linha aqui

 print_r $result; 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você mudou algo em relação ao último código que postou?

 

O meu está assim

 

<?php 
    include "conection.php";
	
	$banco = "recrutamento";
$connection = mysql_connect($host, $user, $pass) or die(mysql_error());
mysql_select_db($banco) or die(mysql_error());
      
      
 $estado = $_POST['estado'];
$sexo = $_POST['sexo'];
$formacao = $_POST['formacao'];

$sql = 'SELECT * FROM candidatos WHERE id =' . $id;
if ($estado != 'TODOS') {
    $sql .= " AND estado = '$estado' ";
}

if ($sexo != 'TODOS') {
    $sql .= " AND sexo = '$sexo' ";
}


if (!empty($formacao)) {
    $sql .= " AND formacao = '$formacao' ";
}
$query = mysql_query($sql);
while ($result = mysql_fetch_assoc($query))

{
        print_r $result;
}
        ?> 

Eu poderia substituir esse print_r $result; por alguma outra coisa?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu só não inclui as linhas de conexão com o banco, já que não tenho como conectar. :P

Pode substituir por um var_dump($result);

O $result é um array, então um echo não vai mostrar nada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz essa substituição, mas antes de eu efetuar a pesquisa ele já aponta o erro

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\wamp\www\recrutamento\busca.php on line 27 acima dos campos e quando efetuo alguma busca ele cai naqueles mesmos erros Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\wamp\www\recrutamento\filtro.php on line 15 e outro na linha 14

 

 

Se eu deixar print_r $result; ele sequer consegue acessar o busca.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça o seguinte:

<?php 
    include "conection.php";
	
	$banco = "recrutamento";
$connection = mysql_connect($host, $user, $pass) or die(mysql_error());
mysql_select_db($banco) or die(mysql_error());
      
      
 $estado = $_POST['estado'];
$---o = $_POST['---o'];
$formacao = $_POST['formacao'];

$sql = 'SELECT * FROM candidatos WHERE id =' . $id;
if ($estado != 'TODOS') {
    $sql .= " AND estado = '$estado' ";
}

if ($---o != 'TODOS') {
    $sql .= " AND ---o = '$---o' ";
}


if (!empty($formacao)) {
    $sql .= " AND formacao = '$formacao' ";
}
echo $sql;
$query = mysql_query($sql);
while ($result = mysql_fetch_assoc($query))

{
 var_dump($result);
}
?> 

Coloquei um echo no $sql. Copie o resultado e rode direto no banco de dados, pra ver o resultado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deu isso aqui

 

consulta SQL: Documentação

 

SELECT *

FROM candidatos

WHERE id =

AND estado = ''

AND sexo = ''

LIMIT 0 , 30

 

Mensagens do MySQL : Documentação

#1064 - 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 'AND estado = '' AND sexo = ''

LIMIT 0, 30' at line 1

 

E no sistema aparece esse: mysql_fetch_assoc(): supplied argument is not a valid MySQL

Compartilhar este post


Link para o post
Compartilhar em outros sites

ali onde tem três --- você subsitituiu por s e x certo?

 

ah mais uma coisa, parece que ele não está inserindo os valores das variáveis na consulta...

 

tenta, só pra eliminar esta possibilidade o seguinte:

 

if ($estado != 'TODOS') {
$sql .= " AND estado = 'MG' ";
}

deixa só esta linha e roda o script...

obs: supondo que você tenha algum registro no banco de dados com MG né?

 

obs2: o campo formação é de texto livre, quando você define que seja = ao que está no banco de dados fica complicado o usuário acertar exatamente...

 

minha sugestão é você criar mais tabelas: estados, formação e sexo, no html você faz um while e lista as opções de formação, sexo e estado. Assim se futuramente você quiser adicionar mais estados ou formações, não precisa editar o arquivo html, só o php...

 

obs3: mas caso você usar como texto aberto mesmo, faz assim: http://blog.thiagobelem.net/busca-no-mysql-usando-palavra-chave/

 

abraço

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.