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 :

Php à la volée : le code est visible dans le source !


Sujet :

Langage PHP

  1. #1
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut Php à la volée : le code est visible dans le source !
    Bonjour à tous,

    Je suis en train de créer un système de template tout simple, mais je rencontre un problème. Il doit me manquer une fonction. Je tente ici une simplissime représentation.

    Côté HTML

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <html>
    <body>
    [FORMULAIRE]
    </body>
    </html>
    Côté PHP:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $form = "<form method=\"post\">\n";
    $form .= <input name=\"prenom\" type=\"text\"  value=\"<?=\$_POST['prenom']?>\" />
    $form .= "</form>";
     
    $content = LoadTemp("fichier.html");
    $content = str_replace("[FORMULAIRE]", $form, $content);
    echo $content;
    Ca fait bien ce que je veux, sauf que le code php s'affiche dans le champ du formulaire (value), ce qui donne, sur la page et côté source :

    <input type="text" name="prenom" value="<?=$_POST['prenom']?>">

    Pourquoi ? Faut-il une fonction pour "protéger" l'écriture de la portion de code PHP ? Merci du tuyau.

  2. #2
    Invité
    Invité(e)
    Par défaut
    car ton code est faux

    comme ça ca devrait être mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $form = "<form method=\"post\">\n";
    $form .= '<input name="prenom" type="text"  value="'.$_POST['prenom'].'" />';
    $form .= "</form>";

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Par défaut
    Tu donnes l'impression d'utiliser la syntaxe ASP avec le PHP...
    Les habitudes ont la peau dure !

  4. #4
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    Merci de vous pencher sur ma question.
    Mais j'ai dû mal m'expliquer : j'ai besoin "d'écrire" ce petit bloc PHP dans le code HTML du formulaire de la même façon qu'on peut le faire tout naturellement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <html>
    <body>
    <form method="post">
    <input name="prenom" type="text" value="<?=$row['prenom']?>" />
    </form>
    </body>
    </html>
    En fait j'ai besoin que la ligne <input> soit écrite rigoureusement comme ça au final, c'est à dire avec la partie <?=$row['prenom']?> invisible, mais évidemment affiche la vraie valeur issue de la BDD. Mais ici, le fait que ce soit le PHP qui génère cette ligne via str_replace au lieu qu'elle soit écrite en dur pose problème...
    Et je capte pas pourquoi.
    Est ce que je suis plus clair ?

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Par défaut
    Au lieu de
    écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo($row['prenom']); ?>
    C'est déjà plus propre.

  6. #6
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    C'est vrai que c'est plus "propre"...
    Ce n'est malheureusement pas plus efficace.
    J'ai toujours le code en clair.

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Par défaut
    D'autres scripts PHP sont exécutés ou non ?

    Parce que je me demandais : est-ce que tu es certain que le module PHP est activé et fonctionne ?
    Où héberges-tu ta page ?

  8. #8
    Invité
    Invité(e)
    Par défaut
    essai un truc de ce style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $form = "<form method=\"post\">\n";
    $form .= "<input name=\"prenom\" type=\"text\"  value=\"#_POST_PRENOM_#\" />";
    $form .= "</form>";
     
    $content = LoadTemp("fichier.html");
    $content = str_replace("[FORMULAIRE]", $form, $content);
    $content = str_replace("#_POST_PRENOM_#", $_POST['prenom'], $content);
    echo $content;

  9. #9
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    Oui oui, pas de prob, c'est sur mon serveur, tout tourne en php, y compris la page en question.

    Je voudrais seulement savoir pourquoi ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $flux = "<form method=\"post\">\n";
    $flux .= "<input type="\text\" name=\"nom\" value=\"<?=\$v['nom']?>\" />\n";
    $flux .= "</form>";
    $fr=fopen("form.php", "w");
    fwrite($fr, $flux);
    fclose($fr);
    Donne un formulaire normal où le code php n'est ni visible dans le source ni dans le champ...

    Et ce code, avec une autre métode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $flux = "<form method=\"post\">\n";
    $flux .= "<input type="\text\" name=\"nom\" value=\"<?=\$v['nom']?>\" />\n";
    $flux .= "</form>";
     
    $html = LoadTemplate("page.html"); // fonction toute bête qui retourne le fgets du contenu HTML
    $content = str_replace("[FORM]", $flux, $html);
    $fr=fopen("form.php", "w");
    fwrite($fr, $content);
    fclose($fr);
    Donne un formulaire de daube où les tags PHP sont visibles.
    C'est dingue, ça !

  10. #10
    Membre chevronné
    Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2004
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 352
    Par défaut
    Sais-tu au moins à quoi servent les tags <?= ... ?> ? C'est pour faire de l'affichage et surtout à ne pas utiliser si un jour, tu dois migrer des scripts. Il vaut mieux faire des <?php echo ... ?> à la place.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $flux .= "<input type="\text\" name=\"nom\" value=\"<?=\$v['nom']?>\" />\n";
    Est identique que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="text" name="nom" value="<?=\$v['nom']?>" />
    Alors que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $flux .= '<input type="text" name="nom" value="'.$v['nom'].'"/>'."\n";
    Te donnera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="text" name="nom" value="50" />

  11. #11
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    Bonjour Chengj, je ne vois pas trop ce que tu cherches à démontrer...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $flux .= '<input type="text" name="nom" value="'.$v['nom'].'"/>'."\n";
    Ne peut absolument pas s'adapter à mon cas, puisque je veux écrire dans un fichier une ligne HTML qui inclut une portion de code PHP. Pour ça que je mets des tags <?= ?> (mettons qu'il faille <?php echo.... ?> à la place...) .
    Et aussi pour ça que je mets un antislash devant la variable : pour l'écrire en "dur" et pas l'interpréter, puisque évidemment, à ce stade, elle ne correspond à rien. Donc la ligne ci-dessus écrit dans le fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type ="text" name="nom" value="">
    Ce qui est le contraire de mon but...

  12. #12
    Membre chevronné
    Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2004
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 352
    Par défaut
    Dans ce cas, t'as plus qu'à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $flux .= '<input type="text" name="nom" value="<?=$v['nom']?>"/>'."\n";
    Et les variables ne seront pas interprétés ou sinon, faire un regex qui remplacerait xyz...xyz par <?=$... ?> ou sinon, remplacer <? et ?> par &lt;? et &gt;.

  13. #13
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    Oui, mais regarde mon post #9. A mon avis c'est la que se situe le prob. Dans le 2ème cas, où j'utilise str_replace, le source navig de la page affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="text" name="nom" value="<?=$v['nom']?>">
    En clair ! et on le voit aussi côté navig, dans le champ du form.
    Dans le 1er cas, c'est impec, on a dans le source navig:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="text" name="nom" value="">
    Ce qui est logique. Le PHP n'est pas visible côté "client". Comme si on écrivait cette ligne en dur dans une page PHP et qu'on l'affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="text" name="nom" value="<?=$v['nom']?>">
    On ne voit rien. Normal.

Discussions similaires

  1. [HTML 5] Formulaire caché non visible dans le source
    Par Thierrydu50 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 15/07/2009, 17h55
  2. [Spip] Codes typo visibles dans résumé d'article
    Par janluski dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 23/09/2008, 21h36
  3. champs cachés (dans le code), mais visibles(dans la page) : quelle techno ?
    Par knice dans le forum Général Conception Web
    Réponses: 7
    Dernier message: 18/08/2008, 17h01
  4. Réponses: 6
    Dernier message: 07/08/2008, 08h07
  5. Réponses: 2
    Dernier message: 15/06/2007, 00h35

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