Résolu Editer un fichier

  • Auteur de la discussion arbilus
  • Date de début

arbilus

Expert
Bonjours, j'ai encore besoin de vous: est-il possible d'éditer un fichier html à un endroit spécifique. Je connais ça pour l'instant:

<?

$fp = fopen("test.html","w+" );

fputs($fp, "" );
fputs($fp, $_POST['xxx']);

fclose($fp);

?>


Je veux dire par là que le fichier html serait modifié (exemple: une phrase)
 

marsien

Grand Maître
Oui, mais c'est plus compliqué ! L'idée globale est d'ouvrir le fichier (fopen), de lire son contenu (plusieurs fonctions possibles selon les cas et les besoins), de travailler dessus le contenu avec un script php qui répond à ce que tu veux faire (là il faut que tu le crées), d'écrire le contenu dans le fichier en écrasant ce qui y était avant (plusieurs fonctions aussi selon les cas et les besoins), fermer le fichier (fclose).
 

arbilus

Expert
Un type m'a donné ça comme code:

[cpp]<?
$chainerecherche= // Ce que tu recherche
$fichier= "nom_du_fichier"; // Nom du fichier


$chaine= fichier($fichier);
if (ereg($chainecherche,$chaine)){
$chaine=str_replace($chainerecherche,$chaine);
ajouttxt($fichier,$chaine);
}


function ajouttxt($fichier,$txt=''){
if ($txt==""){ // Lit le fichier
$fp = fopen ($fichier, "r");
$contenu_du_fichier = fgets ($fp);
return $contenu_du_fichier;
}else{ //Ecris dans le fichier
$fp = fopen($fichier, 'w');
fwrite($fp, $txt);
}
close $fp;
}

?> [/cpp]

Qu'en penses-tu?
Car ici je ne vois pas comment faire pour modifier le contenu ciblé du fichier avec les données du formulaire d'envoi de type "post"
(comme le script initial que j'avais donné: celui-ci modifier le fichier en ajoutant les données du formulaire de type post)
 

marsien

Grand Maître
Ce code est un bon début. $chaine est le contenu d'une variable POST et $chainerecherche est le texte de ton fichier que tu veux modifier.

En gros il faut que tu fasses un boucle sur le tableau associatif $POST et que tu remplaces par exemple dans le fichier html le nom de la variable post par sa valeur (c'est ce que fait ereg dans le code qu'on t'a donné).

Par exemple, si tu as $_POST['nom_membre'] = 'dupont', le code va remplacer le mot 'nom_membre' de ton fichier html initial par la valeur 'dupont'.
 

arbilus

Expert
Le type a changé son script car apparement celui-ci ne répondait pas aux attentes: il ne prenait pas en compte le formulaire d'envoi.

Donc voici le code:

[cpp]<?
$chainerecherche= // Ce que tu recherche
$chaineremp= // Chaine à mettre à la place de la précédente
$fichier= "nom_du_fichier"; // Nom du fichier


$chaine= fichier($fichier);
if (ereg($chainecherche,$chaine)){
$chaine=str_replace($chainerecherche,$chaineremp,$chaine);
ajouttxt($fichier,$chaine);
}


function ajouttxt($fichier,$txt=''){
if ($txt==""){ // Lit le fichier
$fp = fopen ($fichier, "r");
$contenu_du_fichier = fgets ($fp);
return $contenu_du_fichier;
}else{ //Ecris dans le fichier
$fp = fopen($fichier, 'w');
fwrite($fp, $txt);
}
close $fp;
}

?> [/cpp]


Il a notamment dit:

ex:
[cpp]$chainerecherche='<form name=form0 method="post">';
$chaineremp='<form name=form1 method="post">';[/cpp]


En faite je connais rien en php. Mais à force d'en voir je commence à comprendre :D .
J'aimerais que tu m'aides à comprendre ce script.

Si j'ai ça comme formulaire d'envoi de données:

[cpp]<form method="post" action="1.php" enctype="multipart/form-data">
<input maxlength="300" name="text">
<input type="submit" name="submit" value="Valider" />
</form>[/cpp]

Comment modifier le script qu'il m'a donné pour faire en sorte de modifier la partie du fichier html (le fichier cible) par les données du formulaire ?
 

arbilus

Expert
ça avance!

Quand il écrit: [cpp]$chainerecherche='<form name=form0 method="post">';[/cpp]
C'est un exemple que veut dire qu'il recherche [cpp]'<form name=form0 method="post">';[/cpp] ?

Et quand il écrit: [cpp]$chaineremp='<form name=form1 method="post">';[/cpp]
Cela veut dire qu'il remplace ce qui est recherché par ce qu'à écris le type dans le formulaire ?

Donc j'ai testé le script:
[cpp]$chainerecherche='1';// Ce que tu recherche
$chaineremp='<form name=xxx method="post">'; // Chaine à mettre à la place de la précédente
$fichier= "test.html"; // Nom du fichier


$chaine= fichier($fichier);
if (ereg($chainecherche,$chaine)){
$chaine=str_replace($chainerecherche,$chaineremp,$chaine);
ajouttxt($fichier,$chaine);
}


function ajouttxt($fichier,$txt=''){
if ($txt==""){ // Lit le fichier
$fp = fopen ($fichier, "r");
$contenu_du_fichier = fgets ($fp);
return $contenu_du_fichier;
}else{ //Ecris dans le fichier
$fp = fopen($fichier, 'w');
fwrite($fp, $txt);
}
fclose($fp);
} [/cpp]

Je l'ai modifié à ma guise comme vous pouvez le voir. (déja il y avait une faute: c'était [cpp]fclose($fp);[/cpp] à l'avant dernière ligne)

Mais là, ça ne fonctionne pas. Il est écrit: Fatal error: Call to undefined function fichier() in /home/arbilus/public_html/1.php on line 35

Et la ligne 35 c'est: [cpp]$chaine= fichier($fichier);[/cpp]

Pouvez-vous m'aider à régler le problème ?
 

arbilus

Expert
Problème résolu à la ligne 35:
Il fallait mettre $chaine= ajouttxt($fichier);

Mais maintenant j'ai un autre problème:
ça me met:

"Warning: ereg() [function.ereg]: REG_EMPTY in /home/arbilus/public_html/1.php on line 36"

et la ligne 36 = if (ereg($chainecherche,$chaine)){
 

arbilus

Expert
J'ai des nouvelles:

Le code serait plutôt:

[cpp]$recherche = 'H3llo W0rld!'; // La chaine a chercher
$remplace = 'Hello World!'; // La chaine a remplacer
$fichier = 'test.html'; // Le fichier

file_put_contents($fichier, str_replace($recherche, $remplace, file_get_contents($fichier)));[/cpp]

Seulement cela modifie les données mais sans passer par le formulaire.
Donc comment faire pour modifier en passant par mon formulaire ?

J'ai essayé de faire ça:
[cpp]$recherche = '1qfafazjlkhoisdfjljklqdfoi'; // La chaine a chercher
$remplace = '<form name=xxx method="post">;' // La chaine a remplacer
$fichier = 'test.html'; // Le fichier

file_put_contents($fichier, str_replace($recherche, $remplace, file_get_contents($fichier)));
[/cpp]
Mais ça interprète [cpp]'<form name=xxx method="post">;'[/cpp] comme un message et non comme un code pour formulaire
 

Chris022

Habitué
Salut,

"comme un message" qu'entends-tu par là ?

ça serait pas plutôt :
[cpp]'<form action="" name="url" method="post">';[/cpp]
Le point-virgule vient à la fin de l'affectation.
 

arbilus

Expert
J'entend par message que c'est <form name=xxx method="post"> qui est l'expression remplaçant l'expression d'origine dans le fichier (dans mon exemple: "1qfafazjlkhoisdfjljklqdfoi" devient "<form name=xxx method="post">" .

Alors que je veux que ce soit <form name=xxx method="post"> qui fasse en sorte que "1qfafazjlkhoisdfjljklqdfoi" soit remplacé par l'expression que le type aura tapé dans le formulaire.

edit: si je fait comme tu dit:
ça fonctionne pas: pas de message d'erreur et ça modifie bien la ligne demandé...
Mais il y a un problème:


Exemple: j'ai pris un fichier que j'ai nommé test.html, ce fichier a pour code:
[cpp]sqdlfkqsdfklj<br><br>1qfafazjlkhoisdfjljklqdfoi<br><br><br>DSFLJKDFQF<br>[/cpp]


Ce qui donne à l'affichage:

sqdlfkqsdfklj

1qfafazjlkhoisdfjljklqdfoi


DSFLJKDFQF


Et une fois le script mis en marche, le fichier a pour code:
[cpp]sqdlfkqsdfklj<br><br><form name=xxx method="post"><br><br><br>DSFLJKDFQF<br>
[/cpp]

Ce qui affiche:
sqdlfkqsdfklj




DSFLJKDFQF


En faite avec le script que tu m'a donné ça interprète
[cpp]<form name=xxx method="post">[/cpp]
comme un nouveau "message" et non comme une commande pour interpréter les données transmises par le formulaire d'envoi.
 

Chris022

Habitué
Ah d'accord je n'avais pas compris ce que tu voulais faire!

Voilà un exemple qui devrait marcher:
[cpp]

<form action="" name="url" method="post">
<input type="text" name="chainearemplacer" value="" />
<input type="submit" name="envoi" value="Remplacer" />
</form>

<?php //début code php

if (isset($_POST['envoi'])){
$recherche = '1qfafazjlkhoisdfjljklqdfoi'; // La chaine a chercher
$remplace = isset($_POST['chainearemplacer'])?$_POST['chainearemplacer']:""; // La chaine a remplacer
$fichier = 'test.html'; // Le fichier

file_put_contents($fichier, str_replace($recherche, $remplace, file_get_contents($fichier)));

} //fin if
?>

[/cpp]

Tous ça à placer dans un fichier .php et tu peux changer les noms que j'ai utilisé bien sûr, mais attention à la cohérence.
 

arbilus

Expert
ENORME !!!!


ça fonctionnneee !!!!


COMMENT DIRE... MERCCIIIIIII !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Vous êtes super sympas sur ce forum ! Je sais pas comment vous remercier. Mais si je peux par exemple faire la promo d'un de vos sites sur mon site. N'hésitez pas, ce sera VRAIMENT un plaisir.

Merci encore
 

Chris022

Habitué
Mais de rien, on est là pour aider ;) si tu as d'autres questions...
C'est très gentil, mais perso je n'ai pas de site pour l'instant
 

arbilus

Expert
Dommage, parce que tu t'en sortirai très bien avec une bonne idée .

Autrement, avec le script que tu m'a donné, cela modifie un fichier. Mais comment faire pour qu'une fois le script exécuté cela affiche le lien menant au fichier édité.
En sachant que ce fichier édité appartient à un dossier où le nom a été créé "au hasard".

... ça se complique hein :D ?

(je veux faire une service où le type peut créer "sa page perso")
 

Chris022

Habitué
Meilleure réponse
J'espère avoir saisi ce que tu voulais faire.

[cpp]<form action="" name="url" method="post">
<input type="text" name="chainearemplacer" value="" />
<input type="submit" name="envoi" value="Remplacer" />
</form>

<?php //début code php

if (isset($_POST['envoi'])){
$recherche = '1qfafazjlkhoisdfjljklqdfoi'; // La chaine a chercher
$remplace = isset($_POST['chainearemplacer'])?$_POST['chainearemplacer']:""; // La chaine a remplacer
$fichier = 'test.html'; // Le fichier

file_put_contents($fichier, str_replace($recherche, $remplace, file_get_contents($fichier)));

//ici -> ton script qui permet de déplacer le fichier

$chemin = $rep_aleatoire.'/'.$fichier; //$fichier est "test.html"
?>
<a href="<?php echo $chemin; ?>">Voir le fichier</a>
<?php } //fin if
?>
[/cpp]
 

arbilus

Expert
ça marche ! Et si je veux faire en sorte que sur une page html ce lien s'ajoute dans une div ? (si je deviens lourd tu me le dis. Je veux pas ennuyer qui que ce soit. J'irais demander sur d'autres forums ça me gênerais pas)
 

Chris022

Habitué
Simplement comme ça
[cpp]<?php
//ici -> Tout le code php
?>
<html>
...
<head>...</head>
<body>
<div id=contenu">
<?php if (isset($_POST['envoi'])){ ?>
<a href="<?php echo $chemin; ?>">Voir le fichier</a>
<?php } ?>
</div>
</body>
</html>[/cpp]
 

arbilus

Expert
Non, c'est pas vraiment ça.

En faite je voudrais cela:

formulaire complété -> création du dossier avec nom au hasard -> edition du fichier que contient ce nouveau dossier créé avec les données du formulaire.

Tout ça c'est ok (grace à vous). Mais seulement ce que je voudrais c'est qu'une fois sur la page membre, le type puisse lancer le procédé en amont et que sur sa page membre soit inscrit dans une div tous "ses espaces" perso (les dossiers qu'il aura créé grace au script) par les liens de ceux-ci.

Ainsi ça lui ferai un compte où il aurait accès à tous ces espaces persos.
Mais en ce qui concerne l'espace membre j'ai vu un tuto sur internet très bien expliqué. Seulement je prépare le terrain avant de le créer :) .
 

Chris022

Habitué
Si j'ai bien compris, tu veux que dans l'espace membre de chaque utilisateur il voie les chemin des dossiers qu'il a créé ($rep_aleatoire).
Dans ce cas, le plus simple est de stocker ces chemins dans une base de données (il faut en posséder une chez ton hébergeur) et ensuite tu affiches simplement le contenu de la base...
 

arbilus

Expert
Ok, donc je créé l'espace membre avec tout ce qui concerne la base de donnée. Mais après je vois vraiment pas comment faire ce que tu dis: c'est en rapport avec du php ?

Edit: c'est bon, j'ai cherché et trouvé un truc intéressant à ce sujet. J'essai de comprendre par moi-même puis je te demande si j'ai un ptit problème (si tu voudras encore m'aider -> J'ai besoin de toi :D, et ça m'enerve car je préfère toujours me débrouiller par moi-même... Mais là, apprendre vraiment le php j'ai pas le temps)
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 134
Messages
6 718 070
Membres
1 586 394
Dernier membre
Manoushk
Partager cette page
Haut