pb : adaptation moteur

Répondre
Peacock
le 23/02/2005 à 12:19
Peacock
Bonjour à tous,

Y avait longtemps, au moins depuis 2004...
Le pb qui m'amène et une erreur de syntaxe sur une adaptation du moteur utilisé dans Daforum...

Dans mon cas je veux que la recherche se fasse sur deux champs... Tout roule pour un seul mot entré dans le champs de recherche, dés que je rentre deux mots l'erreur suivante MySQL suivante se pointe :
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/base/html/pages/produits.php on line 208

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/base/html/pages/produits.php on line 211

Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in /home/base/html/pages/produits.php on line 226


Dans l'adaptation, je ne fais pas appelle au fichier config.php comme dans le script du moteur de Daforum, mais juste un fichier php include qui donne les paramètres sous la forme classique :

<?
$phputilisateur="dsq357";
$phpmotdepasse="123456";
$host="localhost";
$base="dsq357";

?>

Quant au code,la partie où ça se joue, le voici :

<?php	if( !empty($submit_recherche) ) 
{
if( !empty($recherche) )
{
$recherche=ereg_replace("[ ]{2,}", " ", $_GET['recherche']);
$tablo_recherche = explode (" ", $recherche);
$nb_element_recherche = count ($tablo_recherche);

if ($_GET['type_search'] == 'et') {
$operateur = 'AND';
}
else {
$operateur = 'OR';
}

$nb_affichage_par_page = 10;

$sql = 'SELECT DISTINCT * FROM prod_tbl WHERE (';
for($i = 0; $i < $nb_element_recherche; $i++) {
if ($i == 0) {
if ($i == ($nb_element_recherche-1)) {
$sql .= ' prod_tbl.Texte LIKE "%'.$tablo_recherche[$i].'%" OR prod_tbl.Titre LIKE "%'.$tablo_recherche[$i].'%")';
}
else {
$sql .= 'prod_tbl.Texte LIKE "%'.$tablo_recherche[$i].'%" OR prod_tbl.Titre LIKE "%'.$tablo_recherche[$i].'%")';
}
}
elseif ($i == ($nb_element_recherche-1)) {
$sql .= ' '.$operateur.' (prod_tbl.Texte LIKE "%'.$tablo_recherche[$i].'%" OR prod_tbl.Titre LIKE "%'.$tablo_recherche[$i].'%")';
}
else {
$sql .= ' '.$operateur.' (prod_tbl.Texte LIKE "%'.$tablo_recherche[$i].'%" OR prod_tbl.Titre LIKE "%'.$tablo_recherche[$i].'%")';
}
}
$sql .= ' ORDER BY prod_tbl.Titre DESC';

$resultat = mysql_db_query($base, $sql, $id_lien) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$enr = mysql_num_rows($resultat);

$nbtotal = $enr;

if ($nbtotal == 0) {
$resultats_obtenus = "<i>Aucune réponse trouvée...</i>";
}
else {
if (!isset($_GET['debut'])) $_GET['debut'] = 0;

$sql = 'SELECT DISTINCT * FROM prod_tbl WHERE (';
for($i = 0; $i < $nb_element_recherche; $i++) {
if ($i == 0) {
if ($i == ($nb_element_recherche-1)) {
$sql .= ' prod_tbl.Texte LIKE "%'.$tablo_recherche[$i].'%" OR prod_tbl.Titre LIKE "%'.$tablo_recherche[$i].'%")';
}
else {
$sql .= ' prod_tbl.Texte LIKE "%'.$tablo_recherche[$i].'%" OR prod_tbl.Titre LIKE "%'.$tablo_recherche[$i].'%")';
}
}
elseif ($i == ($nb_element_recherche-1)) {
$sql .= ' '.$operateur.' (prod_tbl.Texte LIKE "%'.$tablo_recherche[$i].'%" OR prod_tbl.Titre LIKE "%'.$tablo_recherche[$i].'%"))';
}
else {
$sql .= ' '.$operateur.' (prod_tbl.Texte LIKE "%'.$tablo_recherche[$i].'%" OR prod_tbl.Titre LIKE "%'.$tablo_recherche[$i].'%"))';
}
}
$sql .= ' ORDER BY prod_tbl.Titre ASC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;

$resultat = mysql_query($sql);
$nbenr = mysql_num_rows($resultat);

$resultats_obtenus = "";
while ($enr = mysql_fetch_array($resultat))
{
$Num = $enr['Num'];
$Titre = $enr['Titre'];
$Rea = $enr['Rea'];


$resultats_obtenus .='<SPAN class="antracite10-B"><A HREF="javascript:fiche('.$Num.')">' .$Titre.' &nbsp; </SPAN>
<SPAN class="noir10-B">'.$Rea.'</SPAN></a><br><br>';

}
mysql_free_result($resultat);
include ('../forum/includes/functions.php');
$barre_nav = barre_navigation($nbtotal, $nb_affichage_par_page, $_GET['debut'], '5');
}
}
?>
zebden
le 23/02/2005 à 12:39
zebden
mysql_db_query :
Soyez avertis que cette fonctoin ne restaure pas la base de données qui était utilisée initialement. En d'autres termes, vous ne pouvez utiliser cette fonction pour exécuter temporarairement une requête SQL dans une autre base de donées. Il vous faudra sélectionner manuellement la bonne base à nouveau. Il est recommandé d'utiliser la syntaxe SQL base.table.

Donc quand tu utilise mysql_query par la suite , il n'y plus de base selectionné.
je suppose que ca vient de la.
zebdinou pour les intimes / Blog : http://www.zebden.fr
Peacock
le 23/02/2005 à 15:26
Peacock
Salut Zebden,

Si je met partout mysql_query($sql) et en amont un :
mysql_select_db ($base);

Ben, j'ai les trois warnings,

[/b]
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/base/html/pages/produits.php on line 208

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/base/html/pages/produits.php on line 211

Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in /home/base/html/pages/produits.php on line 226[/b]


qui apparaissent toujours
pour une recherche sur plus d'un mot.

a+,
merci d'avance,
Peacock
Peacock
le 23/02/2005 à 15:57
Peacock
Toujours efficace LA GLOBULE...

Une parenthèse en trop en fin de requête,

elseif ($i == ($nb_element_recherche-1)) {
$sql .= ' '.$operateur.' (prod_tbl.Texte LIKE "%'.$tablo_recherche[$i].'%" OR prod_tbl.Titre LIKE "%'.$tablo_recherche[$i].'%"))';
}
else {
$sql .= ' '.$operateur.' (prod_tbl.Texte LIKE "%'.$tablo_recherche[$i].'%" OR prod_tbl.Titre LIKE "%'.$tablo_recherche[$i].'%"))';


à ce propos dans ma tentative de depiotage du code, quelle est la signification du .=

Merci
zebden
le 23/02/2005 à 16:03
zebden
je me repete mysql_db_query annule toute selection de base au prealable. Donc une fois mysql_db_query executé il n'y a pu de bases selectionnés

le .= est pour concatener

$toto = 'tata';
$toto .= ' est pas jolie';

$toto vaut 'tata est pas jolie'
zebdinou pour les intimes / Blog : http://www.zebden.fr
Peacock
le 23/02/2005 à 17:20
Peacock
Merci,

mysql_db_query , j'avais bien compris...

quant au reste je me disais un truc comme ça
sans trouver les mots...La fameuse concatenation de chaîne...
Rex
le 23/02/2005 à 17:24
Rex
surtout que mysql_db_query ne doit jamais être utilisé (dixit la Doc)
Un hamster dit : J'ai dressé le scientifique, quand j'appuie sur le bouton, il me donne des graines
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours