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 :

[Tableaux] Poster un tableau


Sujet :

Langage PHP

  1. #1
    Membre averti Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Points : 306
    Points
    306
    Par défaut [Tableaux] Poster un tableau
    Bonjour, voilà dans une page php je fais un formulaire dans lequel je crée une variable tableau que je remplis, et je voudrais la récupérer sur une autre page.

    Pour cela j'utilise ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo "<input type = 'hidden' name = countAttribute value = $countAttribute>";
    où tablesNames est un tableau. Le problème est que quand je poste la raviable et que j'essaie de la récupérer, le tableau n'est pas celui que je voulais, j'ai tout juste un tableau avec pour éléments les lettres du mot Array.

    Après j'ai essayé autre chose : faire une boucle dans du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for($i = 0 ; $i < sizeof($countAttribute) ; $i++)
         echo "<input type = 'hidden' name = 'countAttribute_'.$i value = $countAttribute[$i]>";
    mais là dans la page de récupération il ne trouve pas les variables postées, par ex $countAttribute_0 me donne juste un undefined Index...

    Comment résoudre mon problème?
    Merci d'avance.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Points : 716
    Points
    716
    Par défaut
    En serializant ton tableau tu peux le passer directement dans un input :
    serialize

    Il te suffit ensuite de faire l'inverse dans ta page de traitement (unserialize).
    Un point fort est que cette méthode conserve les tableaux associatifs

  3. #3
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    Bonjour

    Tu devrai jeter un oeil du coté de serialize, qui va bien t'aider

  4. #4
    Membre averti Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Points : 306
    Points
    306
    Par défaut
    Ce code-ci devrait normalement fonctionner donc non? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo "<input type = 'hidden' name = 'countAttribute' value = serialize($countAttribute)>";
    et pour le récupérer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $countAttribute = unserialize($_POST['countAttribute']);
    c'est ça?

    Sinon pourquoi ne peut-on pas passer un tableau directement?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Points : 716
    Points
    716
    Par défaut
    Je te conseille de faire un urlencode/urldecode en plus de la serialization pour éviter tout problème.

    On ne peut pas passer de tableau car pour html un tableau ca ne veut pas dire grand chose

  6. #6
    Membre éclairé Avatar de haltabush
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    726
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 726
    Points : 835
    Points
    835
    Par défaut
    Toutes les variables passées en POST ou GET sont des strings. C'est plutot logique, puisque quand tu affiche ta source, par exemple, tes valeurs sont du texte, n'est-ce pas?

  7. #7
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    ce code ne peut pas fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<input type = 'hidden' name = 'countAttribute' value = serialize($countAttribute)>"
    En effet, le serialize n'est pas interprété par php, seule la variable l'est. Ce qu'il faut que tu fasse, c'est ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $mon_tableau_serialise = serialize($countAttribute);
    echo "<input type = 'hidden' name = 'countAttribute' value='$mon_tableau_serialise'>"
    Sinon, tu peux simplement concaténer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<input type="hidden" name="countAttribute" value="'.serialize($countAttribute).'">'

  8. #8
    Membre averti Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Points : 306
    Points
    306
    Par défaut
    oui j'ai vu ça marchait pas j'ai modifié tout de suite ça va maintenant. Mais y a encore un problème (le même type).

    Je crée une variable tableau.
    Dans ce tableau je stocke des tableaux (pour avoir un tableau 2D).
    J'ai donc accès aux éléments du tableau par un truc du style .

    Pour le poster je le sérialize, je le désérialise dans la page de réception, mais là quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monTableauDésérializé[$i][$j]
    ça ne fonctionne pas, j'ai un undefined offset...

  9. #9
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    le mieux que je puisse te conseiller, c'est de faire un print_r de ton tableau avant serialisation, et un print_r après désérialisation, histoire de voir les différences

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Points : 716
    Points
    716
    Par défaut
    J'ai eu l'occasion d'utiliser cette méthode avec des tableaux associatifs de 3, 4 dimensions et je n'ai eu aucun souci.

    Le problème ne vient pas de la méthode en elle meme a mon avis

  11. #11
    Membre averti Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Points : 306
    Points
    306
    Par défaut
    Je me suis trompé, en fait je ne créais pas vraiment de tableau assosiatif : voici ce que je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    boucle sur i
        boucle sur j
             echo "<input type='checkbox' name='check'.'_'.$i.'_'.$j >";
    et dans la page de récupération quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    boucle sur i
        boucle sur j
             echo $_POST['check'.'_'.$i.'_'.$j];
    ça marche pas, j'ai undefined index...

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Points : 716
    Points
    716
    Par défaut
    Une checkbox n'envoie son information que si elle est cochée.

    Si l'utilisateur ne l'a pas coché tu ne recevras pas le post correspondant.
    D'autre part attention à ta concaténation tu mélanges guillemets et quotes ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    echo "blablabla name='check'.'_'.$i.'_'.$j >";
    //Ca ne peut pas marcher ! 
    echo "blablabla name='check_".$i."_".$j."' >";

  13. #13
    Membre averti Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Points : 306
    Points
    306
    Par défaut
    Bon poster des tableaux à deux dimension ça marche pas quand même, le créer ça marche et tout, mais une fois posté (par sérialisation), toutes les cases du tableau contiennent va chaine Array... Pas cool.

    Ah oui, et sérialiser 2 fois un tableau 2D ne fonctionne pas (j'ai naivement essayé lol)

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Points : 716
    Points
    716
    Par défaut
    Il va quand meme falloir m'expliquer comment j'ai réussi à passer des tableaux a plusieurs dimensions avec cette méthode quand meme

    Montre nous ton code c'est peut etre une erreur mineure.

  15. #15
    Membre averti Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Points : 306
    Points
    306
    Par défaut
    Le voici :

    Ici $attributesNames est un tableau 2D avec des index i,j (pas associatif quoi lol).
    Voici le code pour le postage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $attnames = serialize($attributesNames);
    echo "<input type = 'hidden' name = attributesNames value = $attnames>";
    Et le code de résupération :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $attributeNames = unserialize($_POST['attributesNames']);
     
    foreach($attributeNames as $attname)
    {
    	foreach($attname as $value)
    		echo $attname." ";
    	echo "<br>";
    }
    Et voicice que ça affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Array Array Array
    Array Array Array Array Array Array Array Array
    Array Array Array Array Array Array Array Array
    Array Array Array
    Array Array Array
    Array Array Array
    Rq : le tableau a bien les bonnes tailles en ligne, colonne, ce sont juste els valeurs qui ont été perdues.

  16. #16
    Membre averti Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Points : 306
    Points
    306
    Par défaut
    Bon ça va j'ai résolu le problème de manière pas propre en postant chaque élément de mon tableau avec un hidden de nom 'mavariable_'.$i.'_'.$j et ça marche.

  17. #17
    Membre éclairé Avatar de haltabush
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    726
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 726
    Points : 835
    Points
    835
    Par défaut
    Attend, tu peux revenir au serialize!
    C'est juste dans ton echo que tu as fait une erreur : tu fait un foreach (tableau as valeur) et tu fait un echo de tableau... forcément ça t'afficher array ^^
    LEs prochaines fois, utilise plutot la fonction print_r, ca marche mieux

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Points : 716
    Points
    716
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $attnames = urlencode(serialize($attributesNames));
    echo "<input type = 'hidden' name = 'attributesNames' value = '$attnames' >";
    Je rajoute urlencode pour éviter tout problème, et des quotes dans le input

    Ensuite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $attributeNames = unserialize(urldecode($_POST['attributesNames']));
     
    foreach($attributeNames as $attname)
    {
    	//$attname est un tableau puisqu'il correspond à une ligne du tableau à deux dimensions !!!
                foreach($attname as $name => $value)
                {
    	       //mon tableau est associatif, je récupère donc le nom de l'indice et la valeur correspondante
                        echo $name." : ".$value;
    	       echo "<br>";
                }
    }
    Et la normalement aucun problème.

  19. #19
    Membre averti Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Points : 306
    Points
    306
    Par défaut
    Ouais ça passe merci

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

Discussions similaires

  1. [Tableaux] poster un tableau???
    Par samplaid dans le forum Langage
    Réponses: 2
    Dernier message: 16/03/2006, 15h59
  2. Réponses: 11
    Dernier message: 09/11/2005, 13h59
  3. [Tableaux] submit un tableau de donnee
    Par naourass dans le forum Langage
    Réponses: 6
    Dernier message: 09/11/2005, 10h05
  4. [Tableaux] tri de tableau
    Par rdams dans le forum Langage
    Réponses: 19
    Dernier message: 08/11/2005, 13h46
  5. Réponses: 3
    Dernier message: 26/09/2005, 22h24

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