Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/10/2015, 10:54
rbczgz
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Función de php y MySQL que no se ejecuta correctamente

Hola,

Tengo este código en el que utilizo la clase spoondatabase para el manejo de la base de datos, esa parte está bien (creo) los nombres de las variables son ejemplos, pero es lo mismo que en real:

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(CONTROLADORSERVIDORUSUARIOCLAVEBASE_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++) {

//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 buble 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_textofilesize($nombre_fichero));
   
$contenido_fichero $contenido_fichero $dato1_a_agregar "\n" $dato2_a_agregar "\n";
   
//Actualizamos el archivo con el nuevo valor
   
$fp fopen($nombre_fichero,"w+");
   
fwrite($fp$contenido_fichero1024);
   
fclose($fp);
   return 
$contenido_fichero;
//Fin de la función


//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++) {

//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

}



?>

El caso es que cuando muestro el contenido de cada archivo, los datos que me ha añadido son en todos los casos, los recibidos en la última vuelta del bucle, sin embargo, en la prueba anterior, sí me muestra en cada caso los datos correctos.

Así que me estoy volviendo loco, llevo dos días dándole vueltas a este asunto y no le veo el fallo, por eso lo posteo aquí a ver si otros ojos me echan un cable

Muchas gracias por anticipado.