Pas de résultat lorsqu'il n'existe pas en bdd [Résolu/Fermé]

Signaler
Messages postés
78
Date d'inscription
mercredi 18 novembre 2015
Statut
Membre
Dernière intervention
26 juillet 2018
-
Messages postés
4270
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
4 mars 2021
-
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

Messages postés
52
Date d'inscription
mardi 27 novembre 2007
Statut
Membre
Dernière intervention
26 novembre 2016
31
Messages postés
4270
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
4 mars 2021
206
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
Messages postés
78
Date d'inscription
mercredi 18 novembre 2015
Statut
Membre
Dernière intervention
26 juillet 2018
1
après la redirection sur ma page cible
Messages postés
32147
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 avril 2021
3 415 >
Messages postés
78
Date d'inscription
mercredi 18 novembre 2015
Statut
Membre
Dernière intervention
26 juillet 2018

Donc normal que ça ne marche pas ...
Tu dois assigner la valeur lorsqu'elle existe (c'est à dire après le SUBMIT ).
Lorsque tu fais une redirection.... les variables POST sont remises à zéro...
Tu dois donc assigner la valeur AVANT de faire la redirection.
Messages postés
78
Date d'inscription
mercredi 18 novembre 2015
Statut
Membre
Dernière intervention
26 juillet 2018
1
je ne comprend pas bien... "assigner la valeur avant la redirection (c'est à dire après le submit)"
Messages postés
32147
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 avril 2021
3 415 >
Messages postés
78
Date d'inscription
mercredi 18 novembre 2015
Statut
Membre
Dernière intervention
26 juillet 2018

Bon.. de toutes façons.. il s'agit là d'une nouvelle question...
Merci donc d'ouvrir une nouvelle discussion pour ce problème.
Pense à y indiquer le code que tu utilises
Messages postés
4270
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
4 mars 2021
206
haha t'es pas de bonne humeur ^^

En gros ce que tu fais, si on compare avec un envoi de colis par exemple, c'est récupérer le coli dans le centre de tri (ton POST) puis envoyé quelqu'un livre le colis (redirection) sans lui avoir au préalable donné le colis ... le gas se retrouve main vide devant le client (la page redirigée).

Donc l'étape qu il te manque c'est déplacer le colis du centre au camion AVANT que le camion parte (tu change donc de conteneur) => c'est le même principe, avant de rediriger, tu vas entrer les valeur contenu dans $_POST qui a une durée de vie limitée à la page destinataire dans le $_SESSION qui elle a une durée de vie identique à ta session.


Plus simple:
$_SESSION['numGIT']=$_POST['numGIT'];


se fera avant
header ('Location:etalonnagey.php');


naga