IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Récupérer 2 valeurs form HTML dans array


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 11
    Points : 5
    Points
    5
    Par défaut Récupérer 2 valeurs form HTML dans array
    Salut à tous,

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    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

  2. #2
    Membre confirmé Avatar de guigo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 612
    Points : 576
    Points
    576
    Par défaut
    Salut,
    Non tu ne peut pas passer le tableau comme ca....met au moin un $ devant data :-)....
    Tu peux passer un tableau dans le name, mais c'est assez tordu.
    Une solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    //pour le form
    echo <input type=\"text\" name=\"".$Ancien."_".$Nouveau."\" value=\"".$IdForm."\" >";
     
     
    //recuperation
    foreach($_GET as $K=>$V){
        if(is_numeric($V)){
             $TabK=explode("_",$K);
             $Old=$TabK[0];
             $New=$TabK[1];
        }
    }
    Guigo

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    salut,

    le $IdForm il sert à quoi dans ton exemple ?

  4. #4
    Membre confirmé Avatar de guigo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 612
    Points : 576
    Points
    576
    Par défaut
    A savoir quelle repertoire est modifié...
    D'ailleur pour l'utilisateur tu peux mettre $Ancien
    (cela suppesera que tu ne peut pas avoir des repertoires ayan le meme nom, car tu fera ta modifie en fonction du nom...)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 453
    Points : 550
    Points
    550
    Par défaut
    Cela supposera aussi que tu ne pourras pas avoir des input ayant une valeur numérique.

    Edit:

    Citation Envoyé par guigo Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    //pour le form
    echo <input type=\"text\" name=\"".$Ancien."_".$Nouveau."\" value=\"".$IdForm."\" >";
     
     
    //recuperation
    foreach($_GET as $K=>$V){
        if(is_numeric($V)){
             $TabK=explode("_",$K);
             $Old=$TabK[0];
             $New=$TabK[1];
        }
    }
    Je vois pas trop l'intérêt, à chaque passage sur le foreach on attribue un valeur à $Old et $New différente.

  6. #6
    Membre confirmé Avatar de guigo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 612
    Points : 576
    Points
    576
    Par défaut
    Tu peux creer des cles plus compliquées... Ca c'est pas un pb

    Un post ici qui passe un tableau dans les input, a priori ca marche bien aussi :
    http://www.developpez.net/forums/d82...ox-indefinies/

    La creation des var n'a aucun interet, c'etait juste pourmontrer comment recuperer ces valeurs...

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    J'ai un peu regarder ce post mais y a un truc que je comprends pas. L'attribut value, c'est quand même ce qui sera affiché dans la zone de texte par défaut, c'est bien ça ?

    Dans mon exemple, on est d'accord que je dois avoir une zone de texte vide (zone ou l'utilisateur mettre le nouveau nom de l'album photo) mais que je dois pouvoir transmettre 2 valeurs à la page suivante (ancien nom et nouveau nom).

    Donc concrètement, pourriez-vous me donner un petit exemple. J'avoue que c'est pas super limpide pour moi. Désolé.

    Merci bcp.

    John

  8. #8
    Membre confirmé Avatar de guigo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 612
    Points : 576
    Points
    576
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    //pour le form
    echo <input type=\"text\" name=\"".$Ancien."_".$Nouveau."\" value=\"\" >";
    echo <input type=\"submit\" name=\"Maj\" value=\"modifier\" >";
     
    //recuperation
    foreach($_GET as $K=>$V){
        if($K!="Maj"){
             $TabK=explode("_",$K);
             $Old=$TabK[0]; 
             $New=$TabK[1];
            $Sql="UPDATE ... SET DirName=\"".New."\" WHERE DirName=\"".$Old"\";
            ...
        }
    }

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Et est-ce qu'il y a moyen de faire ça sur une série de zone de texte ? Car dans mon cas, je nombre de input dépendra du nombre d'album que l'utilisateur aura crée.

    Dans ton exemple, tu utilise le "name" du bouton modifier. Tu l'appelle Maj. Mais donc c'est avec Maj que tu devrais récupérer sa valeur , non ?

    J'ai l'impression d'être un peu perdu des fois.

    REM: je peux utiliser la méthode POST pour récupérer mes valeurs, non ?


    John

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Un exemple en partant de ton idée de départ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <input type="hidden" name="truc[old][]" value="old1" />
    <input type="text" name="truc[new][]" />
    <input type="hidden" name="truc[old][]" value="old2" />
    <input type="text" name="truc[new][]" />
    Pour gérer ce genre de cas, tu peux oublier "foreach". Une simple boucle "for" est beaucoup plus efficace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $c = count( $_POST['truc']['old'] );
    for( $i = 0 ; $i < $c ; $i++ ){
    	echo 	'Ancien : ' . 
    		$_POST['truc']['old'][ $i ] . 
    		'<br />Nouveau : ' . 
    		$_POST['truc']['new'][ $i ] . 
    		'<br />' ;
    }

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Ça a l'air de marcher. Merci bcp. Je check encore avant de mettre le sujet à RÉSOLU.

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 11
    Points : 5
    Points
    5
    Par défaut


    Ca marche bien mais si mon formulaire est vide, il m'affiche quand même des infos. Comment puis-je tester que le champ est vide ? Et dans ce cas , ne rien afficher du tout ?

    J'ai testé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    if (isset($_POST['data']['nouveaunom']))
    {
    				if (!empty($_POST['data']['nouveaunom'])) 
    				{
    				$c = count( $_POST['data']['nouveaunom'] );
     
     
     
    							for( $i = 0 ; $i < $c ; $i++ )
    							{
    							echo 'Ancien nom : ' . $_POST['data']['nomactuel'][ $i ];
    							echo'<br/>';
    							echo 'Nouveau nom : ' . $_POST['data']['nouveaunom'][ $i ];
    							echo'<br/>';
    							echo'<br/>';
    							}	
     
    				}
    }
    Mais ça ne marche pas . Il m'indique quand même Ancien nom et nouveau nom même si le formulaire est vide.

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    C bon je viens de résoudre le problème. Merci à tous c'est nickel.

    Y a rien à faire, ce forum c'est vraiment un des plus efficaces.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/05/2011, 16h28
  2. Ajouter un Form HTML dans une WEBFORM
    Par Sophie84 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 04/04/2007, 15h47
  3. DOS - Récupérer la valeur de hostname dans une variable
    Par f1vincent dans le forum Développement
    Réponses: 2
    Dernier message: 18/10/2006, 15h43
  4. Comment récupérer la valeur de Expr1 dans une requête ?
    Par Tchupacabra dans le forum Access
    Réponses: 2
    Dernier message: 19/12/2005, 15h16
  5. Récupérer des valeurs de checkbox dans MySQL
    Par digger dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 05/09/2005, 14h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo