Code recherche

mirene22 Messages postés 7 Statut Membre -  
jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
voilà mon problème est simple je n'arrive pas à afficher un message d'erreur lorsque je ne trouve pas le produit recherché dans la BDD !
exemple : " le produit que vous recherchez est introuvable ! "

<!DOCTYPE html>
<html>
<head>
<title>Rechercher un produit</title>
<meta charset="utf-8"/>
</head>
<body background="images/20.jpg" >
<font size="5"><font color="black">
<DIV Align="center" >
<h1><font size="20"><font color="yellow"> RECHERCHE PRODUIT </font></font></h1>
<fieldset style="width: 600px;">
<form   method="post" action="rechercher.php">
Nom du produit: <input type="text" name="nom"><br/>

<div style="text-align:center;">
<input type="submit" value="rechercher"/> 
<input type="reset" name="Annuler" value="annuler"/> 
</form>

 
   <?php 
// On commence par récupérer le champ 

 
 if(isset($_POST['nom']))      $nom=$_POST['nom'];
else      $nom="";
// On vérifie si le champ est vide
?>
<font size="4"><b>
<center>
<?php
if((empty($nom))||($_POST['nom']!=$nom))
    { 
    echo '<font color="red"> Désolé, votre recherche ne contient aucun résultat. </font>'; 
    } 

// Aucun champ n'est vide, on peut enregistrer dans la table 
else      
{

mysql_connect("localhost","root",""); // Connexion à MySQL
mysql_select_db("superette"); // Sélection de la base

  //requête SQL:
  $sql = "SELECT * FROM produit WHERE nom ='$nom'" ;
 //exécution de la requête:
  $requete = mysql_query($sql);
 if ($requete){ 
  //affichage des données:
 while( $result = mysql_fetch_array($requete) )
  {
  ?>
  <font size="6">
<div align="center"><?php echo'le nom : ',($_POST['nom']);?> </br>
<?php echo 'Designation : '.$result['designation'];?></br>
<?php echo 'Categorie : '.$result['categorie'];?></br>
<?php echo'Prix :'.$result['prix'];?></br>
<?php echo "<img src='images/".$result['photo']."' border=0 height=200 width=200 />";?>
  </div>
</font>
    <?php
  }//fin
  }
?>
 <?php

 mysql_close();}
  ?>
</font>
</body>
</html>



EDIT : Ajout des balises de code.
Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

4 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Bonjour,

    Regardes ceci :
    https://www.php.net/manual/fr/function.mysql-num-rows.php

    PS: Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
    Explications disponibles ici :
    https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      Je t'invite aussi à lire ceci .. au cas où
      https://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top
      0
  2. mirene22 Messages postés 7 Statut Membre
     
    salut, jordane45
    le lien que vous avez posté est assez intéressant, j'ai essayé de l'exploiter dans mon code, le problème maintenant c'est que le message "ce produit est introuvable" s'affiche par défaut, même si le produit existe dans la Bdd !!

    voici mon code après la modification :

    <!DOCTYPE html>
    <html>
    <head>
    <title>Rechercher un produit</title>
    <meta charset="utf-8"/>
    </head>
    <body background="images/20.jpg" >
    <font size="5"><font color="black">
    <DIV Align="center" >
    <h1><font size="20"><font color="yellow"> RECHERCHE PRODUIT </font></font></h1>
    <fieldset style="width: 600px;">
    <form   method="post" action="rechercher.php">
    Nom du produit: <input type="text" name="nom"><br/>
    
    <div style="text-align:center;">
    <input type="submit" value="rechercher"/> 
    <input type="reset" name="Annuler" value="annuler"/> 
    </form>
    
     
       <?php 
    // On commence par récupérer le champ 
    
     
     if(isset($_POST['nom']))      $nom=$_POST['nom'];
    else      $nom="";
    // On vérifie si le champ est vide
    ?>
    <font size="4"><b>
    <center>
    
    <?php
    
    
    mysql_connect("localhost","root",""); // Connexion à MySQL
    mysql_select_db("superette"); // Sélection de la base
    
    
    $result = mysql_query("SELECT * FROM produit  WHERE nom ='$nom'");
    $num_rows = mysql_num_rows($result);
    
    Ce produit est introuvable';
    
     mysql_close();
      ?>
    </font>
    </body>
    </html>
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       

      le problème maintenant c'est que le message "ce produit est introuvable" s'affiche par défaut,

      normal...
      regarde ligne 42 de ton code....
      Il manque .. un IF .. et aussi un ECHO .. et bien sûr.. des quotes ....


      <font size="4"><b>
      <center>
      <?php 
      // La connexion à la BDD serait mieux dans un autre fichier
      // dont tu ferais juste un INCLUDE.
      mysql_connect("localhost","root",""); // Connexion à MySQL
      mysql_select_db("superette"); // Sélection de la base
      
      // On commence par récupérer le champ si existe et non vide
       $nom=isset($_POST['nom'])  && !empty(($_POST['nom']) ?$_POST['nom']:NULL;
      
      if($nom){
        $result = mysql_query("SELECT * FROM produit  WHERE nom ='$nom'");
        $num_rows = mysql_num_rows($result);
        if($num_rows<=0){
           echo '<br>Ce produit est introuvable';
         }
      }else{
       echo "<br>La variable nom n'existe pas !";
      }
      


      PS: Où est passé la PDO ou le MYSQLI_ ?
      Tu es toujours avec l'ancienne extension mysql_ ... c'est dommage...
      0
  3. mirene22 Messages postés 7 Statut Membre
     
    je n'arrive pas à comprendre la partie ( ?$_POST['nom']:NULL; ) de la ligne suivante :

    // On commence par récupérer le champ si existe et non vide
     $nom=isset($_POST['nom'])  && !empty(($_POST['nom']) ?$_POST['nom']:NULL;


    à quoi serve-t-elle ?

    effectivement je travaille avec l'ancienne extension Mysql et je ne trouve pas assez de solutions à mes problèmes sur le net je crois que je dois commencer à utiliser le PDO
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      C'est ce qu'on appelle l'écriture TERNAIRE...
      En gros.. c'est un IF.
      et le ISSET sert à s'assurer que la variable existe.
      Autrement dit.. cette ligne de code peut se traduire ainsi .
      Si la variable $_POST['nom'] existe et si elle n'est pas vide.. alors la variable $nom prend comme valeur $_POST['nom'] .. sinon.. elle prend la valeur NULL.
      0
  4. mirene22
     
    bonjour, merci pour votre réponse je me noie dans un verre d'eau comme on dit ! c'est censé être assez simple de faire une recherche je sais pas quel est mon problème ! maintenant lorsque je tape un faux produit on ne m'affiche rien (pas de message d'erreur)

    voilà mon dernier essai :

    			<?php 
    // On commence par récupérer le champ 
    
    	
    	if(isset($_POST['nom']))      $nom=$_POST['nom'];
    else      $nom="";
      //requête SQL:
      
    mysql_connect("localhost","root",""); // Connexion à MySQL
    mysql_select_db("superette"); // Sélection de la base
    
      $sql = "SELECT * FROM produit WHERE nom ='$nom'" ;
     //exécution de la requête:
      $requete = mysql_query($sql);
      //affichage des données:
     while( $result = mysql_fetch_array($requete) )
      {
      ?>
      <font size="6">
    <div align="center">
    <?php echo'le nom : ',($_POST['nom']);?> </br>
    <?php echo 'Designation : '.$result['designation'];?></br>
    <?php echo 'Categorie : '.$result['categorie'];?></br>
    <?php echo'Prix :'.$result['prix'];?></br>
    <?php echo "<img src='images/".$result['photo']."' border=0 height=200 width=200 />";?>
      </div>
    </font>
      	 <?php
      }
      
     mysql_close();
      ?>
    
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      tu as inversé :
        $num_rows = mysql_num_rows($sql);
       //exécution de la requête:
        $requete = mysql_query($sql);
      


      ... comment connaitre le nombre de lignes .. si tu n'as pas executé la requête ??

      NB : Prends l'habitude d'utiliser l'écriture TERNAIRE pour la récupération de tes variables..
       $nom=isset($_POST['nom'])  && !empty(($_POST['nom']) ?$_POST['nom']:'';
      
      0