Rectifictation du code ou script

Fermé
speedy fernandez Messages postés 11 Date d'inscription lundi 27 janvier 2014 Statut Membre Dernière intervention 17 octobre 2014 - Modifié par speedy fernandez le 26/05/2014 à 14:08
speedy fernandez Messages postés 11 Date d'inscription lundi 27 janvier 2014 Statut Membre Dernière intervention 17 octobre 2014 - 3 juin 2014 à 18:51
bonjour
j'ai crée un moteur de recherche dans un site une j'ai fait pour une entreprise de construction et lorsque l'internaute tape sa recherche, selon le code php que jai fait, le resultat exacte de sa recherche apparait, et ensuit, des resultats correspondand a un des champ rempli lui sont proposés.
je vous montre mon code php.




<?php
$req_AND = mysql_query("select * from batiment where lieu='$lieu' and superficie='$superf' and prix='$prix'");
$nombre_de_resultat = mysql_num_rows($req_AND);
if($nombre_de_resultat == 0){
echo "<p align=center><font color=red size=+2>AUCUN RESULTAT NE CORRESPOND A VOTRE RECHERCHE!</font></p>";
}
else{
while($dnn_AND = mysql_fetch_array($req_AND)){
?>
<tr>
<td bgcolor="#CCCCCC"><?php echo($dnn_AND['id']); ?></td>
<td><?php echo htmlentities($dnn_AND['lieu'], ENT_QUOTES, 'UTF-8'); ?></td>
<td width="152"><?php echo htmlentities($dnn_AND['superficie'], ENT_QUOTES, 'UTF-8'); ?></td>
<td width="132"><?php echo htmlentities($dnn_AND['prix'], ENT_QUOTES, 'UTF-8'); ?></td>
<td bgcolor="#CCCCCC" width="152"><?php echo($dnn_AND['description']); ?></td>


</tr>
<?php
}
}
?>
<tr>
</table>
<BR/><BR/>
<HR/>
<p><font color="#006600" size="+2">Résultats qui pourraient vous interrésser...</font></p>
</table>
<table width="596" border="1" align="center">
<tr>
<td width="70" align="center" bgcolor="#FFFFFF">ID</td>
<td width="169" align="center" bgcolor="#FFFFFF">LIEU</td>
<td align="center" bgcolor="#FFFFFF">SUPERFICIE</td>
<td align="center" bgcolor="#FFFFFF">PRIX</td>
<td align="center" bgcolor="#FFFFFF">DESCRIPTION</td>

</tr>
<?php
$req = mysql_query("select * from batiment where lieu='$lieu' or superficie='$superf' or prix='$prix'");
while($dnn = mysql_fetch_array($req)){
?>
<tr>
<td bgcolor="#FFFFFF"><?php echo($dnn['id']); ?></td>
<td><?php echo htmlentities($dnn['lieu'], ENT_QUOTES, 'UTF-8'); ?></td>
<td width="152"><?php echo htmlentities($dnn['superficie'], ENT_QUOTES, 'UTF-8'); ?></td>
<td width="132"><?php echo htmlentities($dnn['prix'], ENT_QUOTES, 'UTF-8'); ?></td>
<td bgcolor="#CCCCCC" width="152"><?php echo($dnn['description']); ?></td>
</tr>
<?php
}
?>

mon souci est que meme lorsque un resultat est trouvé avec la première requete AND, le meme resultat aparait avec la deuxième requete OR; c'est ce que je veux eviter.

aidez moi s'il vous plait. merci d'avance
A voir également:

6 réponses

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
Modifié par Pitet le 26/05/2014 à 14:26
Salut,

Tu pourrais le faire comme ceci :
$req = mysql_query("select * from batiment where (lieu='$lieu' or superficie='$superf' or prix='$prix') AND id NOT IN (select id from batiment where lieu='$lieu' and superficie='$superf' and prix='$prix')"); 


L'inconvénient des requêtes imbriquées est qu'elles ne sont plus lentes à exécuté que des jointures.

Au passage :
- l'api Mysql de php est obsolète, il faudrait passer à PDO ou Mysqli
- attention aux injections sql

Bonne journée
0
speedy fernandez Messages postés 11 Date d'inscription lundi 27 janvier 2014 Statut Membre Dernière intervention 17 octobre 2014
26 mai 2014 à 15:44
pitet
lorsque j'ai modifier avec la partie que voous avez proposez, se plante car l'exécution est aparament longue.

merci
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
Modifié par Pitet le 26/05/2014 à 17:19
Puisqu'on exécute déjà la première requête au début du traitement, on peux récupérer le résultat dans un tableau plutôt que d'utiliser une requête imbriquée :

<?php
$ids_req_AND = array(); // on crée un tableau où on va enregistrer les id de la req_AND

$req_AND = mysql_query("select * from batiment where lieu='$lieu' and superficie='$superf' and prix='$prix'");
$nombre_de_resultat = mysql_num_rows($req_AND);
if($nombre_de_resultat == 0){
 echo "<p align=center><font color=red size=+2>AUCUN RESULTAT NE CORRESPOND A VOTRE RECHERCHE!</font></p>";
}
else{
 while($dnn_AND = mysql_fetch_array($req_AND)){
  $ids_req_AND[] = $dnn_AND['id']; // on enregistre les id
 ?>
 <tr>
 <td bgcolor="#CCCCCC"><?php echo($dnn_AND['id']); ?></td>
 <td><?php echo htmlentities($dnn_AND['lieu'], ENT_QUOTES, 'UTF-8'); ?></td>
 <td width="152"><?php echo htmlentities($dnn_AND['superficie'], ENT_QUOTES, 'UTF-8'); ?></td>
 <td width="132"><?php echo htmlentities($dnn_AND['prix'], ENT_QUOTES, 'UTF-8'); ?></td>
 <td bgcolor="#CCCCCC" width="152"><?php echo($dnn_AND['description']); ?></td>


 </tr>
 <?php
 }
}
?>
<tr>
</table>
<BR/><BR/>
<HR/>
<p><font color="#006600" size="+2">Résultats qui pourraient vous interrésser...</font></p>
</table>
<table width="596" border="1" align="center">
<tr>
<td width="70" align="center" bgcolor="#FFFFFF">ID</td>
<td width="169" align="center" bgcolor="#FFFFFF">LIEU</td>
<td align="center" bgcolor="#FFFFFF">SUPERFICIE</td>
<td align="center" bgcolor="#FFFFFF">PRIX</td>
<td align="center" bgcolor="#FFFFFF">DESCRIPTION</td>

</tr>
<?php
// on récupère le résultat de la req_OR sans les résultats 
$req = mysql_query("select * from batiment where (lieu='$lieu' or superficie='$superf' or prix='$prix') AND id NOT IN (" . implode(',', $ids_req_AND) . ")");
while($dnn = mysql_fetch_array($req)){
?>
<tr>
<td bgcolor="#FFFFFF"><?php echo($dnn['id']); ?></td>
<td><?php echo htmlentities($dnn['lieu'], ENT_QUOTES, 'UTF-8'); ?></td>
<td width="152"><?php echo htmlentities($dnn['superficie'], ENT_QUOTES, 'UTF-8'); ?></td>
<td width="132"><?php echo htmlentities($dnn['prix'], ENT_QUOTES, 'UTF-8'); ?></td>
<td bgcolor="#CCCCCC" width="152"><?php echo($dnn['description']); ?></td>
</tr>
<?php
}
?> 


Ajout à ton premier code :
- ligne 2 : création d'un tableau $ids_req_AND
- ligne 11 : enregistrement des id dans ce tableau
- ligne 43 : modification de la requête OR
0
speedy fernandez Messages postés 11 Date d'inscription lundi 27 janvier 2014 Statut Membre Dernière intervention 17 octobre 2014
30 mai 2014 à 11:06
merci pitet....
mais j'ai un petit souci.
quand je complete avec les modification apporté l'erreur qui affiche me parle de bouléan.
qu'est ce que je peut faire?

merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Nhay Messages postés 838 Date d'inscription vendredi 2 novembre 2012 Statut Membre Dernière intervention 17 décembre 2015 126
30 mai 2014 à 18:11
C'est que ta requête n'est pas bonne, mysql_query renvoi alors False (Un booléen) qui n'est pas valide pour un fetch_array.

Fais un petit echo mysql_error(); après ton mysql_query, ta base de donnée t'indiquera alors une erreur précise pour ta requête.
0
speedy fernandez Messages postés 11 Date d'inscription lundi 27 janvier 2014 Statut Membre Dernière intervention 17 octobre 2014
3 juin 2014 à 18:51
je veut afficher mon resultat avec mysql_fetch_array, avec cela je pourai ragler mon problème en faisant la difference entre les deux tableaux avec array_diff

est ce possible?
0