Le code "plus propre" ne fonctionne pas.
Résolu
Daniel
-
Daniel -
Daniel -
Bonjour,
J'ai un script sur une page qui devrait recevoir les données d'un formulaire.... Les données arrivent bien et elles s'affichent à l'écran avec ce code on ne peut plus basique
Par contre avec le code suivant, les données ne s'affichent pas. j'ai bien le mot "Test" mais pas les variables.
Et là je sèche depuis quelques heures... si vous pouviez m’aiguiller sur le pourquoi ce serait super gentil.
La requête est en commentaire car tant que les variables ne s'afficheront pas, c'est même pas la peine de vouloir les envoyer sur la BDD.
Merci d'avance.
Daniel
J'ai un script sur une page qui devrait recevoir les données d'un formulaire.... Les données arrivent bien et elles s'affichent à l'écran avec ce code on ne peut plus basique
<?php $Votant = $_POST['Votant']; $Num = $_POST['Num']; $Vote1 = $_POST['Vote1']; $Vote2 = $_POST['Vote2']; $Vote3 = $_POST['Vote3']; $Vote4 = $_POST['Vote4']; $Vote5 = $_POST['Vote5']; $Vote6 = $_POST['Vote6']; $Vote7 = $_POST['Vote7']; $Vote8 = $_POST['Vote8']; echo $Votant, ' ', $Num, ' ', $Vote1, ' ', $Vote2, ' ', $Vote3, ' ', $Vote4, ' ', $Vote5, ' ', $Vote6, ' ', $Vote7, ' ', $Vote8; ?>
Par contre avec le code suivant, les données ne s'affichent pas. j'ai bien le mot "Test" mais pas les variables.
<?php //activation de l'affichage des erreurs PHP error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); echo "Test <br>"; // on vérifie d'abord que tous les champs ont été envoyés if(isset($_POST['Action'])) { $Action = $_POST['Action']; //déclaration des variables $Votant = $_POST['Votant']; $Num = $_POST['Num']; $Vote1 = $_POST['Vote1']; $Vote2 = $_POST['Vote2']; $Vote3 = $_POST['Vote3']; $Vote4 = $_POST['Vote4']; $Vote5 = $_POST['Vote5']; $Vote6 = $_POST['Vote6']; $Vote7 = $_POST['Vote7']; $Vote8 = $_POST['Vote8']; //test d'affichage des variables echo $Votant.'<br>'; echo $Num.'<br>'; echo $Vote1.'<br>'; echo $Vote1.'<br>'; echo $Vote2.'<br>'; echo $Vote3.'<br>'; echo $Vote4.'<br>'; echo $Vote5.'<br>'; echo $Vote6.'<br>'; echo $Vote7.'<br>'; echo $Vote8.'<br>'; //Test OK => passage en commentaire // création des requetes INSERT selon la valeur de la variable $Action /* //on inclut le fichier de connexion à la bdd require_once "../secure/cnxBdd.php"; //$sth appartient à la classe PDOStatement $sth = $bdd->prepare("INSERT INTO Vote (Votant, Num, Vote1, Vote2, Vote3, Vote4, Vote5, Vote6, Vote7, Vote8) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); $sth->execute(array($Votant, $Num, $Vote1, $Vote2, $Vote3, $Vote4, $Vote5, $Vote6, $Vote7, $Vote8)); echo '<br><br> Votre vote a bien été transmis. Merci <br> */ } ?>
Et là je sèche depuis quelques heures... si vous pouviez m’aiguiller sur le pourquoi ce serait super gentil.
La requête est en commentaire car tant que les variables ne s'afficheront pas, c'est même pas la peine de vouloir les envoyer sur la BDD.
Merci d'avance.
Daniel
Configuration: Windows / Firefox 82.0
A voir également:
- Le code "plus propre" ne fonctionne pas.
- Code ascii - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code puk bloqué - Guide
- Code activation windows 10 - Guide
- Code blocks - Télécharger - Langages
4 réponses
Bonjour,
Vu que ça bloque au niveau du IF .... as tu bien une variable $_POST['Action'] qui est envoyée dans ton formulaire ??
Peux tu, juste après ton
faire un
et nous montrer ce qu'il contient ?
PS: Pour l'instant, ce code n'est pas plus "propre" ... tu y as juste activé l'affichage des erreurs PHP...
Donc à voir si tu n'aurais pas des messages d'erreur qui s'afficheraient.... et dans ce cas... nous les donner...
Vu que ça bloque au niveau du IF .... as tu bien une variable $_POST['Action'] qui est envoyée dans ton formulaire ??
Peux tu, juste après ton
echo "Test <br>";
faire un
echo "<pre>"; print_r($_POST); echo "</pre>";
et nous montrer ce qu'il contient ?
PS: Pour l'instant, ce code n'est pas plus "propre" ... tu y as juste activé l'affichage des erreurs PHP...
Donc à voir si tu n'aurais pas des messages d'erreur qui s'afficheraient.... et dans ce cas... nous les donner...
Bonjour Jordane45,
Voici le résultat après le mot Test :
Array
(
[Votant] => TOTO
[Num] => 1555_13
[Vote1] => NON
[Vote2] => ABSTENTION
[Vote3] => NON
[Vote4] => ABSTENTION
[Vote5] => OUI
[Vote6] => OUI
[Vote7] => OUI
[Vote8] => OUI
)
Et il n'y a aucun message d'erreur php
Voici le résultat après le mot Test :
Array
(
[Votant] => TOTO
[Num] => 1555_13
[Vote1] => NON
[Vote2] => ABSTENTION
[Vote3] => NON
[Vote4] => ABSTENTION
[Vote5] => OUI
[Vote6] => OUI
[Vote7] => OUI
[Vote8] => OUI
)
Et il n'y a aucun message d'erreur php
Salut,
name = 0? ça vous sert ça? Pas la bonne syntaxe en tout cas , un nom ne pouvant être un nombre si on veut l'utiliser en tant que variable dans un programme.
Ce que vous indiquez est simplement l'adresse de la page qui va traiter les données du formulaire.
Vu que vous utilisez la méthode POST toutes les valeurs du formulaire seront envoyées via la variable globale $_POST.
La variable ACTION n'existe donc pas, dans le formulaire HMTL c'est un attribut de balise qui indique simplement quelle action sera effectuée: en l’occurrence envoyer les données à la page PHP indiquées.
/!\ attention au noms de fichiers(et de dossiers) avec des majuscules. Parfois celles ci ne sont pas prise en compte et au mieux cela sera une source possible d'erreur; donc mieux vaux écrire tout en minuscule(fichiers et dossiers) pour éviter les erreurs. "envoivote.php" donc sera plus propre, plus simple à utiliser(c'est déjà plus rapide à taper) et évitera les erreurs pour les serveurs qui ne prennent pas en compte les majuscules.
Donc comme vous l'avez indiqué vous même tout (les valeurs/données du formulaires) sont transmises par la variable super-globale $_POST. Donc c'est celle ci que vous devez tester, nulle part il n'existe de variable $_POST['action'] sauf évidemment si vous en attribuez une.
Ainsi la syntaxe de votre condition:
C'est donc la base de l'utilisation d'un formulaire (HTML) qui vous manquait ici.
Autre détail mais d'importance pour la requête je vous conseille de regarde du côté de PDO:
https://www.php.net/manual/fr/book.pdo.php
Il vaut mieux aussi vérifier que les champs sont bien remplis directement dans le formulaire.
Cela évite une requête serveur si les champs ne sont pas correctement remplis et sera donc plus rapide pour avoir l'erreur(les champs doivent être remplis)
Voir par exemple l'attribut de balise "required" à compléter par des vérifications en JavaScript(donc côté client aussi) qui permettent d'affiner un peu le message d'erreur si les champs ne sont pas correctement remplis.
Cela n'empêche pas non plus de vérifier côté PHP toutefois, le but étant de rendre impossible l'enregistrement dans la base de valeurs incohérentes(des nombres quand on attends des lettres ou inversement, des valeurs qui ne sont pas cohérent avec le SI.. etc.)
Plus de détails sur la transmission de données via la méthode POST ici:
https://www.php.net/manual/fr/reserved.variables.post.php
edit: owned
name = 0? ça vous sert ça? Pas la bonne syntaxe en tout cas , un nom ne pouvant être un nombre si on veut l'utiliser en tant que variable dans un programme.
Ce que vous indiquez est simplement l'adresse de la page qui va traiter les données du formulaire.
Vu que vous utilisez la méthode POST toutes les valeurs du formulaire seront envoyées via la variable globale $_POST.
La variable ACTION n'existe donc pas, dans le formulaire HMTL c'est un attribut de balise qui indique simplement quelle action sera effectuée: en l’occurrence envoyer les données à la page PHP indiquées.
/!\ attention au noms de fichiers(et de dossiers) avec des majuscules. Parfois celles ci ne sont pas prise en compte et au mieux cela sera une source possible d'erreur; donc mieux vaux écrire tout en minuscule(fichiers et dossiers) pour éviter les erreurs. "envoivote.php" donc sera plus propre, plus simple à utiliser(c'est déjà plus rapide à taper) et évitera les erreurs pour les serveurs qui ne prennent pas en compte les majuscules.
Donc comme vous l'avez indiqué vous même tout (les valeurs/données du formulaires) sont transmises par la variable super-globale $_POST. Donc c'est celle ci que vous devez tester, nulle part il n'existe de variable $_POST['action'] sauf évidemment si vous en attribuez une.
Ainsi la syntaxe de votre condition:
if (!empty($_POST)) /* code ici */ }
C'est donc la base de l'utilisation d'un formulaire (HTML) qui vous manquait ici.
Autre détail mais d'importance pour la requête je vous conseille de regarde du côté de PDO:
https://www.php.net/manual/fr/book.pdo.php
Il vaut mieux aussi vérifier que les champs sont bien remplis directement dans le formulaire.
Cela évite une requête serveur si les champs ne sont pas correctement remplis et sera donc plus rapide pour avoir l'erreur(les champs doivent être remplis)
Voir par exemple l'attribut de balise "required" à compléter par des vérifications en JavaScript(donc côté client aussi) qui permettent d'affiner un peu le message d'erreur si les champs ne sont pas correctement remplis.
Cela n'empêche pas non plus de vérifier côté PHP toutefois, le but étant de rendre impossible l'enregistrement dans la base de valeurs incohérentes(des nombres quand on attends des lettres ou inversement, des valeurs qui ne sont pas cohérent avec le SI.. etc.)
Plus de détails sur la transmission de données via la méthode POST ici:
https://www.php.net/manual/fr/reserved.variables.post.php
edit: owned
Bonjour Pikachu,
Merci pour ces compléments.
Oui le required est utilisé comme le pattern et le js pour permettre à l'auteur la conservation de sa saisie.
Pour le PDO, Jordane m'a déjà envoyé un article à lire mais j'irai tout de même faire un tour sur votre lien.
Merci encore pour votre contribution à mon "sauvetage".
Daniel
Merci pour ces compléments.
Oui le required est utilisé comme le pattern et le js pour permettre à l'auteur la conservation de sa saisie.
Pour le PDO, Jordane m'a déjà envoyé un article à lire mais j'irai tout de même faire un tour sur votre lien.
Merci encore pour votre contribution à mon "sauvetage".
Daniel
Ok .. vu l'erreur.
J'étais reparti d'une page où il y avait une variable action.... alors que là, je ne l'avais plus.
En remplaçant Action par une variable existante ça marche beaucoup mieux.
En fait le Isset ne contrôle la présence que d'une variable. De là, on considère que les autres aussi sont bien arrivées.
Merci pour le temps passé sur cette banalité pour toi mais qui m'a fait encore progresser.
@+ et merci encore Jordane45
J'étais reparti d'une page où il y avait une variable action.... alors que là, je ne l'avais plus.
En remplaçant Action par une variable existante ça marche beaucoup mieux.
En fait le Isset ne contrôle la présence que d'une variable. De là, on considère que les autres aussi sont bien arrivées.
Merci pour le temps passé sur cette banalité pour toi mais qui m'a fait encore progresser.
@+ et merci encore Jordane45
Et n'oublies pas, vu que tu fais du PDO, à placer CHAQUE requête dans un bloc TRY/CATCH
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs