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 :

Variables déjà déclarées, mais j'arrive pas à savoir où :(


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut Variables déjà déclarées, mais j'arrive pas à savoir où :(
    Bonjour,

    J'ai comme on pourrait dire un problème basique.

    J'extrait de POST des variables dynamiques.

    Seulement certaines de mes variables existent déjà, et je n'arrive pas à comprendre pourquoi.

    Explication :

    Ma page forum.php, celle-ci contient en gros ces lignes :
    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
    require_once('./include/config.php');
     
    if( !isset($_SESSION['option']) )
    {
        // déclaration des options d'affichage, design, etc...
    }
     
    // si soumission d'un form
    if( isset($_POST['envoi']) )
    {
        require('./forum/soumission_form.inc.php');
    }
     
    // si nouveau, réponse, edition, citation
    if( isset($_GET['post']) )
    {
        require('./forum/form.inc.php');
    }
    else
    {
        // require en fonction des GET présents
    }
     
    // affichage
    Donc si un form est soumis, l'appel à soumission_form est appliqué.

    soumission_form :
    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
    // Soumission des forms du forum
    if( !isset($_SESSION['membre']) )
    {
    		$url = 'membre.php?action=connexion';
        $erreur = 'Vous ne pouvez pas poster de message car vous n\'êtes pas identifié.<br /><br />Veuillez vous connecter';
        exit(require('./include/messages.inc.php'));
    }
     
    foreach( $_POST as $c => $v )
    {
        if( !isset(${$c}) )
    		{ 
    			${$c} = sql_ins(trim($v));
    		}
    		else
    		{
    			echo 'la variable $' . $c . ' existe !!!<br />Mais où !?!!!???<br />';
    		}
    }
    $erreur = array();
     
    //pre($_POST);
     
    // traitement des valeurs
    Mon problème réside dans mon foreach, j'ai un champ titre et un champ message qui ne sont pas censé exister, mais qui existent.

    J'arrive pas à comprendre pourquoi

    Ma page soumission_form est appelée avant toutes déclaration de variables, donc je vois pas du tout.

    Ca se trouve, c'est encore un truc tout bête, mais plus je cherche, moins je trouve.

    Avez-vous une idée ?

  2. #2
    Membre habitué Avatar de Cyberbob002
    Inscrit en
    Mai 2003
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 140
    Points : 146
    Points
    146
    Par défaut
    Donne le code de ton formulaire pour que l'on ait plus de précisions.

  3. #3
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Moi je comprends pas trop ton code

    Si c'est pas isset tu insères et si c'est isset tu affiches un message ? Ca a un sens ça ?

  4. #4
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    Ben mon formulaire se résume en abrégé à :

    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
    <form id="form_forum" method="post" action="/v1/forum.php?post=nouveau&forum=2">
    <script src="javascript/form.js" type="text/javascript"></script>
    <h3 id="form">forum : rapports de bugs</h3>
    <p class="titre_message">
    <input type="text" name="titre" id="titre"  value="" size="50" maxlength="50" onfocus="focus_input('titre', 'ltitre')" onblur="blur_input('titre', 'ltitre')"/>
    <label id="ltitre" for="titre">titre de votre message</label></p>
    <div class="contenu_message">
    <script type="text/javascript" src="javascript/codev.js"></script>
    <table class="zone_texte">
    <tr><td class="menu_barre" colspan="2"></td></tr>
    <tr><td class="textarea"><textarea id="message" name="message" onfocus="focus_textarea('message')" onblur="blur_textarea('message')"></textarea></td>
    <td class="smilies"></td></tr>
    </tr>
    </table>
    </div>
    <p class="submit">
    <input type="hidden" name="nouveau" value="1" /><input type="hidden" name="forum" value="2" />
    <input id="valider" class="valider" type="submit" name="envoi" value="valider" onmouseover="submit_over('valider')" onmouseout="submit_out('valider')"/>
    <input id="prevu" class="valider" type="submit" name="prevu" value="visualiser" onmouseover="submit_over('prevu')" onmouseout="submit_out('prevu')" />
    </p>
    </form>
    C'est quoi que tu ne comprends pas dans mes isset Kerod ?

  5. #5
    Membre habitué Avatar de Cyberbob002
    Inscrit en
    Mai 2003
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 140
    Points : 146
    Points
    146
    Par défaut
    Citation Envoyé par Xunil
    Mon problème réside dans mon foreach, j'ai un champ titre et un champ message qui ne sont pas censé exister, mais qui existent.
    C'est un peu logique qu'ils soient là non ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <textarea id="message" name="message" onfocus="focus_textarea('message')" onblur="blur_textarea('message')"></textarea>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="text" name="titre" id="titre"  value="" size="50" maxlength="50" onfocus="focus_input('titre', 'ltitre')" onblur="blur_input('titre', 'ltitre')"/>

  6. #6
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Pas mieux.

    Les champs sont présents dans le formulaire donc ils sont transmis ( les seuls cas ou cela n'est pas vrai sont les champs disabled et les checkbox non cochées )

    Ensuite, quand tu fait un isset, la variable existe puisque le php la reçoit. Ensuite il te faut tester qu'elle ne soit pas vide !empty().

    Mais, il faut faire attention car 0 et la chaine vide sotn considéré comme nulle

    Plus d'info : empty , isset

    En espérant que cela te soit utile

  7. #7
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    Merci mais je sais à quoi sert isset.

    Je me suis peut-être mal fait comprendre, je me suis rendu compte du problème car sql_ins() sert entre autre à échapper les quotes et j'ai une erreur sur ma requête puisque les quotes ne sont pas échappées.

    Donc avant ma boucle foreach, la variable $titre et $message sont déjà déclaré, puisque j'obtiens à l'affichage :

    la variable $message existe !!!
    la variable $titre existe !!!

    Alors que si ${$c} n'existait pas, je n'entrerais pas dans le else.

    C'est peut-être plus clair

  8. #8
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Citation Envoyé par Xunil
    Merci mais je sais à quoi sert isset.
    Je veux bien te croire, mais tu n'as pas du tout lire.

    Si en plus de dire que la variable existe, tu affiches son contenu. je pense que tu remarqueras qu'elles sont vides.

    Donc il faut bien rajouter un test pour détecter si la variable est vide.

  9. #9
    Membre éclairé
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Points : 858
    Points
    858
    Par défaut
    Tu aurais pas register_globals d'activé dans ton php.ini... .. ?

    @ tchaOo°

  10. #10
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    Citation Envoyé par FCYPBA
    Donc il faut bien rajouter un test pour détecter si la variable est vide.
    Bah non, pourquoi faire, si $message existe, alors je ne réécris pas la variable, si elle n'existe pas, alors là, j'écris la variable.

    Non, kankrelune, register_global est à off.

    Mais j'avais pas fait gaffe à un truc, c'est que le problème ne se produit que lorsque c'est une édition ou une citation d'un post.

    Mais je comprends pas pourquoi

    Je crois que je vais changer les noms de toutes mes variables car ça commence à me saouler.

    En plus je suis sûr que c'est tout con.

  11. #11
    Membre éclairé
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Points : 858
    Points
    858
    Par défaut
    T'as regardé si dans un des fichiers d'entete du script elle était pas initialisée quelque part... .. ?

    @ tchaOo°

  12. #12
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    A priori non, les autres fois où je déclare $titre et $message sont quand j'extrait les valeurs de la bdd pour les afficher dans les champs du form.

    Mais comme le formulaire est appelé après le traitement des forms, il devrait pas y avoir de problème.

    Je vais vérifier tout mes includes mais je pense pas que ça vienne de ça.

  13. #13
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Ce que je disais c'est que ton code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    foreach( $_POST as $c => $v )
    {
        if( !isset(${$c}) )
    		{ 
    			${$c} = sql_ins(trim($v));
    		}
    		else
    		{
    			echo 'la variable $' . $c . ' existe !!!<br />Mais où !?!!!???<br />';
    
    		}
    }
    Dit clairement que si on envoie les données par le formulaire (après soumission) alors on affiche ton message qui dit que ca existe. Et c'est quand on soumet pas le formulaire que tu insers les données. C'est ce que je comprends pas en principe on fait le contraire : On insere à la soumission et si pas de soumission alors on affiche un message d'erreur.

    C'est ce que je comprenais pas dans tes isset. Est-ce bien ce que tu voulais faire ?

  14. #14
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    Arf, si je viens de vérifier mon phpinfo() par acquis de conscience et register_globals était à on.

    Quelle connerie, je l'avais bien mis à off, mais vu que j'ai installé gtk, il m'a je crois réécrit le php.ini et a du me le reparamètrer à on.

    Ca m'énerve des trucs comme ça, je pouvais toujours chercher dans mes scripts....

    Merci kankrelune de m'avoir orienté vers ça, merci également aux autres de vous êtes intéressé à mon problème

    Edit: Oui kerod, mais le else n'était là que pour tester, en tant normal il n'y est pas.
    En fait j'écris directement mes variables dans ma boucle en leur appliquant un trim et une fonction seulement si elles ne sont pas déclarées( par sécurité).

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

Discussions similaires

  1. variable globale dont je n'arrive pas à visualiser le contenu
    Par wiama dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 18/05/2010, 20h07
  2. [PHP 5.0] Mes mails partent mais n'arrivent pas !
    Par zouberi dans le forum Langage
    Réponses: 6
    Dernier message: 09/01/2009, 10h42
  3. J'ai 3 fonctions mais j'arrive pas a en appeller une
    Par Ofeneim dans le forum VBA Access
    Réponses: 9
    Dernier message: 23/05/2007, 18h36
  4. Réponses: 22
    Dernier message: 18/05/2007, 18h46
  5. Réponses: 1
    Dernier message: 23/01/2006, 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