Bugs dans les valeurs d'un formulaire php

Fermé
djstoun Messages postés 291 Date d'inscription mercredi 23 septembre 2009 Statut Membre Dernière intervention 26 mai 2023 - Modifié par djstoun le 4/03/2016 à 13:53
djstoun Messages postés 291 Date d'inscription mercredi 23 septembre 2009 Statut Membre Dernière intervention 26 mai 2023 - 14 mars 2016 à 13:57
Bonjour les ami(e)s,

J'ai créé un questionnaire test. 10 questions qui aboutissent à un résultat. Sauf que : j'ai des bugs au niveau des résultats car il n'y a pas toujours une bonne restitution des valeurs sur les 10 questions. Pour le savoir, j'ai renvoyé toutes les valeurs à l'une de mes adresses mails. Ainsi, parfois la réponse 1 n'est pas correctement restituée, parfois c'est la réponse 5... Comment se fait-il que la méthode "post" et le "php" puisse avoir des failles ?

J'aimerais ainsi qu'il n'y ait plus aucun bug dans la restitution des résultats.

Je vous affiche ici la conception de mon formulaire. Ainsi, si vous voyez des problèmes dans mon code PHP...

J'ai donc dix questions qui sont sous cette forme. Par exemple, pour la question numéro 5 :

<?php 
$_SESSION['R4'] = $_POST['R4']?>
<?php
$r1 = $_SESSION['R1'];
$r2 = $_SESSION['R2'];
$r3 = $_SESSION['R3'];
$r4 = $_SESSION['R4']; ?>
<body>
<form id="formulaire" name="form1" method="post" action="page6.php">
<p>
<label>
<input type="radio" name="R5" value="1" id="R5_0" onclick="valid_form()"/>
vous êtes d'accord</label>
<br /></p>
<label>
<input type="radio" name="R5" value="5" id="R5_1" onclick="valid_form()"/>
vous n'êtes pas d'accord</label>
<br /></p>
<label>
<input type="radio" name="R5" value="3" id="R5_2" onclick="valid_form()"/>
sans opinion.</label>
<br /></p>
<label>
<input type="radio" name="R5" value="2.1" id="R5_3" onclick="valid_form()"/>
je ne souhaite pas répondre à cette question. </label>
<br /></p>

<label>
<input type="radio" name="R5" value="4.02" id="R5_4" onclick="valid_form()"/>
vous êtes plutôt d'accord. </label>

</p><input name="Validation" type="submit" id="bouton_valider" value="Valider" disabled="true"/>
</form>



Ensuite au bout de mes dix questions, nous arrivons sur une page de traitement de résultat.

<?php
session_start()?>

<?php
$_SESSION['R10'] = $_POST['R10']?>
<?php
$r1 = $_SESSION['R1'];
$r2 = $_SESSION['R2'];
$r3 = $_SESSION['R3'];
$r4 = $_SESSION['R4'];
$r5 = $_SESSION['R5'];
$r6 = $_SESSION['R6'];
$r7 = $_SESSION['R7'];
$r8 = $_SESSION['R8'];
$r9 = $_SESSION['R9'];
$r10 = $_SESSION['R10']?>

// Affichage des resultats;
If ( $res == "10"){
echo "Vous êtes clairement d'extrême gauche."; echo '</p>' ; echo '<br /><img src="images/extrgauche.jpg" border="0" /></div> '; }
If ( $res >= "11" && $res <= "19" && $r1 == "1" && $r2 == "1" && $r3 == "1" && $r5 == "1" && $r6 == "1" && $r7 == "1" && $r8 == "1" && $r9 == "1" && $r10 == "1"){
echo "Vous êtes de gauche.."; echo '</p>' ; echo '<br /><img src="images/gauche.jpg" border="0" /></div> '; }


Les résultats sont envoyés par la fonction mail :

<?php
require "phpmailer/class.phpmailer.php";
$mail = new PHPmailer();
$mail->IsSMTP();
$mail->IsHTML(true);
$mail->Host='smtp.laposte.net';
$mail->Port=587;
$mail->Username = 'pou*******@laposte.net'; // SMTP login
$mail->Password = '******'; // SMTP password
$mail->SMTPAuth = true; // Active l'uthentification par smtp
$mail->SMTPSecure = 'tls';
$mail->From='pou*******@laposte.net';
$mail->AddAddress('pou******@laposte.net');
$mail->AddReplyTo('pou********@laposte.net');

$envoi_mail_body = "$r1, $r2, $r3, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $res" ;

$headers = "$res";
$mail->Subject=$headers;

$mail->Body.=$envoi_mail_body ;

if(!$mail->Send()){ //Teste si le return code est ok.
echo $mail->ErrorInfo; //Affiche le message d'erreur
}
else{
echo '';
}
$mail->SmtpClose();
unset($mail);

?>



Merci d'avance pour votre aide.

2 réponses

Salut,

formulaire PHP? :s Un formulaire c'est en HTML c'est plutôt de ce côté que vient l'erreur.

Vous appliquez une fonction javascript à chaque bouton radio, la fonction s'appelle valid-form(). Si elle sert à valider puis envoyer le formulaire elle doit être effectuée lors de l'envoi donc située sur le bouton d'envoi et non sur les différents champs du formulaire. Cela veut dire qu'en remplissant chaque champ vous envoyer un formulaire alors que le PHP est fait pour traiter plusieurs champs.
De plus vous désactivez le bouton d'envoi:

<input name="Validation" type="submit" id="bouton_valider" value="Valider" disabled="true"/>

Donc il ne se passera rien quand l'utilisateur appuie sur le bouton d'envoi(input type=submit) puisque vous le spécifiez.

Une habitude en PHP est aussi de tester pour vérifier les variables envoyées par le formulaire html(je le répète le formulaire est en HTML, PHP ne fait pas de formulaires mais reçoit les valeurs envoyées) avant de les utiliser.

Cela à 2 avantages importants:
_vérifier que la valeur à utiliser existe bien, repérer une erreur ou une valeur qui serais fausse dans celui ci(ex: mettre une texte quand on attends une valeur numérique, vérifier la longueur de celui ci pour qu'il ait le bon nombre de caractères comme pour un code postal il doit être de 5 chiffres pas moins ni plus...).
_empêcher l'insertion de scripts dans le programme ou d'injection SQL dans la base de données.

Mais avant d'arriver à ceci(je vais mettre un code pour l'exemple) il faut que vos récupérations de variable soient juste.
Je ne comprends pas non plus pourquoi vous utilisez des variables session non plus mais si votre application le nécessite(ça paraît bizarre ici quand même, cela voudrais dire que vous faites une session pour chaque utilisateur et que une fois envoyée et traitées les données du formulaire HTML vous allez les réutiliser sur d'autres pages alors qu'il existe des bases de données pour ça ou que vous pouvez obtenir directement le résultat dans votre page de traitement en php).

" Comment se fait-il que la méthode "post" et le "php" puisse avoir des failles ?"
C'est tout simplement bien présomptueux de votre part, la réponse la plus évidente et que vous ne savez pas vous en servir!

Bon reprenons donc votre formulaire et admettons que vous écriviez correctement le formulaire HTML et ayez un bouton d'envoi et validation unique et qui se fait lorsque le formulaire est correctement rempli(l'intérêt du javascript étant d'éviter de faire une requête serveur au cas où le formulaire n'est pas correctement rempli) vous devez vérifier chaque variable séparément et surtout utiliser correctement les variables POST.
Une variable POST correspondra à chaque champ différent, ici vous n'en utilisez qu'une.

Donc pour chaque champ:

<?
if (isset($POST['monchamp1'])&& $POST['mon,champ1']!=null){
$monchamp1=$POST['monchamp1']);
/*
ou pour plus de sécurité:
$monchamp1=htmlentities(mysql_real_escape_string($POST['monchamp1']));


*/

}else{

echo 'erreur dans le formulaire';
/*on arrête le programme, le formulaire étant faux ou incomplet cela sert à rien de continuer;*/
exit();
}
?>


Vous n'avez pas compris les sessions non plus, et là je vous laisse chercher un cours dessus sur le web.

Les langages ont une syntaxe et des règles(comme la grammaire, les structures de phrases...) c'est tout simplement pour qu'on se fasse comprendre. En informatique la moindre erreur ou omission fera que le programme ne marche pas.

Si vous cherchez pourquoi ça marche pas ce n'est pas PHP mais votre code(la syntaxe et la grammaire de celui ci qui est faux...apprenez à chercher ce que vous ne savez pas plutôt que de penser que vous avez raison alors que vous avez plein de fautes...
1
ps : si vous utilisez une session vous devez placer session_start(); en début de chaque page où sont utilisées les sessions. Votre raisonnement est faux puisque vous faites aussi appel à des variables de sessions avant que celles ci n'existent, bref vous avez du boulot à commencer par suivre un des nombreux cours de PHP et apprendre à vous servir du manuel(comme tout outil technique)

http://php.net/manual/fr/function.session-start.php
0
djstoun Messages postés 291 Date d'inscription mercredi 23 septembre 2009 Statut Membre Dernière intervention 26 mai 2023 5
14 mars 2016 à 13:57
Bonjour,

Plusieurs choses :
oui vous avez raison, je m'initie et j'essaie de comprendre. Et malgré les sites du zero et des openclassroom j'ai beaucoup de mal. Du coup, je suis à l'écoute. D'ailleurs , pour la création du questionnaire formulaire, j'ai été guidé dans la tâche par des forumeurs d'ici. Sinon, effectivement, j'ai omis une partie du code (désolé). J'ai bien mis une session_start() sur chaque page du formulaire... Ainsi, pour corriger le code de la page 5 (qui fait figure d'exemple ci-dessus, voici le code rectifié :

<?php
session_start()?><?php

$_SESSION['R4'] = $_POST['R4']?>
<?php
$r1 = $_SESSION['R1'];
$r2 = $_SESSION['R2'];
$r3 = $_SESSION['R3'];
$r4 = $_SESSION['R4']; ?>
<body>
<form id="formulaire" name="form1" method="post" action="page6.php">
<p>
<label>
<input type="radio" name="R5" value="1" id="R5_0" onclick="valid_form()"/>
vous êtes d'accord</label>
<br /></p>
<label>
<input type="radio" name="R5" value="5" id="R5_1" onclick="valid_form()"/>
vous n'êtes pas d'accord</label>
<br /></p>
<label>
<input type="radio" name="R5" value="3" id="R5_2" onclick="valid_form()"/>
sans opinion.</label>
<br /></p>
<label>
<input type="radio" name="R5" value="2.1" id="R5_3" onclick="valid_form()"/>
je ne souhaite pas répondre à cette question. </label>
<br /></p>

<label>
<input type="radio" name="R5" value="4.02" id="R5_4" onclick="valid_form()"/>
vous êtes plutôt d'accord. </label>

</p><input name="Validation" type="submit" id="bouton_valider" value="Valider" disabled="true"/>
</form>
0
alhuno1 Messages postés 1874 Date d'inscription lundi 9 novembre 2009 Statut Contributeur Dernière intervention 13 novembre 2018 225
4 mars 2016 à 18:33
Ajoute ceci avant session_start() et vois si il y a des erreurs.
error_reporting(E_ALL);
0
djstoun Messages postés 291 Date d'inscription mercredi 23 septembre 2009 Statut Membre Dernière intervention 26 mai 2023 5
4 mars 2016 à 18:37
Ok, je tente. Merci pour la proposition d'aide. Je te dis ça...
0
djstoun Messages postés 291 Date d'inscription mercredi 23 septembre 2009 Statut Membre Dernière intervention 26 mai 2023 5
14 mars 2016 à 13:48
Hello,

Il me semble que je ne reçois pas de messages d'erreurs. Si ce n'est que j'ai plein d'erreurs 500 depuis 2 semaines quand je navigue entre les pages du formulaire ce qui est très gênant (mais cela doit être la faute de mon serveur Olympe ?).

Aussi, j'ai un message d'erreur depuis 1 semaine (quand le formulaire veut bien fonctionner)
mais qui doit être lié à la fonction mail de la Poste
"Language string failed to load: tls Language string failed to load: tls"

A ton écoute...
0