Erreur sql

Résolu
fm825 Messages postés 522 Date d'inscription   Statut Membre Dernière intervention   -  
fm825 Messages postés 522 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,


J'essaye de faire un moteur de recherche pour mon site qui rechercherais dans la base de donné mais j'ai une erreur :
Error with request SELECT * FROM articles WHERE ptitre LIKE '%test%' OR categorie LIKE '%test%' OR article_content LIKE '%test%' ORDER BY article_pub DESC LIMIT ,6
Voici le scripte que j'utilise je ne vois pas ou pourrait être l'erreur:

$req = "SELECT * FROM $db_table WHERE ";
if($type==1)
{//un des mots 
        $mots = explode(' ',$rec);//En separre lexpression en mots cles
        foreach($mots as $mot)
        {
                $req .= " ptitre LIKE '%".$mot."%' OR categorie LIKE '%".$mot."%' OR article_content LIKE '%".$mot."%' ";
        }
}
elseif($type==2)
{//tout les mots 
        $mots = explode(' ',$rec);
        foreach($mots as $mot)
        {
                $req .= " ptitre LIKE '%".$mot."%' OR categorie LIKE '%".$mot."%' OR article_content LIKE '%".$mot."%' ";
        }
}
else
{
//expression exacte
 $req .= "ptitre LIKE '%".$rec."%' OR categorie LIKE '%".$rec."%' OR article_content LIKE '%".$rec."%'";
}
//Articles ranges par date
$req .= " ORDER BY article_pub DESC LIMIT $num_start,$nb_article";


Je ne vois pas ou j'ai pu commettre une erreur si quel qu'un peu m'aider sa serait top.
Merci

9 réponses

Autumn`Tears Messages postés 1054 Date d'inscription   Statut Membre Dernière intervention   145
 
Salut,

Visiblement $numstart n'est pas défini car je vois "LIMIT ,6"
0
fm825 Messages postés 522 Date d'inscription   Statut Membre Dernière intervention   36
 
Merci il est vrais j'avais oublié de définir $numstart
J'ai encore un problème :
Parse error: syntax error, unexpected '{' in F:\Bureau\WebAppPortable\App\app\recherche.php on line 39
J'ai mis en gras la ligne 39
if (isset($_GET) && isset($_GET['page']) && is_numeric(trim($_GET['page']))) {
	if ($_GET['opr']=1) $operateur = 'AND';
	else $operateur= 'OR';

	# Get values
	$num_page = abs(intval(trim($_GET['page'])));
	$num_start = $num_page * $nb_article;

}		
if (isset($_GET['cat']) {
$sql =  "SELECT * FROM $db_table WHERE categorie LIKE\"%$_GET['cat']%\" AND (ptitre LIKE \"%$tab[0]%\" OR article_content LIKE \"%$tab[0]%\") ";
for($i=1 ; $i<$nb; $i++)
        {
        $sql.="$operateur (ptitre LIKE \"%$tab[$i]%\" OR article_content LIKE \"%$tab[$i]%\") ";       // on boucle pour integrer tous les mots dans la requête
        }
}
else {
$sql =  "SELECT * FROM $db_table WHERE (ptitre LIKE \"%$tab[0]%\" OR categorie LIKE \"%$tab[0]%\" OR article_content LIKE \"%$tab[0]%\") ";
for($i=1 ; $i<$nb; $i++)
        {
        $sql.="$operateur (categorie LIKE \"%$tab[$i]%\" OR ptitre LIKE \"%$tab[$i]%\" OR article_content LIKE \"%$tab[$i]%\") ";       // on boucle pour integrer tous les mots dans la requête
        }
}	



Merci
0
Autumn`Tears Messages postés 1054 Date d'inscription   Statut Membre Dernière intervention   145
 
Salut,

Tu as oublié de fermer une parenthèse ;)
if ( isset($_GET['cat']) ) {
0
fm825 Messages postés 522 Date d'inscription   Statut Membre Dernière intervention   36
 
Aujourd'hui j'ai pas les yeux en face des troue ...

Maintenant il m'affiche tous les posts disponible dans la BDD quand je lui envoie "?rec=test" dans l'url alors que il ne devrais donner que deux post qui contienne se mot clé Eten guise d'erreur j'ai :
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in F:\Bureau\WebAppPortable\App\app\recherche.php on line 91

if (isset($_GET) && isset($_GET['page']) && is_numeric(trim($_GET['page']))) {
	if ($_GET['opr']=1) $operateur = 'AND';
	else $operateur= 'OR';

	# Get values
	$num_page = abs(intval(trim($_GET['page'])));
	$num_start = $num_page * $nb_article;

}		
if (isset($_GET['cat'])) {
$sql =  "SELECT * FROM $db_table WHERE categorie LIKE \"%".$_GET['cat']."%\" AND (ptitre LIKE \"%".$tab[0]."%\" OR article_content LIKE \"%".$tab[0]."%\") ";
for($i=1 ; $i<$nb; $i++)
        {
        $sql.="$operateur (ptitre LIKE \"%$tab[$i]%\" OR article_content LIKE \"%$tab[$i]%\") ";       // on boucle pour integrer tous les mots dans la requête
        }
}
else {
$sql =  "SELECT * FROM $db_table WHERE (ptitre LIKE \"%$tab[0]%\" OR categorie LIKE \"%$tab[0]%\" OR article_content LIKE \"%$tab[0]%\") ";
for($i=1 ; $i<$nb; $i++)
        {
        $sql.="$operateur (categorie LIKE \"%$tab[$i]%\" OR ptitre LIKE \"%$tab[$i]%\" OR article_content LIKE \"%$tab[$i]%\") ";       // on boucle pour integrer tous les mots dans la requête
        }
}	

$sql.= " ORDER BY article_pub DESC LIMIT $num_start,$nb_article" ;


[...]

printContent($req, 0); // revoie les posts

  $nb = mysql_num_rows(mysql_query($req));
  if($nb == 0) echo '<div class="post">Fin des posts...</div>';


Ici c'est quoi le problème je fait des requette sql trop longue pour effectuer la recherche.
Car je voulais permettre de rechercher dans ptitre, article_content et categorie sachant que si l'on sélectionne une catégorie dans le moteur de recherche on ne vas pas rechercher les mots clés dedans sachant qu'on a une valeur exacte..
Les messages d'erreur c'est pas vraiment mon truc merci
0
Autumn`Tears Messages postés 1054 Date d'inscription   Statut Membre Dernière intervention   145
 
Essaie de faire ça déjà : mysql_query($req) || die(mysql_error());
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fm825 Messages postés 522 Date d'inscription   Statut Membre Dernière intervention   36
 
Sa me donne la même erreur si je met
$nb = mysql_num_rows(mysql_query($req) || die(mysql_error()));

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in F:\Bureau\WebAppPortable\App\app\recherche.php on line 90
Il incrimine la ligne du dessus j'ai l'impression que compté lui donne mal a la base...
0
Autumn`Tears Messages postés 1054 Date d'inscription   Statut Membre Dernière intervention   145
 
En fait, faudrait le faire sans mysql_num_rows pour le moment, pour voir si il y a un souci avec la requête en elle même
0
Autumn`Tears Messages postés 1054 Date d'inscription   Statut Membre Dernière intervention   145
 
(Et tu as fait une erreur : $nb = mysql_num_rows(mysql_query($req)) || die(mysql_error()); )
0
fm825 Messages postés 522 Date d'inscription   Statut Membre Dernière intervention   36
 
L'erreur et du au faite que j'avais oublié de rafraichir le cache

donc J'ai :

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in F:\Bureau\WebAppPortable\App\app\recherche.php on line 91
Query was empty


pour : $nb = mysql_num_rows(mysql_query($req)) || die(mysql_error());

et pour $nb =mysql_query($req) || die(mysql_error());

J'ai seulement : Query was empty
0
Autumn`Tears Messages postés 1054 Date d'inscription   Statut Membre Dernière intervention   145
 
Effectivement, tu construis ta requête avec $sql, et tu lui donnes $req au final... !
0
fm825 Messages postés 522 Date d'inscription   Statut Membre Dernière intervention   36
 
Effectivement j'y vois rien aujourd'hui. Maintenat j'ai plus d'erreur, il faut que j'ajuste la pagination quand il y'a beaucoup de résultat mais je pense que je vais chercher ...

Merci
0
Autumn`Tears Messages postés 1054 Date d'inscription   Statut Membre Dernière intervention   145
 
D'accord, de rien ;)
0
fm825 Messages postés 522 Date d'inscription   Statut Membre Dernière intervention   36
 
Bonsoir,
J'ai de nouveau un problème avec des requettes plus gros voilà le code retourné :

Error with request SELECT * FROM articles WHERE (ptitre LIKE "%test%" OR categorie LIKE "%test%" OR article_content LIKE "%test%") (categorie LIKE "%data%" OR ptitre LIKE "%data%" OR article_content LIKE "%data%") ORDER BY article_pub DESC LIMIT 0,6

J'ai utilisé :
http://127.0.0.1/recherche.php?cat=macat&rec=test+data

Le code utilisé est le suivant :

$recherche=strtolower($_GET['rec']);                       

$mots = str_replace("+", " ", trim($recherche));        
$tab=explode(" " , $mots);                 
$nb=count($tab);                                            // on compte le nbr d'élément du tableau.

if (isset($_GET) && isset($_GET['page']) && is_numeric(trim($_GET['page']))) {
	if ($_GET['opr']=1) $operateur = 'AND';
	else $operateur= 'OR';

	$num_page = abs(intval(trim($_GET['page'])));
	$num_start = $num_page * $nb_article;

}		
if (!isset($_GET['cat']) or $_GET['cat']='nocat') {
$sql =  "SELECT * FROM $db_table WHERE (ptitre LIKE \"%$tab[0]%\" OR categorie LIKE \"%$tab[0]%\" OR article_content LIKE \"%$tab[0]%\") ";
for($i=1 ; $i<$nb; $i++)
        {
        $sql.="$operateur (categorie LIKE \"%$tab[$i]%\" OR ptitre LIKE \"%$tab[$i]%\" OR article_content LIKE \"%$tab[$i]%\") ";       // on boucle pour integrer tous les mots dans la requête
        }
}
else {
$sql =  "SELECT * FROM $db_table WHERE categorie LIKE \"%".$_GET['cat']."%\" AND (ptitre LIKE \"%".$tab[0]."%\" OR article_content LIKE \"%".$tab[0]."%\") ";
for($i=1 ; $i<$nb; $i++)
        {
        $sql.="$operateur (ptitre LIKE \"%$tab[$i]%\" OR article_content LIKE \"%$tab[$i]%\") ";       
        }		
}	
$sql.= " ORDER BY article_pub DESC LIMIT $num_start,$nb_article" ;


Si l'on peut me dire quelle est le problème

Merci
0
le père
 
Bonsoir

Ta requête est de la forme
SELECT * FROM articles WHERE (truc) (machin) ORDER BY ...
Ce n'est pas correct, il te faut un AND ou un OR entre (truc) et (machin) selon ce que tu cherches à faire
0
fm825 Messages postés 522 Date d'inscription   Statut Membre Dernière intervention   36
 
Oui je viens de remarquer mon opérateur était dans une condition et donc n'était pas présent j'ai corrigé cela maintenant cela fonctionne mieux...
0