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-JS] Insertion d'une donnée dans une page web


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 147
    Par défaut [PHP-JS] Insertion d'une donnée dans une page web
    Bonjour,

    A partir de ma page web, je sélectionne un fichier .php qui se trouve à la racine, et j'affiche tout le code source dans un textarea. Or le problème j'aimerai savoir si c'est possible que ca n'affiche pas tout le code source. Au lieu de ca ca sera un textarea vide, j'y écrit n'importe quoi et lorsque je valide le texte est envoyé à un endroit précis du fichier .php là où il y a par exemple la variable $contenu.


    Voici mon code source qui récupère un fichier quelconque, par exemple un fichier .php et l'affiche dans un textarea.


    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
    if($_GET["action"]=="mod") // Si l'on choisit de modifier une page, on demande laquelle
    {
            $rep = "C:/Program Files/EasyPHP1-8/www/Patapouf/";
            $dir = opendir($rep);
            ?>
            <form action="ajoutpage.php" method="post" name="ajoutpage">
            <fieldset><legend>Modifier une page</legend>
            <label for="nom">Nom de la page :</label><select name="nom">
            <?php
            while ($f = readdir($dir))
            {
                    if(is_file($rep.$f))
                    {
            echo '<option>'.$f.'</option>';
                    }
            }
            ?>
            </select>
            <input type="hidden" name="action" value="mod"/>
            <input type="submit" name="Envoyer"/>
            </fieldset>
            </form>
     
            <?php   
    }
     
    if($_POST["action"]=="mod") // Une fois le nom de la page donné, on affiche le formulaire permettant de modifier la page
    {
            $nom=stripslashes($_POST["nom"]) ;
            $fichier=fopen($nom, 'a+') ; // Ici a+ et non pas w+ pour ne pas écraser les données
    ?>
            <form method="post" action="ajoutpage.php" name="ajoutpage">
            <fieldset><legend>Modifier une page</legend>
            <label for="nom">Nom de la page :</label><input type="text" name="nom" maxlength="30" value="<?php echo $nom ?>" id="nom"/><br/>
            <label for="contenu">Contenu de la page :</label><textarea name="contenu" cols="50" rows="30" id="contenu" >
    <?php
      // On met comme valeur l'ancien contenu de la page
     
            while($ligne= fgets($fichier))
            {
                    echo $ligne;
            }
    ?>
            </textarea><br/>
            <input type="hidden" name="action" value="modif"/>
            <input type="submit" name="Envoyer"/>
            </fieldset>
            </form>
    <?php
    }


    Donc j'aimerai savoir comment faire pour insérer les données du textarea dans une parti du fichier php.? quel fonction utiliser ?


    Si possible j'aimerai ne pas utiliser d'include car il parait que c'est mauvais pour le référencement.

    Merci

  2. #2
    Membre émérite

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    Octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 657
    Par défaut
    fopen(), fputs() et fclose() ou plus simple : file_put_contents()

    il va falloir que l'utilisateur apache ai les droits sur le fichier à écrire ou que les permissions soient 777.

    Le référencement est en somme, basé sur ce que les robots on téléchargés comme pages avec leurs clients HTTP.
    L'include se passe du coté du serveur comme tout le code PHP, cela ne change donc strictement rien au client.

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 147
    Par défaut
    ok merci.

    fopen(), fputs() et fclose() ou plus simple : file_put_contents()
    D'accord mais fputs m'insère ce que je veux à la fin du fichier. Et moi je voudrais placé les données à écrire à un endroit précis du fichier.
    Comment pourrai-je faire ?


    il va falloir que l'utilisateur apache ai les droits sur le fichier à écrire ou que les permissions soient 777.
    En faite il n'y aura que moi qui aura accès, c'est pour me permettre de faire des mises à jours de mes pages facilement à travers le navagateur et en effet j'ai pensé à changer les CHMOD.


    Sinon une autre raison pour laquel j'évite d'utiliser l'include c'est que la page devient plus long à charger. J'ai fais le test sur une page où j'avais mis 4 includes et la page prenait plus de 4 secondes à charger par rapport à une seconde sans include.

  4. #4
    Membre émérite

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    Octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 657
    Par défaut
    Citation Envoyé par Henry9
    D'accord mais fputs m'insère ce que je veux à la fin du fichier. Et moi je voudrais placé les données à écrire à un endroit précis du fichier.
    Comment pourrai-je faire ?
    Par exemple, utiliser un marquage dans le fichier PHP cible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    /*variable*/
    $variable="blabla";
    /*variable*/
    Je penses que c'est le mieux, mais ce n'est pas nécéssaire si c'est le seul endroit ou vous déclarez la valeur de cette variable. Néanmoins :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //Récup du code cible
    $strPHP = file_gets_contents('fichier.php');
    //Remplacement de la zone
    $strPHP = preg_replace('`/\*\$'.$_POST['variable'].'\*/.*/\*\$'.$_POST['variable'].'\*/`m', '/*$variable*/'."\n".'$'.$_POST['variable'].' = "'.$_POST['nouvelle_valeur'].'"', $strPHP);
    Mais je conseille alrgement de sotcker la valeur dans une base de données, c'est fait pour ...

    Citation Envoyé par Henry9
    Sinon une autre raison pour laquel j'évite d'utiliser l'include c'est que la page devient plus long à charger. J'ai fais le test sur une page où j'avais mis 4 includes et la page prenait plus de 4 secondes à charger par rapport à une seconde sans include.
    Avec un serveur sous quel systeme d'exploitation ? Windows ? J'ai des pages avec des fichiers inclus les uns dans les autres qui sont très rapides.
    Sinon, vous pouvez essayer de compiler PHP à partir des sources pour atteindre de meilleures performances.

  5. #5
    Membre émérite Avatar de cadoudal56
    Profil pro
    Inscrit en
    Février 2005
    Messages
    694
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 694
    Par défaut
    Hello,

    Je te l'explique en langage humain car je sais que tu es bon en php et que tu t'en sortiras....

    Imaginons que tu balises ton fichier php avec des balises non interprétées en langage PHP comme par exemple
    //End Rockparty

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    //Rockparty
     
    //End Rockparty
    //Rockparty
     
    //End Rockparty
    //Rockparty
     
    //End Rockparty
    //Rockparty
    Rien ne t'empeche de charger ton fichier PHP dans la mémoire, de ledécouper en variable, de changer la variable par ce que tu viens d'écrire, et de réécrire proprement le tout dans un fichier....

    Ce qui donnerais ainsi :
    $res['data'] étant ce que tu passes comme variable
    $ary ce que tu récupères.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    preg_match_all('/\/\/Rockparty(.*)\/\/End Rockparty/i', $resp['data'], $ary, PREG_PATTERN_ORDER);
     
    $ary[3] = $mynewdata; //je remplace les infos que je veux
    Ensuite tu réécris ton fichier, par exemple en faisant un join sur le tableau ary et tu réécrie le tout dans le fichier

    @+
    cadou

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 147
    Par défaut
    is_null>

    Ok j'ai mis en pratique ce que t'avais dit. Pour commencer, j'ouvre mon fichier, et je crée mon formulaire avec deux champs: nom du fichier et un textarea vide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if($_POST["action"]=="mod") // Une fois le nom de la page donné, on affiche le formulaire permettant de modifier la page
    {
    	$nom=stripslashes($_POST["nom"]) ;
    	$strPHP = file_get_contents("$nom");
    ?>
    	<form method="post" action="ajoutpage.php" name="ajoutpage">
    	<fieldset><legend>Modifier une page</legend> 
    	<label for="nom">Nom de la page :</label><input type="text" name="nom" maxlength="30" value="<?php echo $nom ?>" id="nom"/><br/>
    	<label for="contenu">Contenu de la page :</label><textarea name="contenu" cols="50" rows="30" id="contenu" >
    	</textarea><br/>
    	<input type="hidden" name="action" value="modif"/>
    	<input type="submit" name="Envoyer"/>
    	</fieldset>
    	</form>
    Ensuite, je remplace le contenu du textarea $_POST['contenu'] à l'endroit du fichier où il y a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /*variable*/ $variable="blabla"; /*variable*/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if($_POST["action"]=="modif") // Une fois le textarea rempli, on fait le remplacement dans le fichier.
    {
    	$strPHP = preg_replace('`/\*\$'.$_POST['variable'].'\*/.*/\*\$'.$_POST['variable'].'\*/`m', '/*$variable*/'."\n".'$'.$_POST['variable'].' = "'.$_POST['contenu'].'"', $strPHP);
    	echo 'Modification effectué avec succès' ;  
     
    }
    ?>

    Une fois ceci je fais, je regarde fichier php, et je constate aucun changement.
    Saurais-tu me dire où se trouve l'erreur ?



    cadoudal56>

    J'ai réussi à comprendre le début mais pas la fin de ton explication, tu parle de:
    $res['data'] étant ce que tu passes comme variable
    $ary ce que tu récupères.
    Je ne comprend pas $res['data'], d'habitude j'utilise les tableaux associatifs après avoir fait un mysql_fetch_array ou autre fonction du même genre.
    Et donc je ne comprend pas non plus la variable $ary[3], pourquoi 3 ?


    Sinon,
    Avec un serveur sous quel systeme d'exploitation ? Windows ? J'ai des pages avec des fichiers inclus les uns dans les autres qui sont très rapides.
    Sinon, vous pouvez essayer de compiler PHP à partir des sources pour atteindre de meilleures performances.
    Le serveur est bien sous Linux, j'ai pris Pack Web Pro + Linux chez AMEN:
    http://www.amen.fr/static/index_22.html

  7. #7
    Membre émérite

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    Octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 657
    Par défaut
    Citation Envoyé par Henry9
    is_null>

    Ok j'ai mis en pratique ce que t'avais dit. Pour commencer, j'ouvre mon fichier, et je crée mon formulaire avec deux champs: nom du fichier et un textarea vide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if($_POST["action"]=="mod") // Une fois le nom de la page donné, on affiche le formulaire permettant de modifier la page
    {
    	$nom=stripslashes($_POST["nom"]) ;
    	$strPHP = file_get_contents("$nom");
    ?>
    	<form method="post" action="ajoutpage.php" name="ajoutpage">
    	<fieldset><legend>Modifier une page</legend> 
    	<label for="nom">Nom de la page :</label><input type="text" name="nom" maxlength="30" value="<?php echo $nom ?>" id="nom"/><br/>
    	<label for="contenu">Contenu de la page :</label><textarea name="contenu" cols="50" rows="30" id="contenu" >
    	</textarea><br/>
    	<input type="hidden" name="action" value="modif"/>
    	<input type="submit" name="Envoyer"/>
    	</fieldset>
    	</form>
    Ensuite, je remplace le contenu du textarea $_POST['contenu'] à l'endroit du fichier où il y a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /*variable*/ $variable="blabla"; /*variable*/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if($_POST["action"]=="modif") // Une fois le textarea rempli, on fait le remplacement dans le fichier.
    {
    	$strPHP = preg_replace('`/\*\$'.$_POST['variable'].'\*/.*/\*\$'.$_POST['variable'].'\*/`m', '/*$variable*/'."\n".'$'.$_POST['variable'].' = "'.$_POST['contenu'].'"', $strPHP);
    	echo 'Modification effectué avec succès' ;  
     
    }
    ?>

    Une fois ceci je fais, je regarde fichier php, et je constate aucun changement.
    Saurais-tu me dire où se trouve l'erreur ?
    Si vous voulez constater des changements dans un fichier php, je vous signale qu'il faut utiliser des fonctions d'écritures, fopen(), fputs(), fclose(), ou file_puts_content(). N'oubliez pas de procéder à des copies de sauvegardes avant de tester.

    S'il-vous-plaît, lisez la documentation des fonctions que nous proposons que vous ne maitrisez pas, vous ne l'avez pas fait et c'est pourquoi vous ne comprennez pas la suggestion de cadoudal56 (le code contient d'ailleurs une erreur de nom de variable).

  8. #8
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 147
    Par défaut
    Citation Envoyé par is_null
    S'il-vous-plaît, lisez la documentation des fonctions que nous proposons que vous ne maitrisez pas, vous ne l'avez pas fait et c'est pourquoi vous ne comprennez pas la suggestion de cadoudal56 (le code contient d'ailleurs une erreur de nom de variable).
    Ok, pardon. J'ai lu la doc sur preg_match_all, en faite cette fonction (corrige moi si j'ai faux) cherche tous les motifs du premier paramètre qui se trouve dans le deuxième paramètre.

    Ici pour mon cas, ce deuxième paramètre ca correspondrait au contenu de mon fichier.


    Bien, reprenons le problème autrement, cette fois ci sans textarea, je cherche à remplacer le motif rockparty par le mot "remi", voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $coucou = 'Patapouf.php'; 
    $strPHP = fopen($coucou, 'a+');
    preg_match_all('/\/\/Rockparty(.*)\/\/End Rockparty/i', $strPHP['data'], $ary, PREG_PATTERN_ORDER);
    $ary[3] = 'remi';
    fputs($strPHP, $ary[3]);
    fclose($strPHP); 
    echo 'Modification effectué avec succès' ;
    Je peux vous dire que le code marche sans erreur, mais le problème c'est que le code rajoute le mot "remi" à la fin du fichier.
    Alors où est l'erreur ?



    [EDIT]En lisant dans la documentation la fonction preg_replace et str_replace, je ne vois pas trop de différence. Pourriez vous me dire des cas concrets dans lequel on préfère utiliser preg_replace si ce n'est utiliser des expressions régulières comme motif?

    Dans mon cas, je le rappelle, je voudrai remplacer un caractère dans le fichier par une chaine de caractères tiré d'un textarea qui contiendra sans doute du code xhtml.
    Donc quel fonction de remplacement me conseillez vous ?

Discussions similaires

  1. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 17h37
  2. [WD16] Lecture donnée d'une base dans une valeur d'une autre base
    Par gef13 dans le forum WinDev
    Réponses: 2
    Dernier message: 16/11/2011, 09h05
  3. [AC-2003] insert des données d'une table dans une table d'une base externe
    Par marieo dans le forum VBA Access
    Réponses: 1
    Dernier message: 30/11/2009, 14h29
  4. Réponses: 3
    Dernier message: 29/04/2008, 14h14
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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