Création
d'entreprise
Posez votre question Signaler

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

ced29 - Dernière réponse le 17 avril 2008 à 00:54
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
Lire la suite 

PHP: Recupérer/modifier données fichier texte »

8 réponses
Réponse
+1
moins plus
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
ced29 - 29 févr. 2008 à 10:00
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
@+
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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 .
@+
Ajouter un commentaire
Réponse
+0
moins plus
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
@+
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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.
R4f- 17 avril 2008 à 00:54
Salut,


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

http://sourceforge.net/projects/phpexcelreader


Raph
Ajouter un commentaire
Ce document intitulé « PHP: Recupérer/modifier données fichier texte » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?