8797 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai un moteur de recherche sur mon site mais lorsque l'on tape : diam's j'ai ça à l'écrant :

Warning: mysql_numrows() expects parameter 1 to be resource, boolean given in

Ca vient de l'apostrophe, la ligne indiqué de l'erreur est :


$resultat= mysql_numrows($req);

J'ai lue qu'il faut utiliser stripslashes mais je n'y arrive pas.

Merci de vos lumières Smiley decu
Modifié par CVS (14 Sep 2012 - 20:30)
La syntaxe exacte est mysql_num_rows.

Ensuite, vu la tête de l'erreur, ça veut dire qu'il n'y a rien en paramètre dans ta fonction, donc que ta variable $req est vide. Tu devrais plutôt chercher de ce côté là.

Concernant les apostrophes, MySQL ne peut pas insérer de chaîne en comportant en base de données (et puis c'est pas sécurisé), c'est pour ça qu'il vaut mieux, lorsqu'on fait une requête d'insertion ou de modification, formater les variables avec mysql_real_escape_string(); cela va ajouter un caractère d'échappement avant ton apostrophe. Pour enlever ce caractère d'échappement lorsqu'on récupère cette valeur de la BDD pour l'afficher, on utiliser stripslashes().

par exemple :

$var = "Diam's";
mysql_query("INSERT INTO matable (artiste) VALUES('".$var."')"); #erreur

$var = mysql_real_escape_string("Diam's");
mysql_query("INSERT INTO matable (artiste) VALUES('".$var."')"); #va insérer la chaîne Diam\'s


Si tu essayes ensuite d'afficher la valeur récupérée de la base de donnée ($res->artiste);

$var = $res->artiste;
echo $var; #Affichera "Diam\'s"
echo stripslashes($var); #Affichera "Diam's"

Modifié par MattBPA (14 Sep 2012 - 17:48)
Le code fonctionne nickel sur un autre site mais sur celui ci j'ai. Aucun problème avec Diam's.
Php 5.2

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in

Php 5.3

Je m'arrache les cheveux !!!

J'ai comme l'impression que c'est la fonction "mysql_num_rows()" qui coince mais je suis pas un spécialiste ....
Modifié par CVS (14 Sep 2012 - 19:47)
<?php

if ($_POST['recherche'] == "" )
{
//on redirige le visiteur sur la page de recherche
('location: index.php?msg=Veuillez+indiquer+le+mot+recherché+!');

}else{


//Importation du fichier de configuration
require_once('config.php');
echo''.$tittle.'<br>';

//on se connecte à la base de donnée
$db = mysql_connect($host,$login,$pass) or die ("erreur de connexion");

//selection de vôtre base de donnée
mysql_select_db($base,$db) or die ("erreur de connexion base");

//requète de recherche
$req = mysql_query("SELECT url, titre FROM $table WHERE mots_cles LIKE '%".$_POST['recherche']."%' Order by url Asc ");

//on compte les resultats
$resultat = mysql_num_rows($req);

// Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in

if(empty($resultat)){

echo'<div align = "center"><font color="#003186" size="2" face="Verdana, Arial, Helvetica, sans-serif"><strong>Désolé, mais aucun resultat ne correspond à votre recherche, veuillez recommencer merci.</strong></font><br><br></div>';
}
else{

//on affiche le nombre de resultats
echo'<table width="90%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr bgcolor="#18447F">
<td colspan="4">
<div align="center"><font color="#FFFFFF">Pour le mot </font><em><font color="#FFFFFF" size="3" face="Verdana, Arial, Helvetica, sans-serif"><strong>'.$_POST['recherche'].'</strong></font></em>
<font color="#FFFFFF"> il y\'a : </font><font color="#FFFFFF" size="2" face="Verdana, Arial, Helvetica, sans-serif"><em><strong>';
if($resultat <=1)
echo''.$resultat.' resultat';
elseif($resultat >1)
echo''.$resultat.' resultats';
echo'</strong></em>
</font></div></td>
</tr>
<tr>

</tr><table/>';
//on ressort les infos par ordres alphabétiques
while( $result = mysql_fetch_array($req))
{
echo'<table width="95%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr bgcolor="#FFFFCC">
<td width="30%"><u>Titre de la page</u> :</td>
<td colspan="2" bgcolor="#FFFFCC">'.$result Smiley titre .'</td>
</tr>
<tr>
<td height="3"></td>
<td></td>
<td></td>
</tr>
<tr bgcolor="#FFFFCC">
<td ><u>Liens vers la page de votre recherche</u> :</td>
<td colspan="2" bgcolor="#FFFFCC"><a href="'.$result Smiley url .'">'.$result Smiley url .'</a></td>
</tr>
<tr>
<td height="3"></td>
<td></td>
<td></td>
</tr><hr>';

}
echo'</table><br>';
}

//on ferme la connexion
mysql_close();
print'<div align = "center"><a href="javascript:history.back();">Retour au moteur de recherche</a></div>';
echo'<br>'.$copyright.'';
}

?>
Modifié par CVS (14 Sep 2012 - 20:12)
Bon... mis à part que ton code est absolument dégueulasse à tous les niveaux, si tu remplaces cette ligne :


$req = mysql_query("SELECT url, titre FROM $table WHERE mots_cles LIKE '%".$_POST['recherche']."%' Order by url Asc ");


Par :


$req = mysql_query("SELECT url, titre FROM $table WHERE mots_cles LIKE '%".mysql_real_escape_string($_POST['recherche'])."%' Order by url Asc "); 


Ça va fonctionner.
Tu es un dieu comme à chaque fois Smiley cligne

J'ai compris ta modification, j'adore apprendre Smiley cligne

Le code vient d'un script trouvé sur le net.

Il fonctionne pour moi.

Merci encore à vous Smiley smile
Modifié par CVS (14 Sep 2012 - 20:32)