PHP Fatal Error dans un formulaire

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : PHP Fatal Error dans un formulaire

Re: PHP Fatal Error dans un formulaire

par daphmo » 07 janv. 2014, 18:15

Il me change la disposition :
<!== /0/15/ --><option value ="Début d'opération de maintenance">Début d'opération de maintenance</option>NULL
<!== /2/15/ --><option value ="Fin d'opération de maintenance">Fin d'opération de maintenance</option>NULL
<!== /4/15/ --><option value ="Information">Information</option>NULL
<!== /6/15/ -->
Je ne sais pas trop ce que ça veut dire., surtout le 15.

Re: PHP Fatal Error dans un formulaire

par Mazarini » 07 janv. 2014, 18:12

Je crois que tu dois faire un var_dump($templates) pour analyser le contenu.

Je ne voie pas d'ou vient le 15, je ne voie que 3 templates dans listetemplate

Re: PHP Fatal Error dans un formulaire

par daphmo » 07 janv. 2014, 17:16

Merci beaucoup pour ta réponse !

J'ai essayé les lignes que tu m'as envoyées et voilà ce que me renvoie le code source de la page :
<!DOCTYPE html>
<head>
 <meta charset="utf-8" />
        <title>Liste de template</title>
	<h3>Choisissez un template de mail : </h3>
</head>

<html>

<body>

<form id="form" action="rempli.php" method="post">

<button type="submit" id="envoyer" name="envoyer"> Envoyer </button>

<select name="test">


<!== /0/15/ --><option value ="Début d'opération de maintenance">Début d'opération de maintenance</option><!== /2/15/ --><option value ="Fin d'opération de maintenance">Fin d'opération de maintenance</option><!== /4/15/ --><option value ="Information">Information</option><!== /6/15/ -->

Re: PHP Fatal Error dans un formulaire

par Mazarini » 07 janv. 2014, 16:57

for ($compteur=1;$compteur<$nbchild;$compteur=$compteur+2) {
        echo '<!== /',$compteur,'/',$nbchild,'/ -->';   // ligne à ajouter 
        $nom_template = $templates->childNodes->item($compteur)->childNodes->item(1)->nodeValue;
        echo '<option value ="'.$nom_template.'">'.$nom_template.'</option>';
}
L'ajout de cette ligne te permettra de voir ce qui ce passe en regardant le source de la page. A mon avis, il y a un problème lors de la dernière boucle :
compteur = 3
nbchild = 4
donc tu passes avec compteur = 5.

Si j'ai raison :
for ($compteur=0;$compteur<$nbchild;$compteur=$compteur+2) {
        echo '<!== /',$compteur,'/',$nbchild,'/ -->';   // ligne à ajouter 
        $nom_template = $templates->childNodes->item($compteur+1)->childNodes->item(1)->nodeValue;
        echo '<option value ="'.$nom_template.'">'.$nom_template.'</option>';
}

Re: PHP Fatal Error dans un formulaire

par daphmo » 07 janv. 2014, 15:15

Merci pour ta réponse !

J'ai essayé d'utiliser print_r, mais ça n'affichait rien... Peut-être l'ai-je mal fait..

De plus, je ne pense pas que le problème vienne d'un caractère, j'ai fait des tests en remplaçant $compteur par un nombre et ça marchait sans faire d'erreur. Ça n'affichait cependant qu'une seule valeur...

Pour le moment, le temps de trouver une solution qui tienne la route, j'ai tout écrit de manière statique :
//Début d'opération
$nom_template = $templates->childNodes->item(1)->childNodes->item(1)->nodeValue;
       echo '<option value ="'.$nom_template.'">'.$nom_template.'</option>';

//Fin d'opération
$nom_template = $templates->childNodes->item(3)->childNodes->item(1)->nodeValue;
       echo '<option value ="'.$nom_template.'">'.$nom_template.'</option>';

//Information
$nom_template = $templates->childNodes->item(5)->childNodes->item(1)->nodeValue;
       echo '<option value ="'.$nom_template.'">'.$nom_template.'</option>';

Re: PHP Fatal Error dans un formulaire

par xTG » 07 janv. 2014, 14:23

Utilises la fonction print_r() pour afficher $compteur.
Tu auras le type et si c'est une string la longueur (et donc la possibilité de vérifier qu'il n'y a pas des caractères non imprimables en début ou en fin de chaîne).

PHP Fatal Error dans un formulaire

par daphmo » 07 janv. 2014, 10:49

Bonjour à tous !

Je fais actuellement face à un problème depuis un moment, mais je n'arrive pas à le résoudre :?

Je dispose d'une page sur laquelle on peut sélectionner un formulaire PHP. Ce formulaire est crée dynamiquement grâce à un fichier XML que voici :

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8"?> <listetemplate> <template> <nom>Début d'opération de maintenance</nom> <description>Début d'opération de maintenance</description> <titre>Opération de maintenance</titre> <text>categorie</text> <destinataire>activer</destinataire> <time>activer</time> <textlong>Description</textlong> <textlong>Incidence</textlong> </template> <template> <nom>Fin d'opération de maintenance</nom> <description>Fin d'opération de maintenance</description> <titre>Fin de l'opération de maintenance</titre> <text>categorie</text> <destinataire>activer</destinataire> <time>activer</time> <textlong>Description</textlong> <signature>IRCAD</signature> </template> <template> <nom>Information</nom> <description>Information</description> <titre>Information</titre> <text>categorie</text> <destinataire>activer</destinataire> <textlong>Description</textlong> </template> <!-- <template> --> <!-- <nom>template4</nom> --> <!-- <description>Description du template 4</description> --> <!-- </template> --> </listetemplate>
Le fichier rempli.php contient le formulaire avec les datepicker, les select et les champs :

Code : Tout sélectionner

<!DOCTYPE html> <head> <meta charset="utf-8" /> <title>Votre message</title> <script src='http://code.jquery.com/jquery-1.9.1.js'></script> <script src='http://code.jquery.com/ui/1.10.3/jquery-ui.js'></script> <script src='http://trentrichardson.com/examples/timepicker/jquery-ui-timepicker-addon.js' ></script> <link rel="stylesheet" href='http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css' /> <link rel="stylesheet" href="css/style.css" type="text/css" /> </head> <html> <body> <h1><center>Votre message : </center></h1> <form id="form" action="mail.php" method="post"> <?php $xml = "template.xml"; $dom = new DOMDocument(); //echo "test2 <br>"; $dom->load($xml); $dom->normalizeDocument(); // test = valeur du template choisi if($_POST['test'] == NULL) { echo "c'est null"; } else { $test = $_POST['test']; } echo "<br>"; //echo $test; //echo "test3 <br>"; $templates = $dom->getElementsByTagName('listetemplate')->item(0); $nbchild = $templates->childNodes->length; //echo "nombre d'enfants : ".$nbchild."<br>"; //echo "testtest <br>"; $nom_template=""; $compteur=0; //$nom_template = $dom->getElementsByTagName('nom')->item($compteur)->nodeValue; while($compteur<$nbchild && $_POST['test'] != $nom_template) { $template = $dom->getElementsByTagName('template')->item($compteur); $nom_template = $template->childNodes->item(1)->nodeValue; //echo "nom du template : ".$nom_template."<br>"; //echo "test4 <br>"; $compteur++; } //echo $template->childNodes->length."<br>"; for($compteur=5;$compteur < $template->childNodes->length;$compteur=$compteur+2) { //echo "Nom du noeud : ".$template->childNodes->item($compteur)->nodeName."<br>"; $template->childNodes->item($compteur)->nodeValue; //echo "Valeur du noeud : ".$template->childNodes->item($compteur)->nodeValue."<br>"; if($template->childNodes->item($compteur)->nodeName == "titre") { echo '<h2><center>'.$template->childNodes->item($compteur)->nodeValue.'</h2></center>'; $nom = $template->childNodes->item($compteur)->nodeValue; //<input type="hidden" name="nom" id ="nom" value='$nom' /> } elseif($template->childNodes->item($compteur)->nodeName == "text") { //if nodeName = text => générer balise html textarea echo '<div> <label for="'.$template->childNodes->item($compteur)->nodeValue.'">'.$template->childNodes->item($compteur)->nodeValue.'</label> <input type="textarea" id="'.$template->childNodes->item($compteur)->nodeValue.'" name ="'.$template->childNodes->item($compteur)->nodeValue.'"/> </div>'; echo "<br>"; } elseif($template->childNodes->item($compteur)->nodeName == "textlong") { echo'<div> <label for="'.$template->childNodes->item($compteur)->nodeValue.'">'.$template->childNodes->item($compteur)->nodeValue.'</label> <textarea cols="50" rows="10" id="'.$template->childNodes->item($compteur)->nodeValue.'" name ="'.$template->childNodes->item($compteur)->nodeValue.'"></textarea> </div>'; } elseif($template->childNodes->item($compteur)->nodeName == "time") { echo '<div> <label for="datepicker">Début : </label> <select name="heure1"> <option value="00">00</option> <option value="01">01</option> <option value="02">02</option> <option value="03">03</option> <option value="04">04</option> <option value="05">05</option> <option value="06">06</option> <option value="07">07</option> <option value="08">08</option> <option value="09">09</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> </select> <select name="minute1"> <option value="00">00</option> <option value="05">05</option> <option value="10">10</option> <option value="15">15</option> <option value="20">20</option> <option value="25">25</option> <option value="30">30</option> <option value="35">35</option> <option value="40">40</option> <option value="45">45</option> <option value="50">50</option> <option value="55">55</option> </select> <input type="text" id="datepicker" class="datepicker" name="datepicker" /> </div>'; echo '<div> <label for="datepicker2">Fin : </label> <select name="heure2"> <option value="00">00</option> <option value="01">01</option> <option value="02">02</option> <option value="03">03</option> <option value="04">04</option> <option value="05">05</option> <option value="06">06</option> <option value="07">07</option> <option value="08">08</option> <option value="09">09</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> </select> <select name="minute2"> <option value="00">00</option> <option value="05">05</option> <option value="10">10</option> <option value="15">15</option> <option value="20">20</option> <option value="25">25</option> <option value="30">30</option> <option value="35">35</option> <option value="40">40</option> <option value="45">45</option> <option value="50">50</option> <option value="55">55</option> </select> <input type="text" id="datepicker2" class="datepicker" name="datepicker2" /> </div>'; } elseif($template->childNodes->item($compteur)->nodeName == "destinataire") { echo '<INPUT type="checkbox" name="ircad" value="1" checked> IRCAD <INPUT type="checkbox" name="ihu" value="2"> IHU <INPUT type="checkbox" name="partenaires" value="3"> Autres partenaires <INPUT type="checkbox" name="informatique" value="4"> Informatique'; echo "<br>"; } } ?> <div class="button"> <input type="submit" id="Envoyer" name="Envoyer" value=Envoyer > </div> <div> <input type="hidden" id="diffhour" name="diffhour"/> </div> <div> <input type="hidden" id="diffmin" name="diffmin"/> </div> <!-- //Nom template --> <input type="hidden" name="nom" id ="nom" value=<?php echo htmlspecialchars($nom); ?> > </form> <script src="js/controleform.js"></script> </body> </html>
Je vous montre tous les fichiers, même s'ils ne sont peut être pas nécessaires à la compréhension du problème.

Mon problème vient du fichier liste.php, ce fichier présente un select avec la liste des templates disponibles.

Code : Tout sélectionner

<!DOCTYPE html> <head> <meta charset="utf-8" /> <title>Liste de template</title> <h3>Choisissez un template de mail : </h3> </head> <html> <body> <form id="form" action="rempli.php" method="post"> <button type="submit" id="envoyer" name="envoyer"> Envoyer </button> <select name="test"> <?php $xml = "template.xml"; $dom = new DOMDocument(); $dom->load($xml); $dom->normalizeDocument(); $templates = $dom->getElementsByTagName('listetemplate')->item(0); $nbchild = $templates->childNodes->length; /*$nom_template=""; foreach ($template as $nom_template) { if (method_exists($nom_template->childNodes, 'item')) { for ($compteur=1;$compteur<$nbchild;$compteur=$compteur+2) { $nom_template = $templates->childNodes->item($compteur)->childNodes->item(1)->nodeValue; echo '<option value ="'.$nom_template.'">'.$nom_template.'</option>'; } // echo $template->childNodes->item($compteur)->nodeValue."<br />"; // To reproduce the exact output you need this line also. // You need to display the second child (Answer) // echo $li->childNodes->item(1)->nodeValue."<br />"; } }*/ //$compteur=0; for ($compteur=1;$compteur<$nbchild;$compteur=$compteur+2) { $nom_template = $templates->childNodes->item($compteur)->childNodes->item(1)->nodeValue; echo '<option value ="'.$nom_template.'">'.$nom_template.'</option>'; } ?> </select> </body> </html>
A la ligne 47 que voici :

Code : Tout sélectionner

$nom_template = $templates->childNodes->item($compteur)->childNodes->item(1)->nodeValue;
J'ai l'erreur suivante :

Code : Tout sélectionner

[Tue Jan 07 09:05:41 2014] [error] [client 192.168.3.14] PHP Fatal error: Call to a member function item() on a non-object in /var/www/template/liste.php on line 47
Après quelques recherches, j'ai remarqué que la fonction item n'acceptait pas mon $compteur et préférait un nombre... Ma liste de template marche parfaitement mais cette erreur subsiste.

Merci d'avance pour votre aide !