Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

php pour les nul ( suite )

5 réponses
Avatar
1ternaute
Le livre propose la construction dynamique de boutons radio ( programe
8.10 ).

J'ai un programe buildRadio.php qui affiche :

Quel Type d animal vous interesse ?

Choisissez un animal dans cette liste et Valider :
Chat
Cheval ( je selectionne ce bouton radio)
chien
Dragon <Validez>

Le resultat est recupere par le programe processform.php qui affiche :

Selection = Cheval

### Jusque la ca marche, ensuite le livre propose ensuite la
construction dynamique de cases a cocher ( programe 8.11 ), et la je
n'arrive pas a afficher le resultat.

J'ai un programe buildCheckbox.php qui affiche :

Quel Type d animal vous interesse ?

Choisissez un animal ou plusieurs dans cette liste et Valider :
Chat ( je selectionne cette case )
Cheval
chien ( je selectionne cette case )
Dragon <Validez>

Le resultat est recupere par le programe processform.php qui affiche :

Selection = Chien

### En fait j'ai toujours la case cochee la plus 'basse', j'ai esssaye
toutes les explication du bouquin, mais c'est 'bourre' de fautes, et j'y
arrive pas.

Quelqu'un peut il m'aider a visualiser le resultat quand je coche
plusieurs cases ?


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++


*****************
-* buildRadio.php *-
*****************


<?php
/* Program name: buildRadio.php
* Description: Program displays a list of radio
* buttons from database info.
*/
echo "<html>
<head><title>Types d animaux</title></head>
<body>";
$user="root";
$host="localhost";
$password="";
$database = "AniCata";

$connection = mysql_connect($host,$user,$password)
or die ("couldn't connect to server");
$db = mysql_select_db($database,$connection)
or die ("Couldn't select database");
$query = "SELECT DISTINCT animalType FROM animal
ORDER BY animalType";
$result = mysql_query($query)
or die ("Couldn't execute query.");

echo "<div style='margin-left: .5in'>
<p>&nbsp;
<p><b>Quel Type d animal vous interesse ?</b>
<p>Choisissez un animal dans cette liste et Valider :\n";

/* create form containing radio buttons */
echo "<form action='processform.php' method='POST'>\n";

while ($row = mysql_fetch_array($result))
{
extract($row);
echo "<input type='radio' name='Selection'
value='$animalType'>$animalType\n";
echo "<br>\n";
}
echo "<p><input type='submit' value='Valider'>
</form>\n";
?>
</div></body></html>


*******************
-* buildCheckbox.php *-
*******************


<?php
/* Program name: buildCheckbox.php
* Description: Program displays a list of
* checkboxes from database info.
*/
echo "<html>
<head><title>Types d animaux</title></head>
<body>";
$user="root";
$host="localhost";
$password="";
$database = "AniCata";

$connection = mysql_connect($host,$user,$password)
or die ("couldn't connect to server");
$db = mysql_select_db($database,$connection)
or die ("Couldn't select database");
$query = "SELECT DISTINCT animalType FROM animal
ORDER BY animalType";
$result = mysql_query($query)
or die ("Couldn't execute query.");

echo "<div style='margin-left: .5in'>
<p>&nbsp;

<p><b>Quel Type d animal vous interesse ?</b>
<p>Choisissez un animal ou plusieurs dans cette liste et Valider :\n";

/* create form containing checkboxes */
echo "<form action='processform.php' method='POST'>\n";

while ($row = mysql_fetch_array($result))
{
extract($row);
echo "<input type='checkbox' name='Selection'
value='$animalType'>$animalType\n";
echo "<br>\n";
}
echo "<p><input type='submit' value='Valider'>
</form>\n";
?>
</div></body></html>


*****************
-* processform.php *-
*****************

<?php
/* Script name: processform.php
* Description: Script displays all the information passed
* from a form.
*/
echo "<html>
<head><title>Customer Address</title></head>
<body>";
foreach ($_POST as $field => $value)
{
echo "$field = $value<br>";
}
?>
</body></html>

5 réponses

Avatar
1ternaute
Bon, ca y est, j'ai trouve, dans le programe buildCheckbox.php,
la ligne :
echo "<input type='checkbox' name='Selection'
value='$animalType'>$animalTypen";

devient

echo "<input type='checkbox' name='Selection[$animalType]'
value='$animalType'>$animalTypen";


et dans le programe processform.php,
Je rajoute ce code apres la ligne :
echo "$field = $value<br>";

#########################
echo "<p>";

$tablo = $value;

echo "cles :<br>";
print_r(array_keys($tablo));
echo "<p>";

echo "valeurs :<br>";
print_r(array_values ($tablo));
echo "<p>";

echo "J'ai trouve chat ?<br>";
if (in_array ("Chat", $tablo))
{
print "Oui";
}
else print "Non, pas trouve Chat !";
Avatar
dmetzler
Le bouquin devrait plutôt s'appeler livre nul pour PHP... ;-)

Alors la première erreur provient de la construction des checkbox :

echo "<input type='checkbox' name='Selection'

devrait devenir

echo "<input type='checkbox' name='Selection[$animalType]'

En fait dans ta requête POST, tu va générer un tableau Selection qui
va contenir test valeurs contenues.

Ensuite dans le processForm, il faut faire autrement :

foreach ($_POST['Selection'] as $field => $value)
{
echo "$field <br/>";
}

Il faut itérer sur le tableau $_POST['Selection'] et afficher toutes
les clés (ou les valeurs dans ce cas précis).

Pour info ton tableau poste contient cela :

Array ( [Selection] => Array ( [chat] => chat [cheval] => cheval ) )
chat



Enfin, je recommande souvent de préférer la variable $_REQUEST à la
variable $_POST. $_REQUEST contient la réunion de $_GET et $_POST,
donc tu n'as plus à te soucier de la méthode utilisée dans le
formulaire
Avatar
Antoun
L'erreur est que toutes les cases à cocher portent le même nom :
"Selection". Du coup, lors de la transmission, chaque case cochée écrase
la précédente, et tu as effectivement seulement la case la plus "basse".
Avatar
VooDoo
le probleme est dans la construction de ta checkbox...
Toute les cases s'appelle Selection...
Alors quelquesoit celle que tu coches tu ne pourras en recuperer qu'une...
Enfin j'suis pas un expert, mais a priori j'appellerai ma select box comme
ca:
$i++;
name='Selection'". $i;

A+
VooDoo
Avatar
1ternaute

Ensuite dans le processForm, il faut faire autrement :

foreach ($_POST['Selection'] as $field => $value)
{
echo "$field <br/>";
}

Il faut itérer sur le tableau $_POST['Selection'] et afficher toutes
les clés (ou les valeurs dans ce cas précis).

Pour info ton tableau poste contient cela :

Array ( [Selection] => Array ( [chat] => chat [cheval] => cheval ) )
chat


Ha ben OUI ! C'etait si simple ;o) ! Ca va bien m'aider a visualiser
(pour 'debugguer' mes erreurs) ce que je recupere comme donnees, merci !

Je recupere un tableau1, que je met dans un tableau2 ($_POST), et dans
chaque case du tableau2, j'ai un couple [case,valeur] du tableau1 ?