Erreur sql

Résolu/Fermé
fm825 Messages postés 523 Date d'inscription samedi 3 mai 2008 Statut Membre Dernière intervention 13 septembre 2014 - 23 déc. 2011 à 11:08
fm825 Messages postés 523 Date d'inscription samedi 3 mai 2008 Statut Membre Dernière intervention 13 septembre 2014 - 28 déc. 2011 à 00:17
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 samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 144
24 déc. 2011 à 00:29
Salut,

Visiblement $numstart n'est pas défini car je vois "LIMIT ,6"
0
fm825 Messages postés 523 Date d'inscription samedi 3 mai 2008 Statut Membre Dernière intervention 13 septembre 2014 36
24 déc. 2011 à 10:22
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 samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 144
24 déc. 2011 à 10:41
Salut,

Tu as oublié de fermer une parenthèse ;)
if ( isset($_GET['cat']) ) {
0
fm825 Messages postés 523 Date d'inscription samedi 3 mai 2008 Statut Membre Dernière intervention 13 septembre 2014 36
24 déc. 2011 à 11:23
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 samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 144
24 déc. 2011 à 11:29
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 523 Date d'inscription samedi 3 mai 2008 Statut Membre Dernière intervention 13 septembre 2014 36
24 déc. 2011 à 11:47
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 samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 144
24 déc. 2011 à 12:06
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 samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 144
24 déc. 2011 à 12:07
(Et tu as fait une erreur : $nb = mysql_num_rows(mysql_query($req)) || die(mysql_error()); )
0
fm825 Messages postés 523 Date d'inscription samedi 3 mai 2008 Statut Membre Dernière intervention 13 septembre 2014 36
Modifié par fm825 le 24/12/2011 à 14:25
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 samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 144
24 déc. 2011 à 17:31
Effectivement, tu construis ta requête avec $sql, et tu lui donnes $req au final... !
0
fm825 Messages postés 523 Date d'inscription samedi 3 mai 2008 Statut Membre Dernière intervention 13 septembre 2014 36
24 déc. 2011 à 17:41
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 samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 144
24 déc. 2011 à 17:43
D'accord, de rien ;)
0
fm825 Messages postés 523 Date d'inscription samedi 3 mai 2008 Statut Membre Dernière intervention 13 septembre 2014 36
28 déc. 2011 à 00:03
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
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 523 Date d'inscription samedi 3 mai 2008 Statut Membre Dernière intervention 13 septembre 2014 36
28 déc. 2011 à 00:17
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