Récupérer les données d'une liste php sur une base sql

Fermé
souricette04 Messages postés 12 Date d'inscription jeudi 30 mai 2013 Statut Membre Dernière intervention 3 juin 2013 - 30 mai 2013 à 08:28
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 - 3 juin 2013 à 16:51
Bonjour,

J'ai créé une liste à actualiser (liste de naissance). Les infos sont stockées sur une base sql et le doc est codé en php.
Mon souci est que je n'arrive pas à récupérer le nom des "donateurs" qui sélectionnent un cadeau.
La page se présente sous forme de tableau avec les colonnes suivantes photo, checkbox, nom du cadeau et nom du donateur.

Je récupère Array en guise de nom du donateur...

Merci d'avance de votre aide car j'ai fait le tour des forums et ressorti mes bouquins php sans trouver la lumière.

voici le code de la liste :
$query = "SELECT photo, quantite, cadeau, nom FROM alicia";
$trouve = mysql_query($query);

//On classe les réponses dans un tableau. 
while ($donnees = mysql_fetch_array($trouve))
{
$lien = $donnees["photo"];

?>
<!-- fin de verification des cadeaux présents et sélectionnés dans la BDD -->

<tr>
<td>
<?php 
print ("<img src=\"$lien\" width=\"200\" height=\"200\" align=\"right\"/>"); 
?>
</td>

<td width="10%" align="center">
<?php
	if (empty($donnees["nom"]))
		echo "<input name=\"quantite\" type=\"checkbox\" value=\"".$donnees["cadeau"]."\"/>";
	else 
		echo "";
?>
</td>


<td width="30%">
<?php echo $donnees["cadeau"];?>
</td>

<td width="30%">
<?php
	if (empty($donnees["nom"]))
		echo "<input name=\"donateur[]\" type=\"text\"  />";
	else 
		 echo $donnees["nom"];
?>
</td>
</tr>

<?php
}
mysql_close();
?>
<!-- fin de liste de choix de cadeaux-->


et celui qui est censé récuperer les infos :
$quantite=$_POST['quantite'];
$donateur[]=$_POST['donateur'];

if ($_POST['valider']=="ok") 
	{
		if (($quantite=="")||($donateur==""))
			{
			if ($quantite=="") print ("<div class=\"blanc\"><br/><br/><strong>Vous n'avez rien sélectionné ? <br/><br/>Cliquez sur précédent dans votre navigateur, ou sur le bouton, ci-dessous, pour revenir sur la page de liste de naissance</strong><br/><br/><a href=\"liste.php\"><img align=\"center\" src=\"http://www./alicia/images/bouton_orange.gif\"></a></font></div>");
			if ($donateur=="") print ("<div class=\"blanc\"><br/><br/><strong>Vous n'avez pas indiqué votre nom ?<br/><br/>Cliquez sur précédent dans votre navigateur, ou sur le bouton, ci-dessous, pour revenir sur la page de liste de naissance</strong><br/><br/><a href=\"liste.php\"><img align=\"center\" src=\"http://www.alicia/images/bouton_orange.gif\"></a></font></div>");
			}
		else 
			{
//connection à la base de données
				$bd=connect_bd();
				if($bd<>0)
					{
						//insertion des données
						$selectcadeau = "UPDATE alicia SET quantite=1, nom='$donateur', mail='$mail', date_enregistrement='$date_enregistrement' WHERE cadeau= '$quantite'";

						$trans_cadeau = mysql_query($selectcadeau,$bd); // Requête SQL

						if((!$trans_cadeau))
							{
								die('impossible d\'exécuter la requete :'.mysql_error());
							}
						else
							{
								echo "<div class=\"blanc\"><br /><br /><br /><strong>Nous avons enregistré votre choix.<br /><br /> Si vous avez renseigné une adresse email, vous allez recevoir un message de confirmation à l&#146;adresse communiquée ".$mail.".<br /><br />";
								echo "<br /><br />Pour revenir sur la page d´accueil du site d'Alicia, <a href=\"http://www.alicia\">cliquez ici</a><br /><br /><br />A bientôt<br /><br /><br /></font></div>";
								mail($mail, $sujet1, $html1, $header);
								mail('souricette@alicia.com', $sujet, $html, $header);
							}
					}
				deconnect_bd($bd);
			}
			}
else
	{
		echo '<div>Echec de l&#146;enregistrement, désolé</div>';
		require("liste.php");
	}
?>


20 réponses

Salut,

Sur la deuxième ligne de ton code qui récupère les données :
$donateur[]=$_POST['donateur'];

tu définis la variable $donateur en tant que tableau (Array) avec les crochets.

Bonne journée
0
souricette04 Messages postés 12 Date d'inscription jeudi 30 mai 2013 Statut Membre Dernière intervention 3 juin 2013 1
30 mai 2013 à 14:42
ben justement, je récupère la mention array dans ma base SQL mais pas ce que l'internaute a posté... c'est à dire son nom...
que dois-je faire pour obtenir le nom renseigné par l'internaute à l'intérieur de l'array ?
merci d'avance
0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
30 mai 2013 à 15:29
Salut !

<input name="donateur[]" type="text" />

Le fait de mettre des [] déclare $_POST['donateur'] comme un tableau. On utilise généralement ce systeme quand on veut récupéré des checkbox ou beaucoup de données qui laisse le choix l'utilisateur de les remplir ou non.

Donc essaye avec donateur tout court, cu coup tu peux faire :
$donateur=$_POST['donateur']; // Pas d'erreur
Et donc :
$selectcadeau = "UPDATE alicia SET quantite=1, nom='$donateur', mail='$mail', date_enregistrement='$date_enregistrement' WHERE cadeau= '$quantite'";
n'aura pas d'erreur non plus


0
souricette04 Messages postés 12 Date d'inscription jeudi 30 mai 2013 Statut Membre Dernière intervention 3 juin 2013 1
30 mai 2013 à 15:44
ben non, ca marche pô :-(

maintenant la condition n'est plus remplie et j'ai le message d'erreur correspondant ci-dessous ??
	if ($donateur=="") print ("<div class=\"blanc\"><br/><br/><strong>Vous n'avez pas indiqué votre nom ?<br/><br/>Cliquez sur précédent dans votre navigateur, ou sur le bouton, ci-dessous, pour revenir sur la page de liste de naissance</strong><br/><br/><a href=\"liste.php\"><img align=\"center\" src=\"http://www./alicia/images/bouton_orange.gif\"></a></font></div>");


il considère que donateur n'est pas renseigné alors qu'il l'est.
J'ai retiré les [] dans mon formulaire et ai indiqué $donateur=$_POST['donateur']; dans le fichier de traitement des données ??

une autre idée ?

Merci à vous
0

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

Posez votre question
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
30 mai 2013 à 15:56
Fais voir un print_r($_POST) et dis moi ce qu'il affiche :)


Sinon, pour vérivier les variables envoyées en post, on fait :
if(isset($_POST['blabla']) == !empty($_POST['blabla']))

Tu peux donc avec ce systeme, vérifier tous tes champs dans le if, et redirigé vers la page d'avant si ils ne sont pas rempli.
Exemple :

if(isset($_POST['quantite']) && !empty($_POST['quantite']) && isset($_POST['donateur']) && !empty($_POST['donateur'])) // Les champs sont bien renseignés
{
// Tu fais ton update
}
else
{
header('Location:listenaissance.php');
exit();
}


0
souricette04 Messages postés 12 Date d'inscription jeudi 30 mai 2013 Statut Membre Dernière intervention 3 juin 2013 1
30 mai 2013 à 16:13
C'est bizarre, j'ai insérer le print_r comme tu me l'as demandé et mis une mise en forme (fond blanc police rose)
(
	echo "<div class=\"blanc\"><br/><br/>".print_r($_POST)."</div>";
)
je l'ai mis juste après la condition if ($_POST['valider']=="ok")
mais voici ce que le fichier de traitement m'affiche en noir :
Array ( [donateur] => [quantite] => Porte bébé hamac [mail] => [valider] => ok )

puis en dessous et mis en forme cette fois-ci :
1

Je teste ta proposition de condition et te reviens.

Merci de ton aide.
0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
30 mai 2013 à 16:20
Ok donc avec :
Array ( [donateur] => [quantite] => Porte bébé hamac [mail] => [valider] => ok )
Tu vois bien que donateur est vide, que quantite contient "Porte bébé hamac", que mail est vide également, et que valider contient "ok"

Donc ton problème venait de là, tu ne vérifiais pas bien que tes champs étaient bien rempli.

Donc oui essaye ce que je t'ai proposé, ca devrait déjà être plu propre et correct :)
0
souricette04 Messages postés 12 Date d'inscription jeudi 30 mai 2013 Statut Membre Dernière intervention 3 juin 2013 1
30 mai 2013 à 16:35
alors j'ai inséré ton code de vérification
if ($_POST['valider']=="ok") 
	{
	echo "<div class=\"blanc\"><br/><br/>".print_r($_POST)."</div>";
	if(isset($_POST['quantite']) && !empty($_POST['quantite']) && isset($_POST['donateur']) && !empty($_POST['donateur']))
//		if (($quantite=="")||($donateur==""))
			{
			if ($quantite=="") print ("<div class=\"blanc\"><br/><br/><strong>Vous n'avez rien sélectionné ? <br/><br/>Cliquez sur précédent dans votre navigateur, ou sur le bouton, ci-dessous, pour revenir sur la page de liste de naissance</strong><br/><br/><a href=\"liste.php\"><img align=\"center\" src=\"http://www./alicia/images/bouton_orange.gif\"></a></font></div>");
			if ($donateur=="") print ("<div class=\"blanc\"><br/><br/><strong>Vous n'avez pas indiqué votre nom ?<br/><br/>Cliquez sur précédent dans votre navigateur, ou sur le bouton, ci-dessous, pour revenir sur la page de liste de naissance</strong><br/><br/><a href=\"liste.php\"><img align=\"center\" src=\"http://www.alicia/images/bouton_orange.gif\"></a></font></div>");
			}
		else 
			{
//connection à la base de données
				$bd=connect_bd();
				if($bd<>0)
					{
						//insertion des données
						$selectcadeau = "UPDATE alicia SET quantite=1, nom='$donateur', mail='$mail', date_enregistrement='$date_enregistrement' WHERE cadeau= '$quantite'";

						$trans_cadeau = mysql_query($selectcadeau,$bd); // Requête SQL

						if((!$trans_cadeau))
							{
								die('impossible d\'exécuter la requete :'.mysql_error());
							}
						else
							{
							


et voici ce que j'obtiens...

Array ( [donateur] => Array ( [0] => [1] => [2] => [3] => test [4] => [5] => [6] => ) [quantite] => et l'Audi R8 pour les jours pluvieux [mail] => [valider] => ok )

retour à la case départ... car non seulement cela crée un array, mais en plus, il ne met pas à jour la BDD :-((

qu'est ce que j'ai mal fait ??
0
souricette04 Messages postés 12 Date d'inscription jeudi 30 mai 2013 Statut Membre Dernière intervention 3 juin 2013 1
30 mai 2013 à 16:46
oups, j'ai du aller trop vite (pas mis mon navigateur à jour) car en testant sur firefox voici ce que le print_r affiche :

Array ( [donateur] => [quantite] => SLK 500 cabriolet pour promener Alicia l'été [mail] => [valider] => ok )


1

et toujours pas de mise à jour de la BDD. En revanche, je recois bien le mail d'information m'indiquant que :

a sélectionné SLK 500 cabriolet pour promener Alicia l'été sur la liste de naissance d'Alicia, le 2013-05-30 14:43:40 .

Donc il y a juste le champ donateur qui ne passe pas ??
0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
30 mai 2013 à 16:46
Enlève tes if($quantite == "") et pareil pour donateur.

if(isset($_POST['quantite']) && !empty($_POST['quantite']) && isset($_POST['donateur']) && !empty($_POST['donateur']))
{
echo print_r($_POST);

try{
$bd=connect_bd();
} catch($e){
echo 'erreur de connexion à la bdd';
} // regarde la syntaxe du try catch dans la doc

extract($_POST); // revient à faire $quantite = $_POST['quantite'] et le fais pour donateur et mail

$selectcadeau = "UPDATE alicia SET quantite=1, nom='$donateur', mail='$mail', date_enregistrement='$date_enregistrement' WHERE cadeau= '$quantite'";

$trans_cadeau = mysql_query($selectcadeau,$bd);
if((!$trans_cadeau))

{
die('impossible d\'exécuter la requete :'.mysql_error());
}
}
else
{
echo 'Vous n'avez pas rempli tous les champs, blablabla';
}

0
souricette04 Messages postés 12 Date d'inscription jeudi 30 mai 2013 Statut Membre Dernière intervention 3 juin 2013 1
3 juin 2013 à 01:18
bouhhh...
je ne suis pas sure d'avoir été bien comprise :

Je cherche à isoler et enregistrer une variable = element d'un tableau renseigné par l'internaute.
En effet, quand je fais un print_r je vois le nom posté par l'utilisateur mais la base SQL enregiste :"array" !
De plus, la condition de vérification de remplissage du champ ($donateur) ne fonctionne pas non plus ??
Je présume qu'il faut passer par un foreach ou un while, mais je n'y arrive pas non plus de ce coté...
Quelqu'un pour m'éclairer s'il vous plait.

Merci d'avance aux bonnes ames, je reposte mon code à toutes fins utiles.

$query = "SELECT photo, quantite, cadeau, nom FROM alicia";
$trouve = mysql_query($query);
...
<td width="30%">
<?php
	if (empty($donnees["nom"]))
		echo "<input name=\"donateur[]\" type=\"text\"  />";
	else 
		 echo $donnees["nom"];
?>
</td>
</tr>

<?php
}
mysql_close();
?>
<!-- fin de liste de choix de cadeaux-->


et celui qui est censé récuperer les infos :
$quantite=$_POST['quantite'];
$donateur=$_POST['donateur'];

if ($_POST['valider']=="ok") 
	{
		if (($quantite=="")||($donateur==""))
			{
			if ($quantite=="") print ("<div class=\"blanc\"><br/><br/><strong>Vous n'avez rien sélectionné ? <br/><br/>Cliquez sur précédent dans votre navigateur, ou sur le bouton, ci-dessous, pour revenir sur la page de liste de naissance</strong><br/><br/><a href=\"liste.php\"><img align=\"center\" src=\"http://www./alicia/images/bouton_orange.gif\"></a></font></div>");
			if ($donateur=="") print ("<div class=\"blanc\"><br/><br/><strong>Vous n'avez pas indiqué votre nom ?<br/><br/>Cliquez sur précédent dans votre navigateur, ou sur le bouton, ci-dessous, pour revenir sur la page de liste de naissance</strong><br/><br/><a href=\"liste.php\"><img align=\"center\" src=\"http://www.alicia/images/bouton_orange.gif\"></a></font></div>");
			}
		else 
			{
//connection à la base de données
				$bd=connect_bd();
				if($bd<>0)
					{
						//insertion des données
						$selectcadeau = "UPDATE alicia SET quantite=1, nom='$donateur', mail='$mail', date_enregistrement='$date_enregistrement' WHERE cadeau= '$quantite'";

						$trans_cadeau = mysql_query($selectcadeau,$bd); // Requête SQL

						if((!$trans_cadeau))
							{
								die('impossible d\'exécuter la requete :'.mysql_error());
							}
						else
							{
								echo "<div class=\"blanc\"><br /><br /><br /><strong>Nous avons enregistré votre choix.<br /><br /> Si vous avez renseigné une adresse email, vous allez recevoir un message de confirmation à l&#146;adresse communiquée ".$mail.".<br />";
								echo "<br />Pour revenir sur la page d'accueil du site d'Alicia, <a href=\"http://www.alicia\">cliquez ici</a><br /><br /><br />A bientôt<br /><br /><br /></font></div>";
								mail($mail, $sujet1, $html1, $header);
								mail('souricette@alicia.com', $sujet, $html, $header);
							}
					}
				deconnect_bd($bd);
			}
			}
else
	{
		echo '<div>Echec de l&#146;enregistrement, désolé</div>';
		require("liste.php");
	}
?>


Merci encore, à vous lire
0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
3 juin 2013 à 15:07
La structure que je t'ai donné plus haut est correct, dans le sens algorithmique. Le problème vient donc du formulaire en amont et des données envoyées qui doivent être mal interprétées en php.

Peux tu remetre le code html de ton formulaire stp ? :)
0
souricette04 Messages postés 12 Date d'inscription jeudi 30 mai 2013 Statut Membre Dernière intervention 3 juin 2013 1
3 juin 2013 à 15:25
Tout d'abord, merci de ton suivi : voici le code de mon formulaire :

<form name="liste" method="post" action="reservation_liste.php">
<table class="bordure"  >
<tr>
<td width="30%">
</td>

<td width="10%">
</td>

<td colspan="2" width="40%">
<br/><br/><br/>
Inscrivez votre nom, ci-dessous, pour éviter les cadeaux doublons : 
</td>
</tr>

<!-- verification des cadeaux présents et sélectionés dans la BDD -->
<?php
$bd=connect_bd();
if($bd<>0)
$query = "SELECT photo, quantite, cadeau, nom FROM alicia";
$trouve = mysql_query($query);

//On classe les réponses dans un tableau. 
while ($donnees = mysql_fetch_array($trouve))
{
$lien = $donnees["photo"];
?>
<!-- fin de verification des cadeaux présents et sélectionnés dans la BDD -->

<tr>
<td>
<?php 
print ("<img src=\"$lien\" width=\"200\" height=\"200\" align=\"right\"/>"); 
?>
</td>

<td width="10%" align="center">
<?php
	if (($donnees["quantite"])==0)
		echo "<input name=\"quantite\" type=\"checkbox\" value=\"".$donnees["cadeau"]."\"/>";
	else 
		echo "";
?>
</td>


<td width="30%">
<?php echo $donnees["cadeau"];?>
</td>

<td width="30%">
<?php
	if (empty($donnees['nom']))
		echo "<input name=\"donateur[]\" type=\"text\" />";
	else 
		 echo $donnees['nom'];
?>
</td>
</tr>

<?php
}
mysql_close();
?>
<!-- fin de liste de choix de cadeaux-->




A te lire
Merci encore
0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
3 juin 2013 à 15:30
Je reste persuadé que c'est le : donateur[]
Cela déclare un tableau, pourquoi veux tu mettre un tableau ? Tu veux juste récupéré un nom c'est tout
0
souricette04 Messages postés 12 Date d'inscription jeudi 30 mai 2013 Statut Membre Dernière intervention 3 juin 2013 1
3 juin 2013 à 15:45
C'est un tableau parce que le champ est reproduit plusieurs fois (autant de fois que de cadeau).

De plus, c'est a l'interieur de ce tableau (via un foreach) que je récupére le nom du donateur mais je ne parviens pas à l'isoler pour le transmettre a la base sql.

une autre idee ?
0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
3 juin 2013 à 16:00
Mais c'est normal, je pense que tu comprends pas la logique, ou alors moi qui n'est pas compris ce que tu souhaites faire.

Alors pour moi tu cherches à faire une liste de cadeau que les gens peuvent prendre en charge.

Donc par exemple ton tableau se présente comme ceci :

Photo | quantité | personne
C'est comme ca que tu déclare ton tableau, et enfaite je viens de voir que le rempli comme ca :
Photo | quantité | cadeau | personne
Alors petit problème à ce niveau la

Enfaite j'ai du mal à comprendre ton systeme ... Surtout à ce niveau la :

<?php
	if (($donnees["quantite"])==0)
		echo "<input name=\"quantite\" type=\"checkbox\" value=\"".$donnees["cadeau"]."\"/>";
	else 
		echo "";
?>
</td>


<td width="30%">
<?php echo $donnees["cadeau"];?>
</td>

<td width="30%">
<?php
	if (empty($donnees['nom']))
		echo "<input name=\"donateur[]\" type=\"text\" />";
	else 
		 echo $donnees['nom'];
?>
</td>
</tr>

<?php


Alors si tu pouvais m'expliquer CE QUE TU VEUX FAIRE, et non ce que tu fais dans le code :)

0
souricette04 Messages postés 12 Date d'inscription jeudi 30 mai 2013 Statut Membre Dernière intervention 3 juin 2013 1
3 juin 2013 à 16:21
Je mettre à jour la base sql qui répertorie les cadeaux et le nom des personnes qui les ont sélectionnés.

la ligne de code :
<?php
	if (($donnees["quantite"])==0)
		echo "<input name=\"quantite\" type=\"checkbox\" value=\"".$donnees["cadeau"]."\"/>";
	else 
		echo "";
?>

correspond la checkbox qui apparait ou pas selon qu'elle soit renseignée à 0 ou à 1 (boolean) ; O = lacheckbox s'affiche et reprend le nom du cadeau si celui-ci est sélectionné ; 1 = la checkbox ne s'affiche pas.

Mon problème porte sur le champ donateur qui ne met pas à jour la colonne :"nom" dans la base SQL ou plutot qui indique Array et non pas le nom indiqué.
J'espère avoir été claire.
0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
3 juin 2013 à 16:37
Si tu met donateur[], tu répupères $_POST['donateur'] en tableau, tu en es consiente ? Donc pour récupérer les valeurs il faut faire un foreach dessus.
Tu ne peux pas faire :
$donateur=$_POST['donateur'];
UPDATE from ... set donateur = $donateur
0
souricette04 Messages postés 12 Date d'inscription jeudi 30 mai 2013 Statut Membre Dernière intervention 3 juin 2013 1
3 juin 2013 à 16:47
OK mais comment faire le foreach et récupérer la valeur pour faire l'update ???

J'ai déjà essayé le foreach à plusieurs endroit mais finalement, je ne sais où le placer ni comment récupérer la valeur pour qu'elle soit transmise au moment de l'update.

elle n'apparait que dans le code :
foreach ($donateur as $valeur)
{
echo svaleur
}

puis elle est détruite et l'update ne se fait pas si je fais :
UPDATE from ... nom='$valeur'


c'est précisemment là mon problème.
0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
3 juin 2013 à 16:51
OK mais comment faire le foreach et récupérer la valeur pour faire l'update ???

Je croyais que donateur avait plusieurs valeur ? D'ou le donateur[] donc plusieurs input pour le même cadeau.
SI tu as un input pour un cadeau, donateur tout court et $_POST['donateur'] aura UNE valeur. Donc la ton update ira très bien.
SI tu as plusieurs input pour un cadeau, alros donateur[] et donc tu récupères $_POST['donateur'] sur le quel tu fais un foreach pour avoir toutes les valeurs. Mais dans ce cas la, ton update sera plus compliqué car ta structure de table actuelle ne le permet pas
0