Récupération de valeur - foreach - php

Fermé
Roxane - 20 janv. 2014 à 00:51
 Roxane - 20 janv. 2014 à 18:45
Bonsoir,

Je bloque sur un exo de php (je vous rassure, il n'est pas a faire pour demain). Le but est simple, récuperer des valeurs provenant d'un formulaire et les afficher a l'aide d'un foreach. Voici mon formulaire :
<form action="jeu.php" method="GET">
<table>
<tr>
<td>Login</td>
<td><input type=text name=login></td>
</tr>
<tr>
<td>Password</td>
<td><input type=password name=password></td>
</tr>

<tr>
<td>Colonne</td>
<td>
<SELECT name="colonne">
<?php
$colonne = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); ?>


<?php foreach ($colonne as $num => $element){ ?>
<option value="<?php echo $num; ?>"><?php echo $num; ?></option>
<?php } ?>
</SELECT>
</td>
</tr>
<tr>
<td>Ligne</td>
<td>
<SELECT name="ligne">
<?php

$ligne = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); ?>


<?php foreach ($ligne as $num => $element){ ?>
<option value="<?php echo $num; ?>"><?php echo $num; ?></option>
<?php } ?>
</SELECT>


</td>
</tr>
<tr>
<td>
<input type="submit" value="send">
</td>
</tr>
</table>
</form>




ainsi que jeu.php

<?php
/*$login = $_GET['login'];
$password = $_GET['login'];
$ligne = $_GET['ligne'];
$colonne = $_GET['colonne'];

echo "Bonjour $login".". Votre mot de passes est : $password";
echo "vous avez selectionné la ligne ".$ligne." et la colonne ".$colonne.".";
*/

foreach ($_GET['login'] as $user)
{
echo "Bonjour $user";
}


?>

Celui en commentaire fonctionne, mais j'aimerai bien utiliser et surtout comprendre l'utilité et l'utilisation du foreach... J'bloque un peu, malgré les tutos que j'ai pu lire.


Cdlt
A voir également:

2 réponses

Salut,

votre référence ultime en PHP:

http://php.net/manual/fr/control-structures.foreach.php

---> si tu ne connais pas, si tu cherches comment tout est là dedans le manuel tu devra apprendre à utiliser.

foreach comme moult instructions en programmation vient de l'anglais: for each et se traduirais par "pour chaque".

foreach c'est plus qu'une instruction et c'est une boucle logique.
Il en existe plusieurs et ce sont des éléments cruciaux de la logique et de l'algorithmie. Boucles conditionnelle, ils(ces éléments logique comme dans la logique mathématique et binaire de Booles, prêtez pas attention à cette parenthéses si les math de Booles vous dise rien) sont aussi appelés tests logique même s'il y a une petite différence entre les 2.
Une boucle conditionnelle est composé d'un (au moins) test logique.

Le logique c'est simple, celle là en tout cas. Elle est à la portée des grosses calculettes que nous appelons ordinateur qui utilisent un système binaire de notation/mémorisation.

Revenons à votre code(que j'ai indenté un peu plus pour bien différencier chaque élément de la structure du langage) avant que je vous perde nous allons repérer le test et la boucle:

<?php

foreach ($ligne as $num => $element)
/*******POUR CHAQUE **********
******** VALEUR DU TABLEAU $ligne ***************
*********le tableau est donc parcouru de sa première à dernière valeur****

********* as(en anglais tel que) $num**************
**********ON RETIENT LA VALEUR DANS LA VARIABLE $num
************* =>$element**********************
***avec comme pointeur(le compteur du tableau, aussi appelé clé) $element**
*/

/*---------------------Voilà la première partie de notre boucle---------*/
/*---------------------la 1ere partie va indiquer les conditions de cette boucle:--*/
/*---la condition(et le nombre de tours de boucle) correspond ici à ce que chaque valeur du tableau soit parcourues---------------*/

/*----------------Il y aura donc 15 tours de boucle, 3 si notre tableau avait 3 valeurs, 17380 tours de boucle s'il y a 17380 valeurs dans notre tableau---*/
/*--------------------Donc la première partie du foreach donne la condition correspondant au nombre de répétitions(valeurs retenus dans le tableau) des instructions qui seront situées entre les accolades----------*/


{ ?>

/*----entre les accolades il y aura donc pour chaque tour de boucle: --*/

<option value="<?php echo $num; ?>"><?php echo $num; ?></option>
/*--- l'affichage d'une item de liste déroulante ayant la valeur $num(donc la valeur retenue dans le tableau pour chaque tour en value et entre les 2 balises <option>----*/


/* on ferme l'accolade---*/
<?php
}

?>
0
Bon j'espére que c'était compréhensible. Maintenant on va varier les exemples et changer les valeurs:

Ce que la boucle conditionnelle nous a permit de faire et d'automatiser l'écriture de balises html redondantes et ennuyeuses à taper à la main. C'est faisable s'il n'y a que 15 valeurs mais impossible dés qu'on dépasse la 100aine.
<select>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
....etc jusqu'à 15
</select>

Imaginez le temps gagné si c'est une liste déroulante qui doit indiquer le jour de naissance.
Vous pouvez la faire: vous ajouter dans votre tableau $ligne les valeurs jusqu'à 31.
hmm $ligne a servit je vais utiliser qqchose de plus approprié:


<?php
$jours_du_mois = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,13,14,15,16,17,18,19,20,21,21,23,24,25,26,27,28,29,30,31);
/* on retrouve notre boucle avec sa condition(passée à 31 tour) */
<?php foreach ($jours_du_mois as $num => $element){ ?>
<!----------------- le HTML =31 fois les jours dans l'ordre,chaque choix de la liste ----------------->
<option value="<?php echo $num; ?>"><?php echo $num; ?></option>

<?php
} // fermeture de la boucle de répétition
?><!---------------- FERMETURE DU CODE PHP -->
</SELECT> <!-------FERMETURE DE LA LISTE DEROULANTE --------->

/:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Même chose avec uniquement le PHP

<?php
$jours_du_mois = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,13,14,15,16,17,18,19,20,21,21,23,24,25,26,27,28,29,30,31);

php foreach ($jours_du_mois as $num => $element){
?>
<option value="<?php echo $num; ?>">
<?php echo $num; ?>
</option>
<?php
}
0
Mais je vais me permettre d'aller plus loin maintenant que vous êtes au courant pour les boucles. Je voudrait indiquer l'année de naissance, un choix de 1910 à 2010.
Si je fais un tableau il faudrait que je tapes tous les nombres de 1910 à 2010?

le manuel sur les tableaux peut servir:
http://us1.php.net/manual/fr/function.array.php
Nous pouvons voir que nous pouvons facilement accéder aux éléments du tableau en utilisant la notation entre crochet comme ceci:

$tableau[0]="1"; // entre les crochets le numéro d'ordre des valeurs qui commence par 0
$tableau[55]="56" // ainsi 55 dans les crochets indique la 56ème valeur du tableau(compte à partir de zéro ne pas oublier).
Cette façon de faire permet de mettre une seule valeur à la fois dans le tableau, cela va nous servir.

On va pas taper 100 nombres qui se suivent , l'informatique est censée nous rendre la vie plus simple(si ce n'est pas le cas le programme est bon à jeter) et
on a des boucles en programmation:

foreach est une boucle qui nécessite un tableau en condition Mon tableau étant le résultat il ne peut pas être ma condition, je vais utiliser une autre boucle logique:

la boucle WHILE (veut dire "tant que" en angliche)
http://php.net/manual/fr/control-structures.while.php

// je crée ma variable qui sert de compteur, je vais commencer du nombre 1.
$compteur = 0;

// je crée un tableau pour les chiffres des années pour l'instant il sera vide
$liste_annee= new array();
// étudions la condition logique:
while ($compteur < 101)
/* TANT QUE $compteur EST STRICTEMENT INFERIEUR A 101(symbole < on en revient au math)*/
/* on fait ce qui SUIT ENTRE LES ACCOLADES ***********/
{
// POUR REMPLIR LE TABLEAU

$liste_annee[$compteur]=$compteur+1910
/* $compteur va se répéter 100 fois de 1 à 100 compris et à chaque fois nous lui ajoutons une nouvelle valeur*/
/*---------------- au tour 1 de la boucle $liste_annee[0]=0+1910; ---------------------
--------------------- tour 2 $liste_annee[1]=1+1910; -----------------------------------
--------------------- tour 68 $liste_annee[67]=67+1910; -----------------------------------
--------------------- dernier tour 101ème $liste_annee[100]=100+1910; -----------------------------------
*/
/*
et bien sûr si nous affichons le contenu du tableau à chaque tour de la boucle WHILE celui ci sera incrémenté de 1(incrémenté= on ajoute une valeur de façon cyclique, comme dans une boucle*/

echo $liste_annee[$compteur];
echo ("<br/>");


// affichera 1910 à 2010 avec un saut de ligne à chaque fois
}



Je pense les autres structures conditionnelles(qui ne sont pas toutes des boucles) sera le sujet de votre prochain cours.
Bon apprentissage.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


Uniquement la boucle while:

$liste_annee= new array();
while ($compteur < 101)
{
$tableau[$compteur]=$compteur+1910
echo $liste_annee[$compteur];
echo ("<br/>");
}
0
Wow. J'suis époustouflé du mal que vous vous êtes donné pour me répondre. C'est super claire, je viens de finir la lecture de vos poste et plein de notions s'éclaire (plein de possibilités se présentent également). Un immense merci ! Ca me fait quelque peu rire de me dire qu'un anonyme prend mieux le rôle de ma prof que ma prof elle même ! J'ai encore envie de vous remercier !
j'espere que vous verrez ce message :)



Très cordialement,
Roxane
0