[PHP] Erreur dans lignes de code

Fermé
chamallowette - 25 mars 2010 à 09:52
Giorgiolino Messages postés 253 Date d'inscription vendredi 15 mai 2009 Statut Contributeur Dernière intervention 2 mars 2015 - 26 mars 2010 à 17:34
Bonjour!

Je sollicite votre aide afin de corriger mon code, qui doit contenir des erreurs...
Le problème, c'est qu'à la place des messages d'erreur, j'ai une page blanche, donc impossible de savoir où elles se situent... (Les erreurs de syntaxe s'affichent, alors je pense que mon ou mes erreurs se situent dans ma requête).


<?php
try
{
	$bdd = new PDO('mysql:host=localhost;dbname=systemes_devidage', 'root', '');
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}

$reponse="";

if (isset($_POST['conditionnement']))
{

if ($_POST['conditionnement'] != "Non défini" OR $_POST['application'] != "Non défini" 
OR $_POST['type'] != "Non défini" OR $_POST['vitesse'] != "Non défini" OR $_POST['sens'] != "Non défini" 
OR $_POST['pac'] != "Non défini" OR $_POST['sag'] != "Non défini")
{


$reponse = $bdd->query('SELECT systeme.nom
 FROM systeme, convient, application, necessite, conditionnement
 WHERE systeme.id = necessite.id_systeme
 AND necessite.id_conditionnement = conditionnement.id
 AND conditionnement.id = convient.id_conditionnement
 AND application.id = convient.id_application
 AND conditionnement.nom="' . $_POST['conditionnement'] . '"
 AND application.nom="' . $_POST['application'] . '"
 AND type="' . $_POST['type'] . '"
 AND vitesse="' . $_POST['vitesse'] . '"
 AND sens="' . $_POST['sens'] . '"
 AND pac="' . $_POST['pac'] . '"
 AND sag="' . $_POST['sag'] . '"
')or die(print_r($bdd->errorInfo()));

while ($donnees = $reponse->fetch())
{
echo $reponse['nom'] . '<br/>';
}

$reponse->closeCursor();
}
}
else
{
echo "Veuillez sélectionner au moins un critère.";
}
?>



Pour information, lorsque je teste mon code seul, la page m'affiche "Veuillez sélectionner au moins un critère.", ce qui semble logique puisque je ne touche pas au formulaire.
Par contre, lorsque je teste le code depuis mon formulaire (en cliquant sur envoyer), j'arrive sur une page blanche.

Des idées? (J'ai vraiment besoin de votre aide, je dois présenter ça ce soir...)
Merci d'avance à tous ceux qui voudront bien m'aider!!
A voir également:

6 réponses

Maxou88100 Messages postés 197 Date d'inscription jeudi 3 décembre 2009 Statut Membre Dernière intervention 17 juin 2010 11
Modifié par Maxou88100 le 25/03/2010 à 10:05
Ok je vais tenter de t'aider :p
Commence par placer des echo un peu partout pour voir si tu passe dans tes if ! Comme ça tu verra ou se situe ton erreur !

Valide ton formulaire et fait un echo"Allo" dès le début comme ça tu verra si tu entre bien ds ta page. Ensuite, déplace ton echo dans chaque boucle pour voir ou tu passe. Tiens moi au courant
0
xav3601 Messages postés 3288 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 2 mars 2016 311
25 mars 2010 à 10:02
C'est la merde le php, pas moyen de debug :S
C'est pour ca (entre autre) que je préfère les JSP!

Mais bon comme dis au dessus, commences par mettre des echo partout, et à la limite test en enlevant la requête et en la remplacant par un texte basique pour voir si ca marche!
0
Giorgiolino Messages postés 253 Date d'inscription vendredi 15 mai 2009 Statut Contributeur Dernière intervention 2 mars 2015 52
26 mars 2010 à 17:11
[...] le php, pas moyen de debug :S

Pas très objectif comme commentaire. Connais-tu Firebug/Firephp, ...?
0
Merci de bien vouloir m'aider! :-)

Hm, alors j'ai testé ça, déjà :

<?php  
try  
{  
 $bdd = new PDO('mysql:host=localhost;dbname=systemes_devidage', 'root', '');  
}  
catch(Exception $e)  
{  
        die('Erreur : '.$e->getMessage());  
}  

if (isset($_POST['conditionnement']))  
{  

if ($_POST['conditionnement'] != "Non défini" OR $_POST['application'] != "Non défini"   
OR $_POST['type'] != "Non défini" OR $_POST['vitesse'] != "Non défini" OR $_POST['sens'] != "Non défini"   
OR $_POST['pac'] != "Non défini" OR $_POST['sag'] != "Non défini")  
{  
echo "test";  
}  
}  
else  
{  
echo "Veuillez sélectionner au moins un critère.";  
}  

?>  


Quand je teste directement, j'ai une page blanche et quand je teste depuis le formulaire, j'obtiens "test", que je laisse les champs "Non défini" ou pas.
Ce qui n'est pas normal, j'aurais du obtenir "Veuillez sélectionner au moin un critère" en laissant tous les champs "Non défini"...

Et si je change en faisant :

<?php
try
{
	$bdd = new PDO('mysql:host=localhost;dbname=systemes_devidage', 'root', '');
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}

if (isset($_POST['conditionnement']))
{

if ($_POST['conditionnement'] = "Non défini" AND $_POST['application'] = "Non défini" 
AND $_POST['type'] = "Non défini" AND $_POST['vitesse'] = "Non défini" AND $_POST['sens'] = "Non défini" 
AND $_POST['pac'] = "Non défini" AND $_POST['sag'] = "Non défini")
{
echo "Veuillez sélectionner au moins un critère.";
}
}

else
{
echo "test";
}
?>

A ce moment là, dans tous les cas j'ai "veuillez sélectionner un critère""
C'est comme s'il ne tenait pas compte des conditions...
0
Maxou88100 Messages postés 197 Date d'inscription jeudi 3 décembre 2009 Statut Membre Dernière intervention 17 juin 2010 11
25 mars 2010 à 10:57
Si je ne me trompe pas, tu affiche test si au moins un champ est différent de non défini. Alors que ton else laisse entendre que l'utilisateur n'a rien sélectionné ! Donc ne faudrait il pas remplacer tes OR par des && ? A moins que je soit à coté de la plaque
0
chamallowette
25 mars 2010 à 11:47
Non, c'est ce que je veux : un seul champ rensseigné suffit pour afficher le résultat de la recherche.
Mais là, en l'occurence, ça ne marche même pas : que mes champs soient tous "non défini" ou qu'il y en ait au moins 1 renseigné me renvoie la même chose...

Mais je ne vois pas où est-ce que ça ne va pas dans mon code.
0
Maxou88100 Messages postés 197 Date d'inscription jeudi 3 décembre 2009 Statut Membre Dernière intervention 17 juin 2010 11
25 mars 2010 à 12:34
Autant pour moi je regardait le code tout en haut :(

if ($_POST['conditionnement'] != "Non défini" OR $_POST['application'] != "Non défini"
OR $_POST['type'] != "Non défini" OR $_POST['vitesse'] != "Non défini" OR $_POST['sens'] != "Non défini"
OR $_POST['pac'] != "Non défini" OR $_POST['sag'] != "Non défini")
...
0
chamallowette
25 mars 2010 à 12:50
:-)

Pas de piste pour mon problème ? Personne ? :-s
0
Maxou88100 Messages postés 197 Date d'inscription jeudi 3 décembre 2009 Statut Membre Dernière intervention 17 juin 2010 11
25 mars 2010 à 16:27
Arf honnêtement j'ai bien regardé et je vois pas d'erreur à partir de ce petit bout de code... L'erreur viens peut être du formulaire ou d'une requête fausse :( C'est pas facile à estimer sans avoir le code devant les yeux :( Vraiment désolé
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
chamallowette
25 mars 2010 à 18:19
Bon, je lance un dernier appel, parce que ça m'embête vraiment d'avoir bossé sur ce projet pendant des semaines pour au fil devoir laisser tomber...pour une erreur dans un code! ><

Voici le code de mon formulaire :

<form method="post" action="cible5.php">
   <p>
       <label for="conditionnement">Type de conditionnement ?</label><br />
       <select name="conditionnement" id="conditionnement">
               <option value="non">Non défini</option>
           <optgroup label="Bobines plastique">
               <option value="25 LBS">25 LBS</option>
               <option value="10 LBS">10 LBS</option>
               <option value="AM 20">AM 20</option>
               <option value="B3">B3</option>
               <option value="B6">B6</option>
               <option value="BB 20">BB 20</option>
               <option value="BB 35">BB 35</option>
               <option value="BB 40">BB 40</option>
               <option value="BP 3">BP 3</option>
               <option value="BP 4">BP 4</option>
               <option value="BP 50">BP 50</option>
               <option value="BS 15">BS 15</option>
               <option value="BS 60">BS 60</option>
               <option value="E 200">E 200</option>
               <option value="EG 30">EG 30</option>
               <option value="FT 60">FT 60</option>
               <option value="GB 2">GB 2</option>
               <option value="J 55">J 55</option>
               <option value="K 355">K 355</option>
           </optgroup>
           <optgroup label="Bobines bois">
               <option value="B 150">B 150</option>
               <option value="B 300">B 300</option>
               <option value="MP 100">MP 100</option>
               <option value="MP 100K">MP 100K</option>
               <option value="MP 50">MP 50</option>
               <option value="MP 110C">MP 110C</option>
               <option value="MP 120K">MP 120K</option>
               <option value="MP 90K">MP 90</option>
           </optgroup>
           <optgroup label="Futs carton">
               <option value="C 780">C780</option>
               <option value="P 500">P500</option>
               <option value="PPH 760">PPH760</option>
               <option value="P 1537">P1537</option>
               <option value="P 604">P604</option>
               <option value="P 608">P608</option>
           </optgroup>
           <optgroup label="Tourets bois">
               <option value="R 260C">R 260</option>
               <option value="R 400">R 400</option>
               <option value="R 500">R 500</option>
               <option value="R 700">R 700</option>
               <option value="SIG">SIG</option>
           </optgroup>
           <optgroup label="Tourets bois (bande collée)">
               <option value="T09">T09</option>
               <option value="T13">T13</option>
               <option value="T15">T15</option>
               <option value="T17">T17</option>
               <option value="TD09">TD09</option>
               <option value="TD08">TD08</option>
               <option value="Z400">Z400</option>
               <option value="Z6495">Z6495</option>
           </optgroup>
       </select>
   </p>
   <p>
       <label for="application">Type d'application ?</label><br />
       <select name="application" id="application">
               <option value="non">Non défini</option>
           <optgroup label="Applications">
               <option value="brochage">Brochage</option>
               <option value="cerclage">Cerclage</option>
               <option value="emballage bois">Emballage bois</option>
               <option value="emballage carton">emballage carton</option>
               <option value="agrafe fil plat">agrafe fil plat</option>
               <option value="agrafe fil rond">Agrafe fil rond</option>
               <option value="soudure">Soudure</option>
               <option value="trombone">Trombone</option>
               <option value="rayon de vélo">Rayon</option>
               <option value="armature cable">Armature (cable)</option>
               <option value="armature gaine">Armature (gaine)</option>
               <option value="armature tuyau">Armature (tuyau)</option>
               <option value="ressort">Ressort</option>
               <option value="liens">Liens</option>
               <option value="façonnage">Façonage</option>
               <option value="brosse">Brosse</option>
               <option value="grillage">Grillage</option>
               <option value="reliure">Reliure</option>
               <option value="rivet">Rivet</option>
               <option value="epingle">Epingle</option>
               <option value="cintre">Cintre</option>
               <option value="autre">Autre</option>
           </optgroup>
       </select>
   </p>
   <p>
       <label for="type">Type de dévidage ?</label><br />
       <select name="type" id="type">
               <option value="non">Non défini</option>
           <optgroup label="Devidage">
               <option value="statique">Statique</option>
               <option value="dynamique">Dynamique</option>
           </optgroup>
       </select>
   </p>
   <p>
       <label for="vitesse">Vitesse de dévidage ?</label><br />
       <select name="vitesse" id="vitesse">
               <option value="non">Non défini</option>
           <optgroup label="Vitesse">
               <option value="<100 m/min"><100 m/min</option>
               <option value="<300 m/min"><300 m/min</option>
               <option value=">300 m/min">>300 m/min</option>
           </optgroup>
       </select>
   </p>
   <p>
       <label for="sens">Système dépendant du sens de rotation ?</label><br />
       <select name="sens" id="sens">
               <option value="0">Non défini</option>
               <option value="1">Oui</option>
               <option value="0">Non</option>
           </optgroup>
       </select>
   </p>
   <p>
       <label for="pac">Possibilité de dévider "par à-coup" ?</label><br />
       <select name="pac" id="pac">
               <option value="0">Non défini</option>
               <option value="1">Oui</option>
               <option value="0">Non</option>
           </optgroup>
       </select>
   </p>
   <p>
       <label for="sag">Possibilité de dévider en "stop and go" ?</label><br />
       <select name="sag" id="sag">
               <option value="0">Non défini</option>
               <option value="1">Oui</option>
               <option value="0">Non</option>
           </optgroup>
       </select>
   </p>

   <p>
       <br/><br/><input type="submit" value="Rechercher" /> <input type="reset" />
   </p>

</form>
</div>
    </body>
</html>


Et le code de ma page de traitement :

try
{
	$bdd = new PDO('mysql:host=localhost;dbname=systemes_devidage', 'root', '');
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}

$reponse="";

if (isset($_POST['conditionnement']))
{

if ($_POST['conditionnement'] != "Non défini" OR $_POST['application'] != "Non défini" 
OR $_POST['type'] != "Non défini" OR $_POST['vitesse'] != "Non défini" OR $_POST['sens'] != "Non défini" 
OR $_POST['pac'] != "Non défini" OR $_POST['sag'] != "Non défini")
{


$reponse = $bdd->query('SELECT systeme.nom
 FROM systeme, convient, application, necessite, conditionnement
 WHERE systeme.id = necessite.id_systeme
 AND necessite.id_conditionnement = conditionnement.id
 AND conditionnement.id = convient.id_conditionnement
 AND application.id = convient.id_application
 AND conditionnement.nom="' . $_POST['conditionnement'] . '"
 AND application.nom="' . $_POST['application'] . '"
 AND type="' . $_POST['type'] . '"
 AND vitesse="' . $_POST['vitesse'] . '"
 AND sens="' . $_POST['sens'] . '"
 AND pac="' . $_POST['pac'] . '"
 AND sag="' . $_POST['sag'] . '"
')or die(print_r($bdd->errorInfo()));

while ($donnees = $reponse->fetch())
{
echo $reponse['nom'] . '<br/>';
}

$reponse->closeCursor();
}
}
else
{
echo "Veuillez sélectionner au moins un critère.";
}
?>


S'il vous plaaaaaaiiiiiiit...! :'(
0
Giorgiolino Messages postés 253 Date d'inscription vendredi 15 mai 2009 Statut Contributeur Dernière intervention 2 mars 2015 52
Modifié par Giorgiolino le 26/03/2010 à 17:54
Bonjour,

inutile de pleurnicher, ça ne va pas t'apporter plus de réponse.

Ceci dit, j'ai examiné ton code que je trouve plutôt propre et bien fait en général.
A ce propos, j'ai deux remarques concernant ton problème:

1/ La validité de tes Tests

Avec $_POST['conditionnement'] != "Non défini" tu voudrais sans doute tester si $_POST['conditionnement'] est non définie. Or quand $_POST['conditionnement'] n'a pas été défini, il a sa valeur par défaut, à savoir "non" (selon ce que tu as défini).

<option value="non">Non défini</option>


Ton test devrait donc être modifié en conséquence
$_POST['conditionnement'] != "non". 

Idem pour les autres tests dans le bloc IF.



2/ La récupération des données après ta requête

 while ($donnees = $reponse->fetch()){    
  echo $reponse['nom'] . '<br/>';    
 }


Tu récupère le nom avec l'objet $response alors que tu devrais le récupérer à partir de ta ligne de résultat representée par $donnees. Essaye en le remplaçant par ceci.

 while ($donnees = $reponse->fetch()){    
  echo $donnees['nom'] . '<br/>';    
 }



Bon courage.

"La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information"
Albert Einstein
0