Pas de résultat lorsqu'il n'existe pas en bdd

Résolu/Fermé
ismael-ouatt Messages postés 78 Date d'inscription mercredi 18 novembre 2015 Statut Membre Dernière intervention 26 juillet 2018 - 23 nov. 2016 à 16:33
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 - 28 nov. 2016 à 14:56
Bonjour,
Je travaille sur un projet pour mon entreprise. je dois faire une application web gérant un de nos département.

Sur cette image ci-dessus vous constaterez qu'il ya a 3 champde recherche, pour le moment je travail avec le premier champ "N° GIT". en entrant une donnée dans le champ N° GIT, il doit faire une recherche en base de donnée pour savoir sil existe ou pas. s'il existe, alor je serai redirigé vers une page x, dans le cas contraire, je serai redirigé vers une page y. voici mon code :

<?php
try
{
$bdd=new PDO('mysql:host=localhost;dbname=my_db','login','password');
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}

////////////D'abord nous vérifierons si une valeur a été rentrée//////////////////////////////////////
if(isset($_POST['rechEquipement']))
{
$numGIT=htmlspecialchars($_POST['numGIT']);
$numEnt=htmlspecialchars($_POST['numEnt']);
$numSerie=htmlspecialchars($_POST['numSerie']);
if(!empty($_POST['numGIT']) OR !empty($_POST['numEnt']) OR !empty($_POST['numSerie']))//vérification si l'un des champ a été renseigné
{
switch(isset($_POST['rechEquipement']))
{
case $numGIT:
//echo 'numero git selectionné';
$rech=$bdd->prepare('SELECT * FROM equipement WHERE code_git LIKE ?');//Chercher les enregistrements dans la table equipement dont le code GIT est comme la valeur entrée dans le champ numGIT
$rech->execute(array($_POST['numGIT']));//excécute la requete
$count=$rech->rowCount();
while($result=$rech->fetch())
{
//echo $result['nom_equipement'];
/*switch($count)
{
case 0:
header ('Location:operation.php');
break;
case 1:
header ('Location:etalonnagey.php');
break;
default;
header ('Location:operation.php');
}*/

if($count>=1)
{
/*echo $count.' résultats trouvé';
echo 'Cette valeur existe en base de données';
echo $result['nom_equipement'];*/
header ('Location:etalonnagey.php');
}
else//Si cette valeur n'existe pas en base de données
{
/*echo $count.' résultat trouvé';
echo 'Cette valeur n\'existe pas en base de données';*/
header ('Location:operation.php');
}

}
break;
case $numEnt:
//echo 'numero entreprise selectionné';
$rech=$bdd->prepare('SELECT * FROM equipement WHERE id_entreprise LIKE ?');
$rech->execute(array($_POST['numEnt']));
while($result=$rech->fetch())
{
echo $result['nom_equipement'];
/*if(isset($result['nom_equipement']))//SI cette valeur existe en base de données
{
//echo 'Cette valeur existe en base de données';
header ('Location:etalonnagey.php');
}
else//Si cette valeur n'existe pas en base de données
{
echo 'Cette valeur n\'existe pas en base de données';
//header ('Location:etalonnagen.php');
}*/
}
break;
case $numSerie:
echo 'numero de serie selectionné';
break;
default:

}
}
else
{
$erreurverif='<font color="red">Veillez renseigner un champ SVP !</font>';
}
}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta
http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Etalonnage</title>
<meta charset="utf-8">

</head>

<body>

<h3>Etalonnage<hr></h3>
<div id="etalonnage">
<form method="POST" action="">
<fieldset>
<table>
<tr>
<tr>
<caption><i>Recherche de l'équipement en base de données à partir du numéro GIT, de l'identification interne ou du numéro de série. S'il n'existe pas, cela signi qu'il n'a jamais été étalonné ou vérifié par GIT. Dans ce cas remplissez directement le formulaire.</i></caption>
</tr>
</tr>
</tr>
<td><input type="text" id="numGIT" name="numGIT" placeholder="N° GIT" /></td><td>    </td>
<td><input type="text" id="numEnt" name="numEnt" placeholder="N° Entreprise" /></td><td>    </td>
<td><input type="text" id="numSerie" name="numSerie" placeholder="N° de série" /></td><td>    </td>
<td><input type="submit" value="Vérifier" id="rechEquipement" name="rechEquipement"/><td>
</tr>

</table>
</fieldset>
<?php
if (isset($erreurverif))
{
echo $erreurverif;
}
?>
</form>


<a href="operation.php" rel="nofollow noopener noreferrer" target="_blank">Cet équipement ne possède pas de code GIT</a>
</form>
</div>

</body>
</html>

Ce que je constate, c'est que mon code marche quand la valeur entrée se trouve en bdd. dans le cas contraire, j'ai aucune réaction, pas de redirection, même quand je fais un echo, il n'y a pas de réponse, aucune réaction, j'ai cherché depuis plusieurs heurs à remédier à ce problème mais j'ai pas pu. Quelqu'un peut-il m'aider svp!
Merci !


2 réponses

xpress22 Messages postés 52 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 26 novembre 2016 37
23 nov. 2016 à 16:38
0
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 251
Modifié par nagaD.scar le 23/11/2016 à 15:35
Salut,

   $count=$rech->rowCount();
   while($result=$rech->fetch())
   {
    //echo $result['nom_equipement'];
    /*switch($count)
    {
     case 0:
     header ('Location:operation.php');
     break;
     case 1:
     header ('Location:etalonnagey.php');
     break;
     default;
     header ('Location:operation.php');
    }*/
    
    if($count>=1)
    {
     /*echo $count.' résultats trouvé';
     echo 'Cette valeur existe en base de données';
     echo $result['nom_equipement'];*/
     header ('Location:etalonnagey.php');
    }
    else//Si cette valeur n'existe pas en base de données
    {
     /*echo $count.' résultat trouvé';
     echo 'Cette valeur n\'existe pas en base de données';*/
     header ('Location:operation.php');
    }

   }



J ai juste regardé vite fait, mais cette partie n est pas bonne: si le fetch marche, c'est que tu as un résultat.

Donc il faut sortir le vérification du count:

$count=$rech->rowCount();
if($count>=1)
{
  while($result=$rech->fetch())
  {
    header ('Location:etalonnagey.php');
  }
}
else//Si cette valeur n'existe pas en base de données
{
 header ('Location:operation.php');
}



naga
0
ismael-ouatt Messages postés 78 Date d'inscription mercredi 18 novembre 2015 Statut Membre Dernière intervention 26 juillet 2018 1
23 nov. 2016 à 16:49
ok merci ça marche
ouff
0
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 251
23 nov. 2016 à 16:50
pas de soucis bon dev.

naga
0
ismael-ouatt Messages postés 78 Date d'inscription mercredi 18 novembre 2015 Statut Membre Dernière intervention 26 juillet 2018 1
23 nov. 2016 à 16:54
merci
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
Modifié par jordane45 le 23/11/2016 à 19:59
Bonjour,

Par contre... NE PAS UTILISER ROWCOUNT
Le résultat n'est pas garanti pour des requêtes de type SELECT

Dans le manuel PHP il est indiqué :

Si la dernière requête SQL exécutée par l'objet PDOStatement associé est une requête de type SELECT, quelques bases de données retourneront le nombre de lignes retournées par cette requête. Néanmoins, ce comportement n'est pas garanti pour toutes les bases de données et ne devrait pas être exécuté pour des applications portables.


A la place... tu peux faire un fetchAll et faire un count (php) dessus
//recuperation propre des variables AVANT de les utiliser
$GIT = !empty($_POST['numGIT']) ? $_POST['numGIT'] : NULL;


//Preparation de la requete
$sql = "SELECT * FROM equipement WHERE code_git LIKE ?";
$datas = array($git);

//exécution de la requete :
$rech=$bdd->prepare($sql);
$rech->execute($datas);

//On stocke le resultat dans un array
$resultat = $rech->fetchAll();


//on regarde combien de résultats sont retournés par la requete
$count = !empty($resultat ) ? count($resultat ) : 0;

//on teste si il y a eu des resultats
if($count >0 ){
 //la valeur existe
  header ('Location:etalonnagey.php');
  exit();
}else{
  //pas de resultat
  header ('Location:operation.php');
  exit() ; //toujours mettre un exit apres une redirection
}
0
ismael-ouatt Messages postés 78 Date d'inscription mercredi 18 novembre 2015 Statut Membre Dernière intervention 26 juillet 2018 1
24 nov. 2016 à 00:31
Ok grand merci à vous jordane45 pour cet additif !
0