Hola pateketrueke,
Muchas gracias por responder y por tomarte el tiempo de leer mi código (aunque no se entienda...
) Yo tengo la mala costumbre de separar mediante líneas en vez de indentar, malos vicios que va adquiriendo uno...
Te copio de nuevo el código a ver si ahora se ve más claro, si ves que aún así no se entiende, dime cómo o qué necesitas que aclare o cambie y lo hago.
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);
} //Fin del bucle que obtiene los datos
//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 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
?>
Espero que ahora sí me puedas echar un cable porque estoy "más perdido que un pato en un garaje"
Muchas gracias de nuevo.