Hola pateketrueke,
Me he tenido que quedar a revisarlo porque si no, no duermo. Pensarás que estoy tonto, pero no lo veo, lo he cambiado así y tampoco da resultado:
Código PHP:
<?php
//Activamos la visualización de todo tipo de errores y notificaciones
error_reporting(E_ALL);
ini_set("display_errors", 1);
//Definimos zona horaria
date_default_timezone_set('Europe/Madrid');
setlocale(LC_ALL, "spanish", "es", "es_ES@euro","es_ES","esp");
// Cargamos datos comunes a todo el sistema
require_once ("datos_sistema.php");
//creo una conexión con la base de datos
$db = new SpoonDatabase(CONTROLADOR, SERVIDOR, USUARIO, CLAVE, BASE_DATOS);
define('PATH', '/la_ruta_completa_al_archivo/');
$cantidad = $db->getRecords("SELECT id FROM tabla");
//Cuento el total de elementos para no pasarme al actualizar los archivos
$total = count($cantidad);
//Recibo y limpio las variables que legan por $_GET
if ( (isset($_GET['num1'])) && (!empty($_GET['num1'])) ) {
$maximo = trim(htmlentities(strip_tags($_GET['num1'])));
}
if ( (isset($_GET['num2'])) && (!empty($_GET['num2'])) ) {
$minimo = trim(htmlentities(strip_tags($_GET['num2'])));
}
//Aquí hago un condicional para que si me paso de
//número en las variables que envío, se quede en el máximo
if ($maximo<=$total) {
$maximo = $maximo;
} else {
$maximo = $total;
}
$minimo = $minimo;
//Creo la función para leer y modificar los archivos
function leer_fichero_completo($nombre_fichero, $dato1_a_agregar, $dato2_a_agregar){
global $minimo, $maximo, $db;
//Como hay que modificar todos los archivos según los datos de la
//base de datos, hago un bucle que obtiene los datos de la base de datos
for($i=$minimo;$i<=$maximo;$i++) { //bucle que obtiene los datos
//Hago una petición para que me muestre todos los registros de la tabla
//que coincidan con el id enviado, esto genera un array unidimensional
$datos = $db->getRecord("SELECT
id,
nombre_archivo,
dato1_a_agregar,
dato2_a_agregar
FROM tabla
WHERE id=?", $i);
//Paso los datos recibidos a variables
$nombre_archivo = $datos['nombre_archivo'];
$dato1_a_agregar = $datos['dato1_a_agregar'];
$dato2_a_agregar = $datos['dato2_a_agregar'];
$ext = ".ext";
$first = substr($nombre_archivo,0,1);
//Empiezo a trabajar con el archivo (o archivos, claro)
if (!file_exists($nombre_fichero)) {
echo "No existe el fichero";
}
if (!is_writable($nombre_fichero)) {
echo "El archivo no es escribible";
}
//abrimos el archivo de texto y obtenemos el identificador
$fichero_texto = fopen ($nombre_fichero, "r");
//obtenemos de una sola vez todo el contenido del fichero
//OJO! Debido a filesize(), sólo funcionará con archivos de texto
$contenido_fichero = fread($fichero_texto, filesize($nombre_fichero));
$contenido_fichero = $contenido_fichero . $dato1_a_agregar . "\n" . $dato2_a_agregar . "\n"; //Agrego los datos que necesito
//Actualizamos el archivo con el nuevo valor
$fp = fopen($nombre_fichero,"w+");
fwrite($fp, $contenido_fichero, 1024);
fclose($fp);
return $contenido_fichero;
} //Fin del bucle que obtiene los datos
} //Fin de la función leer_fichero_completo()
//Como hay que modificar todos los archivos según los datos de la
//base de datos, hago un bucle que, por un lado obtiene los datos
//de la base de datos, y por otro lado, modifica los archivos
//correspondientes mediante la función anterior
for($i=$minimo;$i<=$maximo;$i++) { //Bucle para ejecutar la función las veces que sea necesario
//Hago una petición para que me muestre todos los registros de la tabla
//que coincidan con el id enviado, esto genera un array unidimensional
$datos2 = $db->getRecord("SELECT
id,
nombre_archivo,
dato1_a_agregar,
dato2_a_agregar
FROM tabla
WHERE id=?", $i);
$nombre_archivo2 = $datos2['nombre_archivo'];
$dato1_a_agregar2 = $datos2['dato1_a_agregar'];
$dato2_a_agregar2 = $datos2['dato2_a_agregar'];
$ext2 = ".ext";
$first2 = substr($nombre_archivo2,0,1);
$nombre_fichero2 = PATH . $first2 ."/".$nombre_archivo2.$ext2;
//Aquí ejecuto la función pasando los parámetros necesarios
$contenido = leer_fichero_completo($nombre_fichero2, $dato1_a_agregar2, $dato2_a_agregar2);
//Esto es una prueba para ver que los datos son correctos.
//$contenido = $nombre_fichero2 ."<br>". $dato1_a_agregar2 ."<br>". $dato2_a_agregar2;
//Con esto notifico qué archivo se ha modificado y los datos modificados en cada archivo
echo $i . ".- Se ha actualizado el archivo <b>" . $nombre_archivo2 . "</b> con los datos <b>" . $dato1_a_agregar2 . "</b> y <b>" . $dato2_a_agregar2 . "</b><br>";
//En esta línea muestra los datos que deben ser, pero en el contenido de cada archivo, no
//Con esto muestro el nuevo contenido de cada archivo para ver si está correcto.
echo "<pre>";
echo $contenido;
echo "</pre>";
//Aquí es donde veo que el contenido de cada archivo no es correcto, lo explico fuera del código
} //Fin del bucle para ejecutar la función las veces que sea necesario
?>
Así está todo dentro de los correspondientes bucles, pero solo me muestra agregado el dato2 en el archivo, sin embargo en el echo donde notifico el resultado sí me lo muestra bien:
Código PHP:
//Con esto notifico qué archivo se ha modificado y los datos modificados en cada archivo, aquí sí lo muestra bien.
echo $i . ".- Se ha actualizado el archivo <b>" . $nombre_archivo2 . "</b> con los datos <b>" . $dato1_a_agregar2 . "</b> y <b>" . $dato2_a_agregar2 . "</b><br>";
//Con esto muestro el nuevo contenido de cada archivo para ver si está correcto. pero aquí no aparece como en la línea anterior.
echo "<pre>";
echo $contenido;
echo "</pre>";
Si me puedes especificar más lo que tengo mal, te lo agradecería un montón.