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 :

Invalid argument supplied for foreach() avec $_post


Sujet :

Langage PHP

  1. #1
    Membre actif
    Profil pro
    Developpeur web et Access VBA
    Inscrit en
    Janvier 2003
    Messages
    457
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur web et Access VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 457
    Points : 203
    Points
    203
    Par défaut Invalid argument supplied for foreach() avec $_post
    Bonjour,

    Je suis sous PHP5.5
    Je reçois d'un $_POST les données suivantes en faisant un print_r($_POST); :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Array ( [Ouvert] => Array ( [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 ) [button3] => Enregistrer [userid] => 79 )
    Pour moi, Ouvert est donc bien un array()

    Je fais une boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach($Ouvert as $value){
    echo "Valeur : $value<br />\n";
    }
    Mais elle ne donne rien !
    Aucun echo et le système me dit que $Ouvert n'est pas un array

    La chose me parait si simple que je ne comprends pas....

    Help !

  2. #2
    Membre actif
    Profil pro
    Developpeur web et Access VBA
    Inscrit en
    Janvier 2003
    Messages
    457
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur web et Access VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 457
    Points : 203
    Points
    203
    Par défaut
    Avec certitude c'est mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Ouvert] => Array ( [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 )
    Qui n'est pas reconnu comme array par la boucle foreach...
    En fait ces données sont postées via un formulaire qui propose des cases à cocher pour prendre des options, il y a 12 options, donc 12 cases à cocher.
    Ces options viennent d'une table, on peut rajouter des options dans la table.
    L'utilisateur coche les options qu'il souhaite et clic sur enregistrer...
    Alors on récupère les données postées de dessus qui semblent ne pas être un tableau...
    Comment faire pour qu'elles deviennent un tableau ?

  3. #3
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    tu peux poster le message d'erreur complet stp

  4. #4
    Membre actif
    Profil pro
    Developpeur web et Access VBA
    Inscrit en
    Janvier 2003
    Messages
    457
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur web et Access VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 457
    Points : 203
    Points
    203
    Par défaut
    Je n'ai pas de message d'erreur.
    Je suis sur OVH, j'ai mis le .ovhconfig en development et il me dit simplement "Invalid argument supplied for foreach()"
    La fonction marchait super bien avant de passer en PHP5.5, elle fonctionnait en PHP4...

    La boucle foreach ne marche pas du tout...
    Donc je pense que mes données postées ne sont pas reconnues comme array, comment les forcer à devenir un array ?

    Voila le code HTML du formulaire qui envoi les données

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <title>Gestion des catégories par utilistaeurs</title>
    <meta name="Description" content="Gestion des cat&eacute;gories par utilistaeurs" />
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <link href="../../css/contact.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
    <div align="center">
      <p>&nbsp;</p>
      <table width="500" border="0" cellpadding="5" cellspacing="0" class="cadre1">
        <tr>
          <td colspan="2" bgcolor="#6D94E4"><span class="txttitre">Cat&eacute;gories  de l'utilisateur :
              DEMOS      </span></td>
        </tr>
        <tr>
          <td bgcolor="#666666"><font color="#FFFFFF">Cat&eacute;gorie</font></td>
          <td bgcolor="#666666"><font color="#FFFFFF">Ouverte</font></td>
        </tr>
        <form id="form2" name="form1" method="post" action="modif_cat_user.php" enctype="multipart/form-data">
     
        <tr>
          <td bgcolor="#CCCCCC">Perso</td>
          <td bgcolor="#CCCCCC"><input name="oouvert[]" type="checkbox" id="oouvert[]" value="1"  /></td>
          </tr>
     
        <tr>
          <td bgcolor="#CCCCCC">Clients</td>
          <td bgcolor="#CCCCCC"><input name="oouvert[]" type="checkbox" id="oouvert[]" value="2"  /></td>
          </tr>
     
        <tr>
          <td bgcolor="#CCCCCC">Fournisseurs</td>
          <td bgcolor="#CCCCCC"><input name="oouvert[]" type="checkbox" id="oouvert[]" value="3"  /></td>
          </tr>
     
        <tr>
          <td bgcolor="#CCCCCC">Administrations</td>
          <td bgcolor="#CCCCCC"><input name="oouvert[]" type="checkbox" id="oouvert[]" value="4"  /></td>
          </tr>
     
        <tr>
          <td bgcolor="#CCCCCC">R&eacute;seau</td>
          <td bgcolor="#CCCCCC"><input name="oouvert[]" type="checkbox" id="oouvert[]" value="5"  /></td>
          </tr>
     
        <tr>
          <td bgcolor="#CCCCCC">collaborateurs</td>
          <td bgcolor="#CCCCCC"><input name="oouvert[]" type="checkbox" id="oouvert[]" value="6"  /></td>
          </tr>
     
        <tr>
          <td bgcolor="#CCCCCC">Temporaire</td>
          <td bgcolor="#CCCCCC"><input name="oouvert[]" type="checkbox" id="oouvert[]" value="7"  /></td>
          </tr>
     
        <tr>
          <td bgcolor="#CCCCCC">10</td>
          <td bgcolor="#CCCCCC"><input name="oouvert[]" type="checkbox" id="oouvert[]" value="10"  /></td>
          </tr>
     
        <tr>
          <td bgcolor="#CCCCCC">11</td>
          <td bgcolor="#CCCCCC"><input name="oouvert[]" type="checkbox" id="oouvert[]" value="11"  /></td>
          </tr>
     
        <tr>
          <td bgcolor="#CCCCCC">12</td>
          <td bgcolor="#CCCCCC"><input name="oouvert[]" type="checkbox" id="oouvert[]" value="12"  /></td>
          </tr>
     
        <tr>
          <td bgcolor="#CCCCCC">13</td>
          <td bgcolor="#CCCCCC"><input name="oouvert[]" type="checkbox" id="oouvert[]" value="13"  /></td>
          </tr>
     
        <tr>
          <td bgcolor="#CCCCCC">14</td>
          <td bgcolor="#CCCCCC"><input name="oouvert[]" type="checkbox" id="oouvert[]" value="14"  /></td>
          </tr>
     
        <tr>
          <td bgcolor="#CCCCCC">15</td>
          <td bgcolor="#CCCCCC"><input name="oouvert[]" type="checkbox" id="oouvert[]" value="15"  /></td>
          </tr>
             <tr>
          <td colspan="2" align="center" bgcolor="#6D94E4"><input type="submit" name="button3" id="button3" value="Enregistrez vos modifications" />
            <input name="userid" type="hidden" id="hiddenField" value="79" /></td>
        </tr></form>
        <tr>
          <td colspan="2" align="center" bgcolor="#6D94E4"><a href="user.php" class="lien"><strong>Retour aux utilisateurs</strong></a><strong> | <a href="index.php" class="lien">Retour au menu</a></strong></td>
        </tr>
      </table>
      <p>&nbsp;</p>
    </div>
    </body>
    </html>

  5. #5
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    c'est étrange...
    Le problème ne viendrait pas de l'encodage du fichier par hasard ? Tu peux vérifier ?


    Suite à l'arrêt du support des anciennes versions de PHP MySQL par OVH, je viens de finir la reprise d'un site complet mélangeant PHP 4, 5 et MySQL 4.0 vers PHP 5.6, utf-8, MySQL 5.5... Et je te dis bon courage !!

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Lol, lis ton code source tu as mis name="oouvert[]" avec foreach ($_POST['oouvert'] as $k => $v) y a plus de problèmes

  7. #7
    Membre actif
    Profil pro
    Developpeur web et Access VBA
    Inscrit en
    Janvier 2003
    Messages
    457
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur web et Access VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 457
    Points : 203
    Points
    203
    Par défaut
    J'ai tout essayé, même changé Ouvert en oouvert, mais rien ne marche...
    La boucle for each ne marche pas....
    Et avec ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach ($_POST['oouvert'] as $k => $v)
    non plus...

    Voici mon test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach ($_POST['oouvert'] as $k => $v) {
    echo "<br> Valeur : $v<br />\n";
    }
    Et le print_r renvoi bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Array ( [oouvert] => Array ( [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 ) [button3] => Enregistrez vos modifications [userid] => 79 )
    Je ne comprends pas...

  8. #8
    Membre actif
    Profil pro
    Developpeur web et Access VBA
    Inscrit en
    Janvier 2003
    Messages
    457
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur web et Access VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 457
    Points : 203
    Points
    203
    Par défaut
    Pfuuuuu !!!!!!!!!!!!!
    Je viens de trouver !
    Comme il n'y a plus de Magic_cote dans le système 5.5, j'ai mis un mysql_real_escape_string() par défaut sur le $_POST...
    Et du coup le array n'existe plus...
    Suffit de faire un autre fichier de connexion sans mysql_real_escape_string() sur $_POST
    Voila....

    Sinon, oui je me suis amusé aussi à passer des sites de PHP4 vers 5.5 avec SQL 5.1 et UTF8, c'est chaud effectivement, surtout pour la migration des données, mais l'export avec le choix de l'encodage sous PhpMyadmin est d'une aide précieuse !!!

  9. #9
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par Décibel Voir le message
    Comme il n'y a plus de Magic_cote dans le système 5.5, j'ai mis un mysql_real_escape_string() par défaut sur le $_POST...
    Et du coup le array n'existe plus...
    Suffit de faire un autre fichier de connexion sans mysql_real_escape_string() sur $_POST
    je ne comprend pas ce que tu as fait, pourquoi donc es-tu allé tripatouiller le $_POST ?
    Et puis un fichier "de connexion mysql_real_escape_string() sur $_POST" ça veut dire quoi ?

    Enfin, l'extension mysql_ est carrément obsolète et si tu ne veux pas avoir à y revenir demain, passe directement à mysqli_ ou PDO.

    Citation Envoyé par Décibel Voir le message
    mais l'export avec le choix de l'encodage sous PhpMyadmin est d'une aide précieuse
    oui mais loin d'être suffisant, il faut penser à reprendre les collations et voire probablement à nettoyer la base de toutes les entités html.
    Et si tu passes sur OVH en utf8mb4, tu vas galérer avec les index (la limite des 767 bytes)...

    Ce genre de portage représente un gros boulot et rajoute par dessus le fait que tu doives aussi probablement te retaper les affichages afin de les échapper correctement...

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

Discussions similaires

  1. Warning: Invalid argument supplied for foreach()
    Par billyrose dans le forum Langage
    Réponses: 1
    Dernier message: 27/02/2009, 15h36
  2. [Tableaux] Invalid argument supplied for foreach()
    Par kifouillou dans le forum Langage
    Réponses: 10
    Dernier message: 16/05/2008, 16h53
  3. [Tableaux] Invalid argument supplied for foreach
    Par Lionel57 dans le forum Langage
    Réponses: 1
    Dernier message: 20/12/2007, 13h15
  4. Invalid argument supplied for foreach()
    Par Rajhonson dans le forum Langage
    Réponses: 4
    Dernier message: 16/11/2006, 14h31
  5. Réponses: 11
    Dernier message: 19/05/2006, 11h41

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