[PHP/SQL] Problem Moteur de Recherche

Résolu/Fermé
Digit@lChord Messages postés 129 Date d'inscription mardi 24 novembre 2009 Statut Membre Dernière intervention 5 septembre 2012 - Modifié par Digit@lChord le 18/12/2011 à 12:32
Digit@lChord Messages postés 129 Date d'inscription mardi 24 novembre 2009 Statut Membre Dernière intervention 5 septembre 2012 - 18 déc. 2011 à 14:01
Bonjour,
Je cherche a faire un moteur de recherche qui affiche tout les résultat dans un tableau.
Donc apres avoir vu la mise en page et les differente caracteristiques de ce tableau sa ma donné sa :

$keyword = $_GET['search'];   

$query = mysql_query("SELECT JR_main.ID,JR_main.IOS,JR_main.TYPE,JR_main.STATUS,JR_devices.IPH,JR_devices.IPH3G,JR_devices.IPH3GS,JR_devices.IPH4G,JR_devices.IPH4GS,JR_devices.IPOD1G,JR_devices.IPOD2G,JR_devices.IPOD3G,JR_devices.IPOD4G,JR_devices.IPAD1G,JR_devices.IPAD2G FROM JR_main,JR_devices WHERE JR_main.ID = JR_devices.ID AND type LIKE '%$keyword%' OR status LIKE '%$keyword%' OR ios LIKE '%$keyword%' ORDER BY id DESC") or die (mysql_error()); 
$nb_resultats = mysql_num_rows($query);  
while($data = mysql_fetch_array($query)) { 
  echo '<tr class="'; 
  echo ($c<0) ? 0 : ($c++ % 2 == 1) ? odd : even; 
  if($data['STATUS'] == "Coming Soon") { echo'soon">'; } else { echo'" onclick="DoNav(\'device.php?id='.$data['ID'].'\');">';}; 
  echo '<td class="osimg">'; 
  echo '<img src="img/iOS.png" class="icon"></td>'; 
  echo '<td class="ios"><b>'.$data['IOS'].'</b></td>';  
  echo '<td class="compatibility"><div class="info">'; 
  echo '<img src="img/dyna_2/iph1g'.$data['IPH'].'.png"><img src="img/dyna_2/iph3g'.$data['IPH3G'].'.png"><img src="img/dyna_2/iph3gs'.$data['IPH3GS'].'.png"><img src="img/dyna_2/iph4g'.$data['IPH4G'].'.png"><img src="img/dyna_2/iph4gs'.$data['IPH4GS'].'.png"><img src="img/dyna_2/ipod1g'.$data['IPOD1G'].'.png"><img src="img/dyna_2/ipod2g'.$data['IPOD2G'].'.png"><img src="img/dyna_2/ipod3g'.$data['IPOD3G'].'.png"><img src="img/dyna_2/ipod4g'.$data['IPOD4G'].'.png"><img src="img/dyna_2/ipad1g'.$data['IPAD1G'].'.png"><img src="img/dyna_2/ipad2g'.$data['IPAD2G'].'.png">'; 
  echo '</div></td>'; 
  echo '<td class="type"><b><font color="'; 
  if($data['TYPE'] == "Warning") { echo'#ff0000'; } else { }; 
  echo '">'.$data['TYPE'].'</font></b></td>'; 
  echo '<td class="status"><b><div class="'.$data['STATUS'].'">'.$data['STATUS'].'</div></b></td></tr>';  
} 
mysql_free_result ($query); 


Sa fonctione, le ou les résultats s'affiche avec la mise en page demandé MAIS le probleme c'est qu'il m'affiche 35 lignes (la totalitée des lignes des 2 tables JR_main et JR_devices) avec les même valeurs dans chaque lignes (valeur de la ligne que je recherche).

Alors que normalement il est censé m'afficher seulement le nombre de lignes comportant mon mot clé !!

Je pense que le probleme ce situe au niveau de la ligne "
WHERE JR_main.ID = JR_devices.ID AND type LIKE '%$keyword%' OR status LIKE '%$keyword%' OR ios LIKE '%$keyword%' ORDER BY id DESC
")" mais je sais pas du tout le reformuler autrement.

Voila voila, j'espere que quelqu'un saura m'aider la dessus, si vous voyez quelque chose qui va pas sur ce code dites le moi parceque moi je ne vois strictement aucuns problemes.

Merci d'avance..
A voir également:

2 réponses

maka54 Messages postés 699 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 4 décembre 2016 80
18 déc. 2011 à 13:25
il faut faire un jointure

à la place de :
FROM JR_main,JR_devices WHERE JR_main.ID = JR_devices.ID


tu mets :

FROM JR_main INNER JOIN JR_devices ON JR_main.ID = JR_devices.ID
0
Digit@lChord Messages postés 129 Date d'inscription mardi 24 novembre 2009 Statut Membre Dernière intervention 5 septembre 2012 8
18 déc. 2011 à 13:34
Merci, Sa ma l'air bon sauf que j'ai sa :

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM JR_main INNER JOIN JR_devices ON JR_main.ID = JR_devices.ID WHERE JR_main.t' at line 1
0
maka54 Messages postés 699 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 4 décembre 2016 80
18 déc. 2011 à 13:38
mets ta requete modifiée en entiere pour voir qu'est ce qui ne va pas
0
Digit@lChord Messages postés 129 Date d'inscription mardi 24 novembre 2009 Statut Membre Dernière intervention 5 septembre 2012 8
18 déc. 2011 à 13:42
$query = mysql_query("SELECT JR_main.ID,JR_main.IOS,JR_main.TYPE,JR_main.STATUS,JR_devices.IPH,JR_devices.IPH3G,JR_devices.IPH3GS,JR_devices.IPH4G,JR_devices.IPH4GS,JR_devices.IPOD1G,JR_devices.IPOD2G,JR_devices.IPOD3G,JR_devices.IPOD4G,JR_devices.IPAD1G,JR_devices.IPAD2G FROM JR_main,JR_devices FROM JR_main INNER JOIN JR_devices ON JR_main.ID = JR_devices.ID WHERE JR_main.type LIKE '%$keyword%' OR JR_main.status LIKE '%$keyword%' OR JR_main.ios LIKE '%$keyword%' ORDER BY id DESC") or die (mysql_error());
0
maka54 Messages postés 699 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 4 décembre 2016 80
Modifié par maka54 le 18/12/2011 à 13:48
le problème est
JR_main.TYPE


premièrement, type est un mot reservé de sql, pour éviter des soucies je te conseille de mettre des quotes autour (les quotes en sql, c'est alt Gr + 7)

ensuite, à un endroit type est en majuscule et par la suite , il est en miniscule

idem pour ios, id , status et peut être d'autre, fais attention de respecter la casse

autre chose, tu fais un order by id, mais tu as plusieurs id dans tes tables, tu auras un message d'erreur car il ne saura pas de quel id tu parles
0
Digit@lChord Messages postés 129 Date d'inscription mardi 24 novembre 2009 Statut Membre Dernière intervention 5 septembre 2012 8
18 déc. 2011 à 14:01
Merci de ton aide je vais regarder tout sa :) (j'ai mis des quotes SQL, même erreur :s)
Ah et au depart j'avais fait la requete sans la recherche et sa fonctionnais tres bien :

$sql = 'SELECT JR_main.ID,JR_main.IOS,JR_main.TYPE,JR_main.STATUS,JR_devices.IPH,JR_devices.IPH3G,JR_devices.IPH3GS,JR_devices.IPH4G,JR_devices.IPH4GS,JR_devices.IPOD1G,JR_devices.IPOD2G,JR_devices.IPOD3G,JR_devices.IPOD4G,JR_devices.IPAD1G,JR_devices.IPAD2G FROM JR_main,JR_devices WHERE JR_main.ID = JR_devices.ID ORDER BY id DESC';  


Et dans cette requete le ORDER BY id DESC fonctionne.

Bref au cas ou j'ai trouvé une autre technique moins propre mais qui fonctionne :P
0