Formulaire HTML et PHP Boucle foreach

hx.jonathan

WRInaute discret
Salut à tous, :D

Mon problème est assez classique mais je ne trouve pas d'exemple clair et bien expliqué pour me sortir de là. Voici donc le but :
je créer une galerie photos avec des albums.
Le formulaire qui me pose problème est celui permettant à l'utilisateur de modifier le nom des albums.

J'affiche donc un formulaire avec un input pour le nouveau nom (name='data[nouveaunom]') ET un input HIDDEN pour le nom actuel.

Sur la même page j'aimerais donc récupérer le couple ancien nom - nouveau nom en faisant une boucle.

Voici à quoi ressemble mon formulaire


Code:
echo '<FORM method="POST" action="Admin.php?page=galerie_001_02">';

$affnom = mysql_query("SELECT * FROM Album ORDER BY id_album")or die(mysql_error());
		while($row4 = mysql_fetch_array($affnom)){
		
		$album_name=$row4['album_name'];//Ancien nom avec accent
		$ancien_nom_modifie=$row4['album_dossier'];//Ancien nom MODIFIE caractères spéciaux
		
		echo'<p>Nom actuel : " <strong> '.$album_name.'</strong> " Nouveau nom : <INPUT type="text" name="data[nouveaunom][]" size=30></input><INPUT type="hidden" name="data[nomactuel][]" size=30 value='.$album_name.'></input></p>';
		
		}

echo '<p><INPUT type="submit" value="Confirmer"></p>';
echo '</FORM>';

Et voici comment j'essaie de récupérer mes valeurs :

Code:
if(isset($_POST)) 
{

		foreach($_POST['data']['nouveaunom'] as $index=>$nouveaunom)
		{
			if(!empty($nouveaunom))
			{
				
					echo  $nouveaunom.' - ';
		
						foreach($_POST['data']['nomactuel'] as $index2=>$valeur_actuel)
						{
					
						
						echo  $valeur_actuel;
						
						echo '<br/>';
						}	
				
							
			}
			
			
		}

}

2 questions :

1) est-ce que la manière dont je note data[] dans mon formulaire est correcte pour la récupération des données

2) comment dois-je procéder au niveau des boucles foreach ?

D'avance merci à tous.

John :D
 

jcaron

WRInaute accro
Pas un pro du php, donc je ne sais vraiment pas si les notations xxx[toto][] ou xxx[][toto] dans les noms des champs sont supportées, et j'ai la flemme d'aller vérifier, mais tu sais, toute la doc de php est en ligne sur www.php.net :)

La solution qui me semble la plus simple (et la plus sûre), c'est de numéroter tes champs. Genre nouveau_nom_1, nouveau_nom_2, etc. et pareil pour ancien_nom. Encore mieux, utilise l'id (id_album), comme ça tu n'as même pas besoin de mettre le champ hidden, et tu vas t'éviter toutes sortes de problèmes par la suite. Donc '<input type="text" name="nouveau_nom_'.$id_album.'">' etc. Et tu fais la même boucle lors du traitement du formulaire que lors de son affichage...

Jacques.
 

Sullyvan

WRInaute discret
bonjour, la syntaxe du formulaire est correcte, par contre au niveau du php si tu fais comme tu as mis tu vas afficher tous les nouveaux nom pour tous les anciens.. (genre ancien1 - nouveau1 nouveau2 nouveau xx, ancien2 nouveau 1 nouveau 2 nouveau xx).

Ce qu'il faut faire c'est une seule boucle foreach et utiliser l'index de ancien pour trouver le nouveau correspondant, ça donnerais un code comme ça:
Code:
if(isset($_POST))
{

      foreach($_POST['data']['nouveaunom'] as $index=>$nouveaunom)
      {
         if(!empty($nouveaunom))
         {            
               echo  $nouveaunom.' - '.$_POST['data']['nomactuel'][$index'];
                echo '<br/>';
           }      
      }

}
 

Discussions similaires

Haut