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 -
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:
Je ne vois pas ou j'ai pu commettre une erreur si quel qu'un peu m'aider sa serait top.
Merci
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
-
Salut,
Visiblement $numstart n'est pas défini car je vois "LIMIT ,6"
-
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 39if (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 -
Salut,
Tu as oublié de fermer une parenthèse ;)
if ( isset($_GET['cat']) ) {
-
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 -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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... -
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 -
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 -
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 -
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...