Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Función de php y MySQL que no se ejecuta correctamente

Estas en el tema de Función de php y MySQL que no se ejecuta correctamente en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 07/10/2015, 10:54
 
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.
  #2 (permalink)  
Antiguo 08/10/2015, 00:49
 
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,

¿No hay nadie que me pueda echar un cable? Si hace falta más información que no se me haya ocurrido para poder ayudarme, solo tenéis que decírmelo...

Gracias de nuevo
  #3 (permalink)  
Antiguo 09/10/2015, 10:44
 
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 de nuevo,

¿De verdad que no hay nadie que me pueda ayudar con esto? Yo sigo volviéndome loco pero no le encuentro la vuelta...

Sé que es una tontería, pero como no sé qué tontería es, no lo puedo resolver, por eso es que pido un poco de ayuda...

Ojalá alguien pueda. Gracias de nuevo.
  #4 (permalink)  
Antiguo 09/10/2015, 10:50
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Función de php y MySQL que no se ejecuta correctamente

Yo la verdad intenté leer tu código pero carece de formato, así no entiendo donde empiezan y acaban las estructuras de control.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 09/10/2015, 15:09
 
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,

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(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);
    } 
//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_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 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.
  #6 (permalink)  
Antiguo 09/10/2015, 15:20
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Función de php y MySQL que no se ejecuta correctamente

Mira, el problema es muy simple.

Las operaciones que realizas debes hacerlas dentro del loop, de otra forma siempre seguirá tomando el último valor iterado.

Piensa un poco en eso.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 09/10/2015, 15:29
 
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,

Muchas gracias por la respuesta. Como ahora ya es muy tarde aquí, mañana le sigo dando vueltas y te cuento.
  #8 (permalink)  
Antiguo 09/10/2015, 16:24
 
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.
  #9 (permalink)  
Antiguo 09/10/2015, 16:38
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Función de php y MySQL que no se ejecuta correctamente

Creo que debes leer una buena referencia de manejo de loops.

Es decir, no entiendo la razón de hacer el mismo loop dentro y fuera de la función.

Además cuando haces return dentro del loop se detiene y finaliza la función, ¿lo habías notado?

Igual deberías explicar mejor que objetivo tiene la función porque no se entiende nada.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 10/10/2015, 01:32
 
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,

Seguramente debería leer muchos manuales, pero no sé encontrarlos ni entenderlos, la mayor parte de lo que sé lo he ido aprendiendo con la práctica, como muchos de los que estamos por aquí...

El uso de dos bucles: uno es para que la función obtenga los datos al crearla y otro es para obtenerlos en su ejecución.

Sobre lo que me dices del return, tienes toda la razón, anoche estaba tan cansado que ni me di cuenta de que metí el return dentro del bucle...

Sobre el objetivo de la función, a ver si lo sé explicar de forma que se entienda:

Necesito modificar unos 20.000 archivos de texto plano ubicados en directorios que se llaman como la primera letra del archivo, estos archivos "completan" los datos de una tabla de la base de datos y lo que necesito es agregar a cada archivo los dos datos que ya añadí en la base de datos.

Esta necesidad es porque el sistema al que pertenecen, si no están los datos en los dos sitios, no funciona como debe, no sé por qué, ni me interesa, porque está programado en perl (que no entiendo) y además, lo querría dejar de lado porque está obsoleto, pero antes de poderlo dejar, necesito hacer esa modificación.

Los archivos corresponden a perfiles de usuarios que, como comprenderás, no puedo dejar sin servicio de la noche a la mañana sin darles una alternativa, por eso el agregado de esos datos.

Espero que así se entienda, seguramente no es la manera más eficaz de hacerlo, pero solo lo sé hacer por ese camino y encima, mal, como se puede ver...
  #11 (permalink)  
Antiguo 10/10/2015, 09:53
 
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 de nuevo,

Al fin he encontrado el problema y la solución... Y todo gracias a las indicaciones de pateketrueke...

Pongo el código por si le pudiera servir a alguien, era tan sencillo como dejar la función sin bucle ni consulta a la base de datos, ya que eso se hace al llamarla, no al crearla .

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

        
//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 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>";
                    
             
//Con esto muestro el nuevo contenido de cada archivo para ver si está correcto, esta parte se puede eliminar una vez comprobado que funciona.
             
echo "<pre>";
             echo 
$contenido;
             echo 
"</pre>";

//Fin del bucle para ejecutar la función las veces que sea necesario



?>
Muchas gracias pateketrueke por tu inestimable ayuda, que me ha hecho pensar hasta dar con la solución, tú sí que sabes ayudar.

Como dice el refrán: "Hay que enseñar a pescar, no dar el pez pescado", eso haces tú y lo haces muy bien. ¡¡¡MIL GRACIAS!!!

Etiquetas: correctamente, ejecuta, html, mysql, registro, select, tabla, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:45.