Signaler

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

Posez votre question ismael-ouatt 39Messages postés mercredi 18 novembre 2015Date d'inscription 3 décembre 2016 Dernière intervention - Dernière réponse le 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 !
Afficher la suite 
Utile
+0
moins plus
http://stackoverflow.com/questions/9041778/redirecting-user-if-record-isnt-in-database
Ajouter un commentaire
Utile
+0
moins plus
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
ismael-ouatt 39Messages postés mercredi 18 novembre 2015Date d'inscription 3 décembre 2016 Dernière intervention - 28 nov. 2016 à 13:42
après la redirection sur ma page cible
Répondre
jordane45 15400Messages postés mercredi 22 octobre 2003Date d'inscription ModérateurStatut 3 décembre 2016 Dernière intervention - 28 nov. 2016 à 13:45
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.
Répondre
ismael-ouatt 39Messages postés mercredi 18 novembre 2015Date d'inscription 3 décembre 2016 Dernière intervention - 28 nov. 2016 à 13:57
je ne comprend pas bien... "assigner la valeur avant la redirection (c'est à dire après le submit)"
Répondre
jordane45 15400Messages postés mercredi 22 octobre 2003Date d'inscription ModérateurStatut 3 décembre 2016 Dernière intervention - 28 nov. 2016 à 14:02
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
Répondre
nagaD.scar 4024Messages postés samedi 8 septembre 2007Date d'inscription 2 décembre 2016 Dernière intervention - 28 nov. 2016 à 14:56
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
Répondre
Ajouter un commentaire

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !