Code recherche

Fermé
mirene22 Messages postés 7 Date d'inscription vendredi 27 février 2015 Statut Membre Dernière intervention 12 mai 2015 - Modifié par jordane45 le 26/03/2015 à 20:04
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 - 31 mars 2015 à 15:27
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


A voir également:

4 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
26 mars 2015 à 20:04
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
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
26 mars 2015 à 20:05
Je t'invite aussi à lire ceci .. au cas où
https://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top
0
mirene22 Messages postés 7 Date d'inscription vendredi 27 février 2015 Statut Membre Dernière intervention 12 mai 2015
Modifié par jordane45 le 27/03/2015 à 18:39
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
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
27 mars 2015 à 18:45

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
mirene22 Messages postés 7 Date d'inscription vendredi 27 février 2015 Statut Membre Dernière intervention 12 mai 2015
27 mars 2015 à 19:19
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
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
29 mars 2015 à 20:44
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
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
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
31 mars 2015 à 15:27
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