PHP: Recuperar/modificar datos de un archivo de texto
Resuelto
ced29
-
R4f Mensajes publicados 441 Estado Miembro -
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="<?php echo htmlspecialchars($nomterminal); ?>" />
<input type="submit" value="Envoyer" />
</form>
Adresse IP
<input type="text" name="adrip" value="<?php echo htmlspecialchars($adrip); ?>" />
```
<?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="<?php echo htmlspecialchars($nomterminal); ?>" />
<input type="submit" value="Envoyer" />
</form>
Adresse IP
<input type="text" name="adrip" value="<?php echo htmlspecialchars($adrip); ?>" />
```
6 respuestas
Bueno, te he hecho la solución completa:
Datos (archivo donnees.txt):
Punto de entrada principal del programa (lista_terminaux.php):
Visualización del formulario de un terminal (form_terminal.php):
Modificación de un terminal (modif_terminal.php):
En mi caso funciona.
Espero que a ti también te funcione y que haga lo que quieres!
Raph
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
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
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
```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>
```
<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>
```
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!
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!
Hola,
sí, file_put_contents es específico de PHP5... pero basta con definirlo en PHP4:
Raph
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
Hola,
Existe un proyecto PHP que parece funcionar bien para gestionar el contenido de archivos Excel (XLS):
https://sourceforge.net/projects/phpexcelreader/
Raph
Existe un proyecto PHP que parece funcionar bien para gestionar el contenido de archivos Excel (XLS):
https://sourceforge.net/projects/phpexcelreader/
Raph
¡Hasta luego!