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] variable qui s'affichent mais non transmisent à la requête


Sujet :

Langage PHP

  1. #1
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut [Tableaux] variable qui s'affichent mais non transmisent à la requête
    Bonjour,

    Voilà des heures que j'essaie de trouver l'erreur. Je n'ai jamais vu un problème aussi débile.

    J'ai une requête INSERT. Je peux tout à fait afficher le résultat de la requête.
    Mais si j'essaie d'envoyer ce résultat dans une autre table, les variables récupérées ne sont pas transmisent à la requête INSERT.
    Mais ce qui est dingue, c'est que la requête INSERT est bonne, puisque que si j'initialise moi même les variables, alors tout fonctionne bien.
    Je vais devenir chèvre.

    Voilà le code :
    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
     
    //on va chercher le titre du message, et l'id du membre qui l'a écrit
    $affiche="
    SELECT 
    idMembre,
    titre
    FROM 
    forum 
    WHERE id='".$forumDiscussion."'  
    ";
    $resultat = mysql_query("$affiche");
    while ($R = mysql_fetch_array($resultat)) 
    {
    $idMembre=$R[idMembre];
    $titre=$R[titre];
    }
    mysql_free_result($resultat);
     
    //on envoie par MP un message à l'auteur du sujet qui vient d'être déplacé. 
    $Date=strftime("%y/%m/%d %H:%M:%S");
    $dateNombre=time();//sert à reconstruire la date coté client
    $explicationPrive=trim(htmlspecialchars(mysql_real_escape_string($_POST['explicationPrive'])));
    $explicationPrive2="Bonjour, votre sujet a été déplacé par un modérateur dans la catégorie : $balise.
    <p>
    $explicationPrive";
    //ici on envoie l'explication personnelle et privée a l'auteur du message modifié
    $titrePrive="D&eacute;placement du message : $titre ";
    $insert="INSERT INTO `messagerieRecu` 
    (`idMembre`,`idMembreExpediteur`,`pseudoExpediteur`,`titre`,`contenu`,`dateEnvoi`,
    `timeEnvoi`) 
    VALUES (
    '$idMembre','1','Administrateur','$titrePrive','$explicationPrive2',
    '$Date','$dateNombre'
    )";
    mysql_query($insert);
    Voilà donc ce qui est dingue, c'est que si je fais un echo PHP de $titre et de $idMembre juste après le SELECT ou même dans la boucle WHILE alors les valeurs s'affichent bien. Mais elles ne sont pas transmisent à la requête INSERT et donc celle-ci foire.
    Par contre si j'écris moi même, juste avant la requête INSERT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $idMembre=1;
    $titre="titre";
    Alors là la requête INSERT fonctionne bien, tous les champs sont insérés.

    C'est débile.

  2. #2
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Essaie de mettre un or die () apre_s ton mysql_query.
    Affiche aussi ta requête avec un echo pour voir si elle correspond à tes attentes.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Points : 1 014
    Points
    1 014
    Par défaut portée des variables
    C'est évident que cela ne fonctionne car tes variables sont déclarées dans la boucle while et donc leur portée est limitée à la boulce while.

    Déclare les en début de fichier ou juste avant le while, sans forcément leur affecter de valeur et cela devrait fonctionner.

  4. #4
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut
    Citation Envoyé par zyongh
    C'est évident que cela ne fonctionne car tes variables sont déclarées dans la boucle while et donc leur portée est limitée à la boulce while.

    Déclare les en début de fichier ou juste avant le while, sans forcément leur affecter de valeur et cela devrait fonctionner.
    Non parce que comme j'ai dit je peux afficher les valeurs des variables à la sortie de la boucle while, après le mysql_free_result(), et les valeurs sont correctes.

    Comme j'ai dit les deux requêtes fonctionnent bien. Les variables sont récupérées par le select et je peux les afficher où je veux dans le script, même après la requête insert.
    Et l'insert fonctionne bien aussi, mais à la seule condition que juste avant de l'effectuer, je marque directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $idMembre=1;
    $titre="titre";
    Mais bien sûr j'ai besoin de la requête SELECT pour aller chercher dynamiquement les variables $idMembre et $titre dont les valeurs changent à chaque fois.
    Donc vraiment je ne comprend pas, je n'ai jamais rencontré un problème comme ça.

  5. #5
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Tu as essayé ce que je t'ai suggeré ? Quel est le résultat ?

  6. #6
    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
    Sinon au passage je suppose que id est un int donc...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //on va chercher le titre du message, et l'id du membre qui l'a écrit
    $affiche = 'SELECT idMembre,titre FROM forum WHERE id='.(int)$forumDiscussion;
    Pour quoi mettre $affiche entre quotes... .. ?

    mysql_query("$affiche") mysql_query($affiche)

    Et idMembre et titre ne sont pas des constantes... donc...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while ($R = mysql_fetch_array($resultat)) 
    {
        $idMembre=$R['idMembre'];
        $titre=$R['titre'];
    }
    D'ailleurs la boucle est inutile vu que tu n'as qu'un seul résultat... .. .

    Et tu ne vérifie pas que mysql t'as retournée un résultat... htmlsecialchars() n'est pas utile avant une insertion en base de donnée d'une part parce que mysql se fout d'avoir du html ou pas elle ne l'interprete pas ensuite parce que tu alourdis ta base pour rien (en terme de place) mysql_real_escape_string() suffit avant une insertion en base de données... par contre htmlspecialchars() (ou plutot htmlentities()) doit être utilisé avant tout affichage... .. .

    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
     
    //on va chercher le titre du message, et l'id du membre qui l'a écrit
    $affiche = 'SELECT idMembre,titre FROM forum WHERE id='.(int)$forumDiscussion;
    $resultat = mysql_query($affiche);
     
    if(mysql_num_rows($resultat) === 1)
    {
    	$infos = mysql_fetch_array($resultat)) 
     
    	mysql_free_result($resultat);
     
    	//on envoie par MP un message à l'auteur du sujet qui vient d'être déplacé. 
    	$explicationPrive = 'Bonjour, votre sujet a été déplacé par un modérateur dans la catégorie : '.$balise.'.<p>'.trim($_POST['explicationPrive']);
     
    	//ici on envoie l'explication personnelle et privée a l'auteur du message modifié
    	$titrePrive = 'Déplacement du message : '.$infos['titre'];
    	$insert = 'INSERT INTO `messagerieRecu` (`idMembre`,`idMembreExpediteur`,`pseudoExpediteur`,`titre`,`contenu`,`dateEnvoi`,`timeEnvoi`) 
    	VALUES ( '.$infos['idMembre'].',\'1\',\'Administrateur\',\''.mysql_real_escape_string($titrePrive).'\',\''.mysql_real_escape_string($explicationPrive).'\',\''.strftime("%y/%m/%d %H:%M:%S").'\',\''.time().'\')';
     
    	mysql_query($insert);
    }
    else // forum non trouvé
    @ tchaOo°

Discussions similaires

  1. Réponses: 17
    Dernier message: 28/05/2007, 17h55
  2. [Cookies] variable de session ou cookie non transmise
    Par dubitoph dans le forum Langage
    Réponses: 1
    Dernier message: 01/12/2006, 21h37
  3. [Tableaux] Variable qui ne prend pas sa valeur
    Par stephane78 dans le forum Langage
    Réponses: 11
    Dernier message: 19/08/2006, 20h30
  4. [Tableaux] Variable qui prend plusieurs valeurs
    Par gandoulfe dans le forum Langage
    Réponses: 14
    Dernier message: 26/02/2006, 18h02
  5. [Tableaux] variable qui ne passe pas
    Par oceane751 dans le forum Langage
    Réponses: 5
    Dernier message: 31/12/2005, 02h56

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