Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

Scripts PHP de modifi fichier txt (résolu).


Messages recommandés

  • Modérateurs
Posté(e)

Bonjour tout le monde :P

 

Alors, je bricole pour essayer de réaliser certaines petites choses sous PHP. Le but de l'exercice est de pouvoir modifier un fichier texte, de le visualiser et de le corriger. Comme le script PHP n'est pas mon domaine, cela reste du bricolage. :P

 

Tout est dans ce répertoire test : http://gofweb.free.fr/testphp/Accueil.php

 

En l'état, il est donc possible de modifier ce fichier texte, en y insérant des lignes. Il est possible de corriger (supprimer en fait en recopiant mot pour mot la dernière valeur) la dernière valeur saisie.

 

Plusieurs petits soucis rencontrés en fait, si une âme charitable pouvait m'aiguiller.

 

***

 

J'aurais souhaité que la page "lire.php" tienne compte des retour à la ligne du fichier original, au lien d'insérer les valeurs les unes à la suite des autres (résolu!). La il s'agit d'une boucle qui lit chacune des lignes. (à noter que la fonction permettant d'annoncer l'échec de l'ouverture du fichier ne fonctionne pas non plus. Cela renvoie une erreur de script si le fichier n'est pas présent).

 

Fonction "Lire" (lire.php)

 

<?

if (!$fp = fopen("test.txt","r")) {

echo "Echec de l'ouverture du fichier";

 

exit;

 

}

 

else {

while(!feof($fp)) {

// On récupère une ligne

$Ligne = fgets($fp,255);

 

// On affiche la ligne

echo $Ligne;

 

 

// On stocke l'ensemble des lignes dans une variable

$Fichier .= $Ligne;

 

}

fclose($fp); // On ferme le fichier

}

 

?>

 

***

 

Un script devrait permettre de corriger une valeur saisie, mais il ne fonctionne que pour la dernière valeur saisie, pas pour les précédentes. (?). Cela semble être un souci de variable ?

Enfin, le script de correction, lorsqu'il supprime la valeur incriminée, supprime bien la ligne du fichier texte, mais en laissant une ligne vierge à la place. Comment y remédier pour qu'il n'y ait pas de lignes vierges ?

 

Le script de correction. D'abord le "formulaire" (correction2.php) pour saisir la valeur à supprimer (et la stocker dans une variable nommée "correction").

<form action="correction.php" method="post">

<p>

<input type="text" name="correction" /> <input type="submit" value="Valider" />

</p>

</form>

 

Enfin, le script de correction (correction.php)

<?php

// Supression d'une ligne

 

$fichier = "test.txt"; // Nom de votre fichier

$ancienneValeur = "$correction"; // valeur que l'on souhaite supprimer

$fp = fopen($fichier,"r"); // Ouverture du fichier en lecture

$fp_temp = fopen("temp.txt","w+"); // Ouverture du fichier temporaire

while (!feof($fp)) { // Parcours du fichier

$ligne = fgets($fp,4000); // On récupère le nombre de la ligne

if ($ligne!=$correction){ // Condition de placement

fwrite($fp_temp,$ligne);

}

}

 

fclose($fp); // Fermeture du fichier

fclose($fp_temp);

 

copy("temp.txt",$fichier); // On recopie le fichier temporaire obtenu

unlink("temp.txt"); // On l'efface

 

?>

 

***

 

Comme vous le constaterez sur le lien, certains se sont amusés déja avec :P Merci le chan IRC ^^.

  • Modérateurs
Posté(e)

Bonjour mushylex :P

 

Les soucis sont les suivants :

 

Que la page lire.php affiche chacune des lignes du fichier texte, en allant à la ligne pour chacune des valeurs de txt (sans modifier txt). La en l'état, chacune des lignes du txt est affichée les unes à la suite des autres sur la page "lire.php". Merci mushylex, résolu !

 

Que je puisse supprimer une valeur du fichier txt en recopiant cette valeur dans le champ de correction2.php (et pas que la dernière saisie. ) La si je saisis "a supprimer" dans le champ de saisie, et que je corrige, la valeur disparait. Car ce sera la dernière saisie à ce moment la. Par contre, une valeur antérieure, comme "valeur2" par exemple, ne disparaitra pas.

 

Que lorsqu'une valeur est corrigée, elle ne soit pas simplement effacée en laissant la ligne vierge, mais qu'elle supprime la ligne. Les lignes vierges visibles dans le txt là le sont suite à des "corrections" de valeur via le script.L'espace entre "valeur4" et "valeur6" dans le txt, vient de la suppression (via le formulaire de correction" de la "valeur5". On voit qu'il y a une ligne vierge à la place.

 

Enfin, que si le fichier txt n'existe pas, cela me l'annonce simplement, sans écrire une erreur de script. ce qui n'est pas le cas la.

 

Ouf :P

 

Edit en bleu.

  • Modérateurs
Posté(e)

Ok, je te remercie.

 

Effectivement, à présent, la page "lire2.php" renvoie chacune des valeurs du txt en allant à la ligne. Merci. :P

 

-> lire2.php

 

(pour rappel : lire.php).

 

Je vais continuer à bricoler pour le reste des soucis. :P

  • Modérateurs
Posté(e)

Ok mushylex, je te remercie. Je vais tout de même essayer de trouver une solution à ces soucis qui doivent être tout simples à résoudre -j'imagine.

 

Je vais continuer de googler et bricoler. Et en désespoir de cause, si je ne trouve pas, je me tournerais vers l'outil dont tu parles pour voir comment il fonctionne. :P

  • Modérateurs
Posté(e)

Bonjour tout le monde :P

 

Bon, soucis résolus.

 

J'ai donc récupéré le script de mushylex pour qu'il n'y ait pas d'erreur de script quand le fichier n'existe pas. Cela fonctionne correctement.

 

Pour le script de correction, S!Ri m'a apporté la solution. Le secret était dans l'utilisation de la commande trim. Voici le script :

<?php

// Supression d'une ligne

 

$fichier = "test.txt"; // Nom de votre fichier

 

 

$fp = fopen($fichier,"r"); // Ouverture du fichier en lecture

$fp_temp = fopen("temp.txt","w+"); // Ouverture du fichier temporaire

 

 

while (!feof($fp)) { // Parcours du fichier

$ligne = fgets($fp,4000); // On récupère le nombre de la ligne

if (trim($ligne)!=$correction){ // Condition de placement

fwrite($fp_temp,$ligne);

}

}

 

fclose($fp); // Fermeture du fichier

fclose($fp_temp);

 

copy("temp.txt",$fichier); // On recopie le fichier temporaire obtenu

unlink("temp.txt"); // On l'efface

 

?>

 

Ci-joint si vous voulez voir les fichiers associés : testphp.zip.

Je laisse les pages de tests quelques temps en ligne pour ceux qui veulent voir de quoi il s'agissait.

 

Merci à tous :P

 

EDIT : précisions. Si une valeur est saisie par contre avec un espace devant, l'entrée sera effectuée sans l'espace. Il faudra donc corriger (si l'on souhaite suppprimer la valeur), la ressaisir sans l'espace. Ex : saisie de "_123", sera conservé "123".

Si une ligne vierge subsiste malgré la suppression d'une valeur, une correction sans saisie, supprimera les lignes vierges d'un coup.

Voili voilou.

 

REEDIT : je garde un oeil sur le script en ligne tout de même. Pas d'abus merci.

  • Modérateurs
Posté(e)

Re :P

 

Mhm... Je cherche à améliorer une petite fonction. Dans le script à l'insterion d'une nouvelle valeur, je vais essayer de faire en sorte qu'il compare les valeurs (lignes donc) présentes dans le txt pour qu'il indique, au cas où la valeur serait déja présente "Doublon" de sorte de ne pas pouvoir saisir plusieurs fois la même valeur.

 

J'imagine qu'il va falloir faire une boucle de recherche avec la variable $valeur et écrire une condition if/else...

 

Le code en l'état d'ajout de nouvelle valeur est celui-ci :

 

Saisie de la valeur à ajouter, elle est insérée dans la variable $valeur

<form action="ecrire2.php" method="post">

<p>

<input type="text" name="valeur" /> <input type="submit" value="Valider" />

</p>

</form>

 

Et le script l'écrivant dans le fichier :

<?

$fp = fopen("test.txt","a"); // ouverture du fichier en écriture

fputs($fp, "\n"); // on va a la ligne

fputs($fp, "$valeur"); // on écrit le nom du répertoire saisi

fclose($fp);

 

?>

 

Si quelqu'un a une idée :P

 

Bon, je vais chercher de mon côté.

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...