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] Requêtes et valeurs interpretées


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de Linaa
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    987
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 987
    Par défaut [Tableaux] Requêtes et valeurs interpretées
    Bonjour,

    J'ai cette table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE `test` (
      `id` int(10) NOT NULL auto_increment,
      `champ` varchar(255) NOT NULL default '',
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    Avec une de mes données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO `test` VALUES (1, 'Ma page : $_SERVER["PHP_SELF"]');
    Je voudrais afficher le contenu de mon champ, non pas $_SERVER["PHP_SELF"] mais son contenu interprété!

    Mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      $req = mysql_query('select champ from test where id=1');
      $r = mysql_fetch_array($req);
      echo "$r[champ]";
    (J'ai bien mis les guillemets!)
    Mais ça ne m'affiche pas la valeur interprétée.

    J'ai aussi essayé
    Ce qui revient au même.

    Dejà, est-ce possible ?

    Merci d'avance.

  2. #2
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Salut

    As-tu essayé avec eval() ?

  3. #3
    Membre émérite Avatar de macbook
    Inscrit en
    Février 2006
    Messages
    838
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 838
    Par défaut
    C'est ici que pêche :

    'Ma page : $_SERVER["PHP_SELF"]'

    Une variable n'est pas interprétée entre des quotes simples.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "INSERT INTO test VALUES (1, 'Ma page : " . $_SERVER["PHP_SELF"] . "')";

  4. #4
    Membre émérite
    Avatar de Linaa
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    987
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 987
    Par défaut
    Citation Envoyé par Kirkis
    As-tu essayé avec eval() ?
    Avec eval(), j'ai une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parse error: syntax error, unexpected T_STRING in c:\Wamp5\www\test\test.php(7) : eval()'d code on line 1
    (J'vois pas d'où sort le 'd ?!)
    C'est surement dû aux guillemets du PHP_SELF ?
    J'vois pas...

    Citation Envoyé par macbook
    C'est ici que pêche :

    'Ma page : $_SERVER["PHP_SELF"]'

    Une variable n'est pas interprétée entre des quotes simples.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql = "INSERT INTO test VALUES (1, 'Ma page : " . $_SERVER["PHP_SELF"] . "')";
    Ca fonctionnerait, c'est sûr! ... Mais j'insère directement ma valeur dans la base via phpMyAdmin

  5. #5
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Damn, je sais pas où je vais chercher mes solutions, parfois...
    Cela semble effectivement être un souci de guillemets ou de concaténation.
    Rien à voir avec eval(), désolé.

  6. #6
    Membre émérite
    Avatar de Linaa
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    987
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 987
    Par défaut
    Mais si, puisque ça interprète la chaine donnée en paramètre!

    Bon, solution alternative :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $r['champ'] = str_replace('$_SERVER["PHP_SELF"]',$_SERVER["PHP_SELF"],$r['champ']);

  7. #7
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Ah, je crois avoir finalement cerné la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $var1 = '$var2 = "Ma page : $_SERVER[PHP_SELF]";';
    eval($var1);
    echo $var2;
    Attention à le pas mettre PHP_SELF entre guillemets car cela ne passerait pas. Attention également à utiliser les guillemets simples pour la première chaîne.

    Ou bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $var1 = '$var2 = \'Ma page : \'.$_SERVER[\'PHP_SELF\'];';
    eval($var1);
    echo $var2;
    Cette fois, il faut mettre PHP_SELF entre guillemets.

  8. #8
    Membre émérite Avatar de macbook
    Inscrit en
    Février 2006
    Messages
    838
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 838
    Par défaut
    Citation Envoyé par Linaa
    Ca fonctionnerait, c'est sûr! ... Mais j'insère directement ma valeur dans la base via phpMyAdmin
    Et bien fais un echo de ta requête et c/c dans phpmyadmin !!!

  9. #9
    Membre émérite
    Avatar de Linaa
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    987
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 987
    Par défaut
    Macbook : Ce n'est pas un problème de requête.

    Kirkis : Oui, mais comment j'fais avec ma requete ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      eval ('$var = $r[champ];');
      echo $var;
    Toujours un Parse error...

  10. #10
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Ouais, c'est un peu space pour l'histoire des guillemets... Cette fois, il faut les mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $r['champ'] = '$var = "Ma page : $_SERVER[PHP_SELF]";';
    eval ($r['champ']);
    echo $var;
    On va y arriver, tu verras.

    Ensuite, pour mettre $var = " au début et "; à la fin, tu peux utiliser CONCAT dans ton SQL : tu n'es pas obligé de tout enregistrer dans la BDD.

    Voici ce que ça pourrait donner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $sql = 'SELECT CONCAT(\'$var = "\', champ, \'";\')
    		FROM test
    		WHERE id=1';
     
    // ...
     
    $r['champ'] = '$var = "Ma page : $_SERVER[PHP_SELF]";';
    eval ($r['champ']);
    echo $var;

  11. #11
    Membre émérite
    Avatar de Linaa
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    987
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 987
    Par défaut
    Nickel avec le concat!

    Juste qu'il faut spécifier un variable pour stocker la chaine concaténée.
    Ce qui donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	$req = mysql_query('SELECT CONCAT(\'$var = "\', champ, \'";\') AS ch FROM test WHERE id=1');
    	$r = mysql_fetch_array($req);
    	eval ($r['ch']);
    	echo $var;
    Merci Kirkis!!

    (Ouff... )

  12. #12
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Euh ouais, j'ai fait un peu n'imp dans le post précédent mais tu m'as compris, c'est le principal ^^

  13. #13
    Membre émérite
    Avatar de Linaa
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    987
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 987
    Par défaut
    Je ne sais pas si c'est mieux de faire le CONCAT avec la requete ou bien simplement un str_replace (qui fonctionne également d'ailleurs) ?

  14. #14
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    J'aime bien la solution du CONCAT car tu fais ta requête de toute manière, ce qui n'est pas le cas de str_replace()...

    Après, à ce niveau je pense que ça dépend de toi. D'aucuns te diraient qu'il est préférable de sortir des données brutes de MySQL et de faire les traitement uniquement dans PHP. Dans ce cas, pourquoi ne pas simplement ajouter un champ non modifié dans le SELECT ?

    Comme tu l'as remarqué, il y a maintes manières de le faire...
    Toutes ont leurs avantages et leurs défauts, à toi de sélectionner celle qui te convient le mieux.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 09/01/2006, 01h24
  2. [Tableaux] Extraction de valeur dans un tableau
    Par pirouette_07 dans le forum Langage
    Réponses: 6
    Dernier message: 21/10/2005, 17h54
  3. [Tableaux] récupération de valeurs cochées
    Par juanelcalor dans le forum Langage
    Réponses: 7
    Dernier message: 20/09/2005, 13h46
  4. [Tableaux]Ajouter des valeurs dans un tableau
    Par Antoine1183 dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 03/04/2005, 13h41
  5. Réponses: 6
    Dernier message: 04/04/2003, 15h28

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