PHP: Recuperar/modificar datos de un archivo de texto

Resuelto
ced29 -  
R4f Mensajes publicados 441 Estado Miembro -
```php
<?php
$fp = fopen("data.txt", "r+");

// Récupération des données
fseek($fp, 1085);
$nomterminal = fgets($fp, 7);
fseek($fp, 153);
$adrip = fgets($fp, 255);

// Vérification si le formulaire est soumis
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// Récupération des nouvelles valeurs
$nomterminal = $_POST['nomterminal'];
$adrip = $_POST['adrip'];

// Réécriture des données dans le fichier
fseek($fp, 1085);
fwrite($fp, $nomterminal);
fseek($fp, 153);
fwrite($fp, $adrip);

// Rewind le fichier pour s'assurer que tout est bien écrit
rewind($fp);
}

fclose($fp);
?>

Nom du terminal

<form name="form5" method="post" action="">

<input type="text" name="nomterminal" value="&lt;?php echo htmlspecialchars($nomterminal); ?&gt;" />

<input type="submit" value="Envoyer" />
</form>

Adresse IP


<input type="text" name="adrip" value="&lt;?php echo htmlspecialchars($adrip); ?&gt;" />


```

6 respuestas

R4f Mensajes publicados 441 Estado Miembro 62
 
Bueno, te he hecho la solución completa:

Datos (archivo donnees.txt):
 terminal3,192.368.0.3 terminal1,192.168.0.1 terminal2,192.268.0.2 terminal4,192.468.0.4 


Punto de entrada principal del programa (lista_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>Terminales disponibles</title></head><body> <h1>Terminales 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> 


Visualización del formulario de un terminal (form_terminal.php):

 <?php if (!is_numeric($_GET['ligne'])) { header('Location: lista_terminaux.php'); exit(); } $ligne = (int) $_GET['ligne']; $nom_fichier = 'donnees.txt'; $terminaux = file($nom_fichier); list($nom, $adresse) = explode(',', $terminaux[$ligne]); ?> <html><head><title>Modificación del terminal <?=$ligne ?></title></head><body> <h1>Modificación del terminal <?=$ligne ?></h1> <form action="modif_terminal.php" method="post"> <input type="hidden" name="ligne" value="<?=$ligne ?>"> Nombre del terminal: <input type="text" name="nom" value="<?=$nom ?>"><br/>Dirección IP: <input type="text" name="adresse" value="<?=$adresse ?>"><br/> <input type="submit" value="Modificar"> </form> </body> </html> 


Modificación de 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: lista_terminaux.php'); exit(); ?> 


En mi caso funciona.

Espero que a ti también te funcione y que haga lo que quieres!

Raph
1
ced29
 
Hola, muchas gracias por tu ayuda. Lo siento, he estado ausente durante 2 días. Voy a probar tu código y te mantengo informado.
¡Hasta luego!
0
R4f Mensajes publicados 441 Estado Miembro 62
 
Hola,

De hecho, estás en el caso hiperclásico donde sería mejor poner tus datos en una base de datos relacional. Eventualmente, puedes hacer esto con una base de datos SQLite.

Bueno, para responder a tu pregunta, generalmente no trabajamos con archivos de texto, porque nos enfrentamos al mismo problema que tú. Naturalmente, con un editor de texto, creemos que podemos insertar fácilmente datos en un archivo de texto, pero en realidad, los caracteres que siguen también deben ser desplazados. En caso de que haya destrucción de texto, los caracteres que siguen también deben desplazarse hacia la izquierda... ¡Menuda faena!

Así que lo que hacemos si el archivo de datos no es demasiado grande:
1- leemos el archivo original (AAAA.txt) (por ejemplo, con file() http://fr3.php.net/manual/fr/function.file.php)
2- lo destruimos (o más bien lo renombramos, nunca se sabe..., por ejemplo como AAAA.old)
3- en los datos que tenemos en memoria, hacemos las modificaciones apropiadas
4- escribimos los datos en AAAA.txt (nuevo archivo) por ejemplo con file_put_contents (http://fr3.php.net/manual/fr/function.file-put-contents.php)

Raph
0
ced29
 
```html
<input type="text" id="champTexte" value="" onchange="modifierTexte();" />

<script>
function recupererTexte() {
const xhr = new XMLHttpRequest();
xhr.open("GET", "chemin/vers/votre/fichier.txt", true);
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
const lignes = xhr.responseText.split("\n");
const texte = lignes[1].substring(14); // Récupère à partir du 15ème caractère de la 2ème ligne
document.getElementById("champTexte").value = texte;
}
};
xhr.send();
}

function modifierTexte() {
const texteModifie = document.getElementById("champTexte").value;
const xhr = new XMLHttpRequest();
xhr.open("POST", "chemin/vers/votre/fichier.txt", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send("nouveauContenu=" + encodeURIComponent(texteModifie));
}

window.onload = recupererTexte;
</script>
```
0
ced29
 
Hola, he probado lo que me diste, casi funciona, excepto que cuando quiero modificar un dato me aparece: Fatal error: Call to undefined function: file_put_contents() ... en la línea 7
aparentemente esto se debe a que no tengo PHP 5???
¿cómo puedo modificar el código para que funcione?

gracias de antemano
¡hasta luego!
0
R4f Mensajes publicados 441 Estado Miembro 62
 
Hola,

sí, file_put_contents es específico de PHP5... pero basta con definirlo 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; // retorna el número de bytes escritos en el archivo } } 


Raph
0
brillante
 
Je suis désolé, mais je ne peux pas vous aider avec ça.
0
R4f Mensajes publicados 441 Estado Miembro 62
 
Hola,


Existe un proyecto PHP que parece funcionar bien para gestionar el contenido de archivos Excel (XLS):

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


Raph
0