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

PHP & Base de données Discussion :

Tableaux passés dans $_POST [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 6
    Par défaut Tableaux passés dans $_POST
    Je suis nouveau sur ce forum et en plus c'est pratiquement la première fois que j'utilise un forum. Merci de votre indulgence et de votre aide.

    Je bloque depuis plusieurs jours sur un problème bizarre.
    Je développe, en amateur, sur mon PC perso qui tourne sous XP, une application en PHP/MySql. J'ai installé une version ancienne de EasyPHP (avec PHP 4.3.3) pour rester proche de la version PHP (4.3.2) du serveur intranet, sous unix, de ma boite sur lequel l'application doit tourner. Tout cela a peut-être son importance car ce qui fonctionne sur mon PC ne marche pas sur le serveur.

    Voilà ce que je fais :
    Je lis dans la BDD la table type_sortie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $donnees_types_sortie = mysql_query("
    	SELECT *
    	FROM type_sortie
    ");
    Dans un formulaire utilisant la méthode POST, Je crée ensuite une boucle pour afficher une série de cases à cocher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    while($ligne_type_sortie = mysql_fetch_assoc($donnees_types_sortie)) {
    	echo '<input type="checkbox" name="sorties[]" value="'.$ligne_type_sortie['id_type_sortie'].'" />'.$ligne_type_sortie['nom_type_sortie'] ;
    }
    Quand je clique sur le bouton de type submit de mon formulaire, sur mon PC je récupère bien dans $_POST un tableau nommé sorties avec autant d'éléments qu'il y avait de cases cochées dans le formulaire. Voici ce que donne un echo print_r($_POST);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $_POST : Array
    (
        [sorties] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
            )
    )
    En revanche si je fais la même chose sur le serveur je récupère dans $_POST un tableau vide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $_POST : Array
    (
        [sorties] => Array
    )
    Quelqu'un a-t-il une idée sur l'origine de ce problème?

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    En revanche si je fais la même chose sur le serveur je récupère dans $_POST un tableau vide
    Ce n'est même pas un tableau vide que tu récupères, mais la chaîne représentant le tableau, soit littéralement "Array".
    Y'a-t-il un traitement intermédiaire ?

    Peux-tu tester chez toi et sur la serveur de ta boite un script tout simple tel que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <form>
    <input type="checkbox" name="fruits[]" value="Pomme"> Pomme
    <input type="checkbox" name="fruits[]" value="Fraise"> Fraise
    <input type="submit">
    </form>
    <?php if ( isset($_GET['fruits']) ) print_r($_GET['fruits']) ?>
    ... et nous dire s'il y a une différence de comportement ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 6
    Par défaut Problème avec les tableaux passés dans $_POST
    Merci d'avoir répondu si rapidement.
    J'ai fait le test sur mon PC et sur le serveur. Dans les 2 cas ça fonctionne bien, j'affiche bien le tableau fruits, soit :

    Array ( [0] => Pomme [1] => Fraise )

    Que peut-on en conclure?

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Que le pb ne vient pas de PHP en lui-même mais d'un traitement intermédiaire.
    Va falloir que tu traces $_POST et supprime tous les traitements intermédiaires jusqu'à identifier celui posant pb.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 6
    Par défaut
    Ça y est, j'ai trouvé le coupable (mais pas encore résolu le problème).
    Je débute chacune de mes pages php par une initialisation qui fait l'ouverture de session, l'inclusion des fonctions, l'inclusion des constantes et la gestion de magic_quotes. Si je supprime la gestion des magic quotes je n'ai plus le problème (mais j'aurai forcément des problèmes avec les magic quotes dans les autres scripts).

    Par ailleurs j'ai regardé comment étaient gérées les magic quotes sur mon PC et sur le serveur.
    sur mon PC :
    magic_quotes_gpc = Off
    magic_quotes_runtime = Off
    magic_quotes_sybase = Off
    sur le serveur :
    magic_quotes_gpc = On
    magic_quotes_runtime = Off
    magic_quotes_sybase = Off
    J'ai passé magic_quotes_gpc à On sur mon PC et je reproduis bien le problème.

    Reste à comprendre le pourquoi et à trouver le comment, et là j'ai encore besoin de l'aide du forum.

    J'ai pompé la gestion des magic_quotes dans l'excellent bouquin d'Olivier Heurtel, "PHP et MySQL" (Editions ENI). Voici la fonctions que j'exécute au début de chaque script :
    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
     
    <?php function supprimer_encodage_MQ_GPC() {
    	// si magiq quotes est actif
    	if (get_magic_quotes_gpc()) {
    		// définir une fonction strip_slashes() qui accepte un paramètre par référence
    		// et qui lui applique la fonction stripslashes()
    		function strip_slashes(&$param1) {
    			$param1 = trim($param1);
    			$param1 = stripslashes($param1);
    		}
    		// appliquer la fonction strip_slashes() de façon récursive à tous les taleaux GPC
    		array_walk($_POST, 'strip_slashes');
    		array_walk($_GET, 'strip_slashes');
    		array_walk($_COOKIE, 'strip_slashes');
    		array_walk($_REQUEST, 'strip_slashes');/**/
    	}
    } 
    ?>
    Ce que je ne comprends pas c'est pourquoi cette fonction, qui n'agit que sur le serveur (ce qui est normal puisque magic_quotes_gpc y est activé), crée-t-elle un problème ? et en plus il n'y a pas de guillemets dans les données lues dans la base...

  6. #6
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array_walk($_POST, 'strip_slashes');
    strip_slashes( ) est appliquée à chq élément du tableau $_POST.
    Pb : parmis ces éléments tu as un tableau, ce qui donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strip_slashes($_POST['sorties']) ;
    Puis dans la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $param1 = stripslashes($_POST['sorties']);
    Or stripslashes( ) attend une chaîne de caractères, pas un tableau, d'où la sortie du tableau PHP convertie tant bien que mal en chaîne avec "Array".

    => Utilise array_walk_recursive( ) au lieu de array_walk( ).

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

Discussions similaires

  1. [Tableaux] Tableau de valeurs dans $_POST
    Par chemindelavallee dans le forum Langage
    Réponses: 2
    Dernier message: 28/04/2007, 19h46
  2. [Tableaux] Count dans un tableau
    Par krfa1 dans le forum Langage
    Réponses: 2
    Dernier message: 27/11/2005, 20h15
  3. organisation de tableaux dynamiques dans une page HTML
    Par fallered dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 24/10/2005, 16h04
  4. [Tableaux] tableau dans un formulaire
    Par Elo13 dans le forum Langage
    Réponses: 4
    Dernier message: 26/09/2005, 17h28
  5. [D7] Tableaux dynamiques dans un record
    Par bobby-b dans le forum Langage
    Réponses: 2
    Dernier message: 30/06/2004, 23h23

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