PHP: Recupérer/modifier données fichier texte [Résolu/Fermé]

Signaler
-
Messages postés
441
Date d'inscription
dimanche 13 janvier 2008
Statut
Membre
Dernière intervention
5 mai 2008
-
Bonjour, je souhaite pouvoir récupérer des données d'un fichier texte et qu'elles soient affichées sur ma page php, mais je veux aussi pouvoir modifier les données que j'ai récupérer et pouvoir réecrire par dessus et que ça se répercute dans mon fichier texte.


voici la forme de ma page :



Nom du terminal : (champ texte)

Adresse IP : (champ texte)

...




Envoyer(bouton submit)



Donc dans le champ texte je dois récupérer les données correspondantes présentes dans le fichier texte, du coup voici le début de mon code :

<?
$fp = fopen("data.txt","r+");

fseek($fp,1085);
$nomterminal = fgets($fp,7);
fseek($fp,153);
$adrip = fgets($fp,255);

...etc

?>



et voici le code au niveau de mes champs de texte :

<td><font color="#0000CC" size="2">Nom du terminal</font></td>
<td><form name="form5" method="post" action="">
<font color="#0000CC">
<input type="text" name="nomterminal" value="<? echo $nomterminal; ?>">
</font></form></td>
</tr>
<tr>
<td><font color="#0000CC" size="2">Adresse IP</font></td>
<td><font color="#0000CC">
<input type="text" name="adrip" value="<? echo $adrip; ?>">
</font></td>
</tr>



donc voila globalement. J'arrive à afficher les données souhaitées dans les champs textes , maintenant ce que je veux faire c'est que lorsque j'écris dans un champ texte quelconque (exemple : nom du terminal = test) et que je clique sur le bouton envoyer ça modifie la donnée dans le fichier texte en écrasant l'ancienne . Et c'est là que je bloque.



Merci d'avance pour votre aide.
Tchao

6 réponses

Messages postés
441
Date d'inscription
dimanche 13 janvier 2008
Statut
Membre
Dernière intervention
5 mai 2008
61
Bon, je t'ai fait la solution complète :

Données (fichier donnees.txt) :
terminal3,192.368.0.3
terminal1,192.168.0.1
terminal2,192.268.0.2
terminal4,192.468.0.4



Point d'entrée principal du programme (liste_terminaux.php) :

<?php

$nom_fichier = 'donnees.txt';


$terminaux = file($nom_fichier);

foreach ($terminaux as $index => $donnee) {
        list($nom, $adresse) = explode(',', $donnee);
        $infos_terminal[$index]['nom'] = $nom;
        $infos_terminal[$index]['adresse'] = $adresse;
}


?>
<html><head><title>Terminaux disponibles</title></head><body>
<h1>Terminaux disponibles</h1>
<ul>
<?php
        foreach($infos_terminal as $index => $donnees) {
                echo "<li><a href=\"form_terminal.php?ligne=$index\">{$donnees['nom']} - {$donnees['adresse']} </a></li>";
        }
?>
</ul>
</body>
</html>



Affichage formulaire d'un terminal (form_terminal.php) :

<?php

if (!is_numeric($_GET['ligne'])) {
        header('Location: liste_terminaux.php');
        exit();
}

$ligne = (int) $_GET['ligne'];
$nom_fichier = 'donnees.txt';
$terminaux = file($nom_fichier);

list($nom, $adresse) = explode(',', $terminaux[$ligne]);



?>
<html><head><title>Modification du terminal <?=$ligne ?></title></head><body>
<h1>Modification du terminal <?=$ligne ?></h1>
<form action="modif_terminal.php" method="post">
<input type="hidden" name="ligne" value="<?=$ligne ?>">
Nom du terminal : <input type="text" name="nom" value="<?=$nom ?>"><br/>Adresse IP : <input type="text" name="adresse" value="<?=$adresse ?>"><br/>

<input type="submit" value="Modifier">
</form>
</body>
</html>



Modification d'un terminal (modif_terminal.php) :


<?php


$ligne = (int) $_POST['ligne'];
$nom = $_POST['nom'];
$adresse = $_POST['adresse'];


$nom_fichier = 'donnees.txt';
$terminaux = file($nom_fichier);

$terminaux[$ligne] = "$nom,$adresse\n";

file_put_contents($nom_fichier, implode("",$terminaux));
header('Location: liste_terminaux.php');
exit();
?>


Chez moi ça marche.


J'espère que chez toi aussi et que ça fait ce que tu veux !

Raph
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

salut merci beaucoup de ton aide, désolé j'ai été absent pendant 2 jour, je vais tester ton code , je te tiens au courant
@+
Messages postés
441
Date d'inscription
dimanche 13 janvier 2008
Statut
Membre
Dernière intervention
5 mai 2008
61
Salut,

En fait, tu es dans le cas hyper-classique où tu ferais mieux de mettre tes données dans une base de données relationnelle. Éventuellement, tu peux faire ça avec une base de données SQLite.

Bon, sinon, pour répondre à ta question, généralement on ne se déplace par dans les fichiers textes, car on est confronté à la même problématique que toi. Naturellement, avec un éditeur de texte, on croit qu'on peut insérer facilement des données dans un fichier texte, mais en fait, les caractères qui suivent doivent être également décalés. En cas de destruction de texte, les caractères qui suivent doivent également être décalés vers la gauche... Galère !

Donc ce qu'on fait si le fichier de données n'est pas trop gros :
1- on lit le fichier original (AAAA.txt) (ex. avec file() http://fr3.php.net/manual/fr/function.file.php)
2- on le détruit (ou plutôt on le renomme, on ne sait jamais..., par exemple en AAAA.old)
3- dans les données qu'on a en mémoire, on fait les modifs appropriées
4- on écrit les données dans AAAA.txt (nouveau fichier) par exemple avec file_put_contents (http://fr3.php.net/manual/fr/function.file-put-contents.php)


Raph
merci de ton aide , tu peux juste me donner le code pour mon premier champ texte (en admettant que la donnée que l'on veut récupérer se trouve à la ligne 2 du fichier texte au 15ème caractère) et que l'on puisse réecrire par dessus .
@+
salut j'ai testé ce que tu m'as filé , ça marche quasiment sauf que quand je veux modifier une donnée ça me met : Fatal error: Call to undefined function: file_put_contents() ... on line 7
apparement ça viendrait du faite que j'ai pas php 5???
comment puis-je modifier le code du coup pour que ça fonctionne?

merci d'avance
@+
Messages postés
441
Date d'inscription
dimanche 13 janvier 2008
Statut
Membre
Dernière intervention
5 mai 2008
61
salut,

eh oui, file_put_contents est spécifique à PHP5... mais il suffit de la définir en PHP4 :

function file_put_contents($filename, $data)
{
  if( $file = fopen($filename, 'w') )
  {
    $bytes = fwrite($file, is_array($data) ? implode('', $data) : $data);
    fclose($file); return $bytes; // return the number of bytes written to the file
  }
}



Raph
je suis en train de créer un site web. j'ai fait la création de plusieurs formulaires. le problème c'est que les données qui vont être affichées dans un formulaire sont initialement existantes dans un fichier excel.Comment alors récupérer les données qui existent dans un fichier excel dans le formulaire dont j'ai besoin par l'intermidiaire du code php ,ou javascript.
Messages postés
441
Date d'inscription
dimanche 13 janvier 2008
Statut
Membre
Dernière intervention
5 mai 2008
61
Salut,


Il existe un projet PHP qui a l'air de bien marcher pour gérer le contenu de fichiers Excel (XLS) :

https://sourceforge.net/projects/phpexcelreader/


Raph