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

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(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++) { //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_textofilesize($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_fichero1024);
           
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.