Je n'arrive pas à parcourir un tableau $_POST
Résolu/Fermé
alla123321
Messages postés
25
Date d'inscription
dimanche 20 septembre 2015
Statut
Membre
Dernière intervention
2 octobre 2016
-
19 nov. 2015 à 19:42
Utilisateur anonyme - 22 nov. 2015 à 01:35
Utilisateur anonyme - 22 nov. 2015 à 01:35
6 réponses
Utilisateur anonyme
19 nov. 2015 à 20:43
19 nov. 2015 à 20:43
Bonjour
On ne voit pas tout ton code, alors ton formulaire est-il bien dansune balise <form> ?
Et le bouton de validation devrait être de type submit, pas de type reset. Reset sert à remettre le formulaire dans son état initial, mais ne l'envoie pas.
Et fais attention à l'espace en trop dans le "name" de tes checkbox
On ne voit pas tout ton code, alors ton formulaire est-il bien dansune balise <form> ?
Et le bouton de validation devrait être de type submit, pas de type reset. Reset sert à remettre le formulaire dans son état initial, mais ne l'envoie pas.
Et fais attention à l'espace en trop dans le "name" de tes checkbox
Utilisateur anonyme
19 nov. 2015 à 22:02
19 nov. 2015 à 22:02
non ce n'est pas sensé être un formulaire
Si, c'est censé être un formulaire. Sans formulaire, pas de $_POST.
Et pour envoyer le formulaire, il faut un bouton submit. Tu as aussi le droit de mettre un bouton reset si tu veux effacer le formulaire, mais si tu n'as qu'un seul bouton, avoir le reset sans le submit n'a pas de sens (sauf si tu utilises javascript, mais tu n'as pas l'air d'en être là)
Si, c'est censé être un formulaire. Sans formulaire, pas de $_POST.
Et pour envoyer le formulaire, il faut un bouton submit. Tu as aussi le droit de mettre un bouton reset si tu veux effacer le formulaire, mais si tu n'as qu'un seul bouton, avoir le reset sans le submit n'a pas de sens (sauf si tu utilises javascript, mais tu n'as pas l'air d'en être là)
alla123321
Messages postés
25
Date d'inscription
dimanche 20 septembre 2015
Statut
Membre
Dernière intervention
2 octobre 2016
1
19 nov. 2015 à 22:14
19 nov. 2015 à 22:14
Et du coup je peux mettre cette liste dans un formulaire ? :o
Utilisateur anonyme
19 nov. 2015 à 22:22
19 nov. 2015 à 22:22
Je ne dirais pas que tu peux : tu DOIS.
Tu as un peu étudié le HTML avant de te lancer dans une application avec PHP et base de données ?
Tu as un peu étudié le HTML avant de te lancer dans une application avec PHP et base de données ?
alla123321
Messages postés
25
Date d'inscription
dimanche 20 septembre 2015
Statut
Membre
Dernière intervention
2 octobre 2016
1
19 nov. 2015 à 22:28
19 nov. 2015 à 22:28
oui j'ai fait un peu de HTML/CSS mais je ne savais pas ca..
donc, voici le code corrigé mais ca marche toujours pas : / (normalement il doit m'afficher bla mais il m'affiche blabla a chaque fois ) :
donc, voici le code corrigé mais ca marche toujours pas : / (normalement il doit m'afficher bla mais il m'affiche blabla a chaque fois ) :
<form id="formulaireSupprimer" action="site.php" method="post">
<fieldset>
<legend> Liste des étudiants </legend>
<?php
function getConnect(){
require_once('connect.php');
$connexion=new PDO('mysql:host='.SERVEUR.';dbname='.BDD,USER,PASSWORD);
$connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$connexion->query('SET NAMES UTF8');
return $connexion;
}
try{
$connexion=getConnect();
$requete = "select * from etudiantsimple";
$resultat = $connexion->query($requete);
$resultat->setFetchMode(PDO::FETCH_OBJ);
$ligne = $resultat->fetch();
if ($ligne == false) {
echo ' aucun etudiant dans la liste ';
} else {
do {
echo '<p><input type="checkbox" formmethod="post" name="'.$ligne->id.'"/> Etudiant numero '.$ligne->id.': <input type="text" value="'.$ligne->nom.'" name="nom" readonly="readonly"/> </p>';
} while ($ligne = $resultat->fetch());
$resultat->closeCursor();
}
?>
<p> <input type="submit" value="Supprimer etudiant " name="supp" /> </p>
<?php
if(isset($_POST['supp'])) {
if(!empty($_POST['$ligne->id'])){
echo 'bla';
}else {
echo 'blabla';
}
}
}catch(PDOException $e){
$msg = 'ERREUR dans ' .$e->getFile(). 'Ligne' .$e->getLine(). ':' .$e->getMessage();
exit($msg);
}
?>
</fieldset>
</form>
alla123321
Messages postés
25
Date d'inscription
dimanche 20 septembre 2015
Statut
Membre
Dernière intervention
2 octobre 2016
1
19 nov. 2015 à 22:32
19 nov. 2015 à 22:32
je pense que le problème vient de cette ligne :
mais j'arrive pas à voir l'erreur :(
if(!empty($_POST['$ligne->id'])){
mais j'arrive pas à voir l'erreur :(
Utilisateur anonyme
19 nov. 2015 à 22:40
19 nov. 2015 à 22:40
Tu testes $_POST['$ligne->id'], mais ce test n'a aucun sens.
Tu n'as aucun champ de ton formulaire qui s'appelle $ligne->id.
Fais un print_r($_POST); pour voir ce que t'envoie ton formulaire
Tu n'as aucun champ de ton formulaire qui s'appelle $ligne->id.
Fais un print_r($_POST); pour voir ce que t'envoie ton formulaire
alla123321
Messages postés
25
Date d'inscription
dimanche 20 septembre 2015
Statut
Membre
Dernière intervention
2 octobre 2016
1
19 nov. 2015 à 22:44
19 nov. 2015 à 22:44
le print_r($_POST) m'affiche ca : Array ( [nom] => jeti [8] => on [9] => on [supp] => Supprimer etudiant )
je voulais tester if(!empty($_POST['$ligne->id'])) pour vérifier si une case a étée cochée ou non. .?!
je voulais tester if(!empty($_POST['$ligne->id'])) pour vérifier si une case a étée cochée ou non. .?!
alla123321
Messages postés
25
Date d'inscription
dimanche 20 septembre 2015
Statut
Membre
Dernière intervention
2 octobre 2016
1
19 nov. 2015 à 22:45
19 nov. 2015 à 22:45
PS. le print_r($_POST) affiche ca car avant de cliquer le buton submit j'ai coché les étudiants nr 8 et 9
alla123321
Messages postés
25
Date d'inscription
dimanche 20 septembre 2015
Statut
Membre
Dernière intervention
2 octobre 2016
1
19 nov. 2015 à 23:11
19 nov. 2015 à 23:11
Alors, j'ai écrit ce code :
et ca supprime quand je coche les étudiants à supprimer un par un mais quand je selectionne 2 ou + il m'affihe d'abord ca : Array ( [13] => on [nom] => sh [14] => on [supp] => Supprimer etudiant ) ERREUR dans C:\wamp\www\.................... .phpLigne59:SQLSTATE[42S22]: Column not found: 1054 Unknown column 'supp' in 'where clause' mais une fois que je fais un F5 il les supprime .. As toi une idée comment puis-je faire pour qu'il ne m'affiche plus cet erreur ? Merci
if(isset($_POST['supp'])) {
print_r($_POST);
foreach($_POST as $key=>$val ){
$requete = "delete from etudiantsimple where id=$key";
$resultat = $connexion->query($requete);
$resultat->closeCursor();
}
}
et ca supprime quand je coche les étudiants à supprimer un par un mais quand je selectionne 2 ou + il m'affihe d'abord ca : Array ( [13] => on [nom] => sh [14] => on [supp] => Supprimer etudiant ) ERREUR dans C:\wamp\www\.................... .phpLigne59:SQLSTATE[42S22]: Column not found: 1054 Unknown column 'supp' in 'where clause' mais une fois que je fais un F5 il les supprime .. As toi une idée comment puis-je faire pour qu'il ne m'affiche plus cet erreur ? Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
Modifié par le père. le 20/11/2015 à 00:24
Modifié par le père. le 20/11/2015 à 00:24
Tester $_POST['$ligne->id'] n'avait pas de sens, je le répète, car '$ligne->id' entre apostrophes n'est pas une variable PHP, mais une chaîne de caractères (comme 'toto' ou 'bonjour'). Même si tu avais écrit $_POST[$ligne->id], ça n'aurait pas marché car au moment où tu le fais, la variable $ligne contient "false" puisque tu es sorti du do-while.
Pour en revenir à ton problème de unknown column Supp, il vient du fait que tu essayes d'effacer tout ce qu'il y a dans $_POST ; or il il a bien autre chose que les id que tu cherches à effacer.
Une solution (pas élégante, mais on n'est plus à ça près) consiste à tester avec is_numeric si la $key que tu récupères est bien un nombre, donc un id qu'il faut effacer.
Pour en revenir à ton problème de unknown column Supp, il vient du fait que tu essayes d'effacer tout ce qu'il y a dans $_POST ; or il il a bien autre chose que les id que tu cherches à effacer.
Une solution (pas élégante, mais on n'est plus à ça près) consiste à tester avec is_numeric si la $key que tu récupères est bien un nombre, donc un id qu'il faut effacer.
alla123321
Messages postés
25
Date d'inscription
dimanche 20 septembre 2015
Statut
Membre
Dernière intervention
2 octobre 2016
1
21 nov. 2015 à 22:58
21 nov. 2015 à 22:58
Merci beaucoup , j'ai ajouté le test avec is_numeric et ca marche :) Mais as tu une idée comment puis je faire pour ne pas avoir besoin de faire un "refresh" pour voir la liste sans l'étudiant que j'ai supprimé ? :o
Utilisateur anonyme
21 nov. 2015 à 23:11
21 nov. 2015 à 23:11
Tu as mis le traitement du formulaire avec ta requête delete APRÈS l'affichage de la liste.
Donc quand tu cliques sur le bouton "submit", tu affiches d'abord ta liste d'étudiants, et ensuite seulement tu les effaces de la base de données. Mais ça ne change rien à l'affichage, puisqu'il a déjà eu lieu. Tes étudiants sont toujours affichés, il ne disparaîtront que quand tu réafficheras ta page.
Il faut TOUJOURS traiter les formulaires reçus en début de script, et non pas à la fin, pour que l'affichage tienne compte des données du formulaire.
Donc quand tu cliques sur le bouton "submit", tu affiches d'abord ta liste d'étudiants, et ensuite seulement tu les effaces de la base de données. Mais ça ne change rien à l'affichage, puisqu'il a déjà eu lieu. Tes étudiants sont toujours affichés, il ne disparaîtront que quand tu réafficheras ta page.
Il faut TOUJOURS traiter les formulaires reçus en début de script, et non pas à la fin, pour que l'affichage tienne compte des données du formulaire.
alla123321
Messages postés
25
Date d'inscription
dimanche 20 septembre 2015
Statut
Membre
Dernière intervention
2 octobre 2016
1
22 nov. 2015 à 01:03
22 nov. 2015 à 01:03
Alors , même en laissant comme ca mon code je peux réofficher la page après des changements effectués en ajoutant cette ligne sous ma boucle foreach : header('location: monSite.php');
Donc , ma question est résolue . Merci beaucoup de ton aide ! :)
Donc , ma question est résolue . Merci beaucoup de ton aide ! :)
Non, il ne fut pas le faire comme ça. C'est totalement illogique. Tu commences par envoyer une mauvaise page, puis tu provoques une redirection pour recharger la bonne. Alors que tu pouvais directement afficher la bonne page.
De plus, dès que ta liste d'étudiants sera un peu plus longue, cela provoquera une erreur 'headers already sent' et tu reviendras ici demander pourquoi en disant que "ça marchait avant".
De plus, dès que ta liste d'étudiants sera un peu plus longue, cela provoquera une erreur 'headers already sent' et tu reviendras ici demander pourquoi en disant que "ça marchait avant".
19 nov. 2015 à 21:26
Alors , non ce n'est pas sensé être un formulaire mais une liste donc je n'ai pas mis de balise <form>..
Ensuite , ai-je le droit de mettre un bouton submit même si je veux effacer des lignes ? :o
Je vais corriger les espaces :)