Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Bucle for al que se le pasa en cada variable un archivo.php

Estas en el tema de Bucle for al que se le pasa en cada variable un archivo.php en el foro de PHP en Foros del Web. Muy buenas!! Estoy intentando hacer correr este bucle pero me es imposible. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original $diferencia = count ( $diffe_array ) ; ...
  #1 (permalink)  
Antiguo 22/08/2013, 02:20
 
Fecha de Ingreso: diciembre-2009
Ubicación: Sevilla
Mensajes: 49
Antigüedad: 14 años, 11 meses
Puntos: 0
Bucle for al que se le pasa en cada variable un archivo.php

Muy buenas!!

Estoy intentando hacer correr este bucle pero me es imposible.

Código PHP:
Ver original
  1. $diferencia=count($diffe_array);
  2.  
  3.  
  4.     for ($i =0;$i<$diferencia; ++$i){
  5.  
  6.         if($diferencia>0){
  7.  
  8.             $maldito=end($diffe_array);
  9.  
  10.             session_start();
  11.             $_SESSION['maldito']=$maldito;
  12.  
  13.             include_once('./Paso0.php');
  14.  
  15.             $extrae=array_pop($diffe_array);
  16.  
  17.             $diferencia=count($diffe_array);//evaluo de nuevo el array al que el he quitado un elemento.
  18.         }
  19.     }

Con este código me consta que se lee entero pero cuando llega a include_once('./Paso0.php'); me lo ejecuta perfectamente la primera vez, pero la segunda vez que tiene que pasar se lo salta.

Estoy ya loco de probar cambios y nada, no tengo ni idea por qué pasa esto.

Gracias
  #2 (permalink)  
Antiguo 22/08/2013, 02:56
 
Fecha de Ingreso: julio-2013
Mensajes: 87
Antigüedad: 11 años, 4 meses
Puntos: 9
Respuesta: Bucle for al que se le pasa en cada variable un archivo.php

Hola, ¿qué es lo que quieres conseguir con ese código? Parece que quieres recorrer el array y asignarle a $_SESSION['maldito'] el valor del elemento. ¿Es eso?

Yo lo veo más simple de la siguiente forma. Lo que has hecho es un poco raro, por no decir muy raro:

Código PHP:
Ver original
  1. foreach ($diffe_array as $maldito){
  2.     session_start();
  3.     $_SESSION['maldito']=$maldito;
  4.     include('./Paso0.php');
  5. }

Si te fijas include_once solamente lo incluirá una única vez. Mírate el manual de PHP para ver la diferencia entre include e include_once.

Saludos.
  #3 (permalink)  
Antiguo 22/08/2013, 03:31
 
Fecha de Ingreso: diciembre-2009
Ubicación: Sevilla
Mensajes: 49
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: Bucle for al que se le pasa en cada variable un archivo.php

ccliment, muchas gracias por responder.

Pero sigo teniendo el mismo problema con tu consejo, aunque se simplifica y clarifica el código mucho más.

Lo que estoy intentando hacer con este bucle es lo siguiente:

Recojo mi array ($diffe_array) y cada uno de sus elementos los voy cogiendo para pasarles otro archivo.php (Paso0.php) el cual utilizará ese elemento como variable string (de ahí lo de $maldito) para correrlo, y así sucesivamente con todos los elementos de mi array.

Ahora bien, lo que me está pasando es lo siguiente:

Si le paso tu código con include(), lo que ocurre es que me recoge el primer elemento de mi array y lo usa en Paso0.php correctamente, pero el programa se para ahí.

Si le paso tu código pero en este caso con include_once() entonces me sigue leyendo el código (no se para) pero no me recoge otro elemento de mi array para volver a pasarle Paso0.php saliéndose del foreach.

Para aclararlo todo más creo que lo mismo es importante que te pase el código de Paso0.php porque lo mismo es de ahí el problema (pero ya te digo que no lo veo), aquí va, a ver que opinas.


Código PHP:
Ver original
  1. <?php
  2. function Conectarse()
  3. {
  4.        if (!($link=pg_connect("host=xxxxx port=xxxx dbname=xxxxx user=xxxxx password=xxxxx")))  {
  5.            echo "Error conectando a la base de datos.";
  6.            exit();
  7.        }
  8.        return $link;
  9. }
  10. $maldito = $_SESSION['maldito'];
  11.  
  12. $rutas="/mi/ruta/hacia/directorio//";
  13. $fin= $rutas.$maldito;
  14. $row = 0;
  15. $handle = fopen($fin, "r");
  16.  
  17. while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
  18.     $num = count($data);
  19.     $row++;
  20.     echo '<b><br/><br/>';
  21.     $cadena = "insert into tabla(campo1,campo2,campo3,campo4,campo5,campo6,campo7,campo8) values(";
  22.    
  23.     for ($c=0; $c < $num; $c++) {
  24.         if ($c==($num-1)){
  25.               $cadena = $cadena."'".$data[$c] . "'";
  26.     }
  27.         else{
  28.               $cadena = $cadena."'".$data[$c] . "',";
  29.     }
  30.     }
  31.  
  32.     $cadena = $cadena.");";
  33.     echo $cadena."<br>";  
  34.  
  35.      $enlace=Conectarse();
  36.      $result=pg_query($enlace, $cadena);
  37.      pg_close($enlace);
  38. }
  39.  
  40. fclose($handle);
  41.  
  42. ?>

Con este código lo que estoy haciendo es recoger $maldito como string. Este string coincide con el nombre de un archivo plano que está en mi directorio, lo abro leo su contenido y monto consulta con esos datos para introducirlos en mi tabla de mi base de datos postresql. Así deberí pasar para cada elemento, pero ya te digo que no funciona.

Gracias de nuevo
  #4 (permalink)  
Antiguo 22/08/2013, 04:09
 
Fecha de Ingreso: julio-2013
Mensajes: 87
Antigüedad: 11 años, 4 meses
Puntos: 9
Respuesta: Bucle for al que se le pasa en cada variable un archivo.php

Primero, deberías mirar si te está dando un error en el error.log de Apache o si usas IIS donde hayas puesto tu fichero de errores de PHP. Sinó configura php.ini para que display_errors esté a On.

Después, si lo que quieres hacer es simplemente llamar a una función en cada pasada del bucle, no hace falta abrir una session para guardarte una variable y después recuperarlo etc. Es más simple hacerlo de la siguiente forma:

Código PHP:
Ver original
  1. <?php
  2. include_once('./Paso0.php');
  3. foreach ($diffe_array as $maldito){
  4.    insertarRegistros($maldito);
  5. }
  6. ?>

Después en el fichero Paso0.php dejamos el código dentro de una función:

Código PHP:
Ver original
  1. <?php
  2. function Conectarse()
  3. {
  4.        if (!($link=pg_connect("host=xxxxx port=xxxx dbname=xxxxx user=xxxxx password=xxxxx")))  {
  5.            echo "Error conectando a la base de datos.";
  6.            exit();
  7.        }
  8.        return $link;
  9. }
  10.  
  11. function insertarRegistros($maldito){
  12.     $rutas="/mi/ruta/hacia/directorio//";
  13.     $fin= $rutas.$maldito;
  14.     $row = 0;
  15.     $handle = fopen($fin, "r");
  16.  
  17.     while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
  18.         $num = count($data);
  19.         $row++;
  20.         echo '<b><br/><br/>';
  21.         $cadena = "insert into tabla(campo1,campo2,campo3,campo4,campo5,campo6,campo7,campo8) values(";
  22.    
  23.         for ($c=0; $c < $num; $c++) {
  24.             if ($c==($num-1)){
  25.                   $cadena = $cadena."'".$data[$c] . "'";
  26.             } else {
  27.               $cadena = $cadena."'".$data[$c] . "',";
  28.             }
  29.         }
  30.  
  31.         $cadena = $cadena.");";
  32.         echo $cadena."<br>";  
  33.  
  34.         $enlace=Conectarse();
  35.         $result=pg_query($enlace, $cadena);
  36.         pg_close($enlace);
  37.     }
  38.     fclose($handle);
  39. }
  40.  
  41. ?>

Aún así seguramente se podría simplificar todo y no usar varios ficheros si es simplemente para esto, pero bueno, ya sería otra cosa para mirar. Si te da error ya te digo, siempre mira el error.log porque puedes pensar que es otra cosa la que te falla y perder mucho tiempo.

Saludos.
  #5 (permalink)  
Antiguo 22/08/2013, 09:42
 
Fecha de Ingreso: diciembre-2009
Ubicación: Sevilla
Mensajes: 49
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: Bucle for al que se le pasa en cada variable un archivo.php

Perfecto!!

Todo ha ido de maravilla con estas indicaciones, las claves para gestionar este tipo de funcionalidad son:

1.- Recorrer mi array con foreach, ya que me permite gestionar cada elemento de mi array como una variable y hacer con ella lo que quiera.

2.- Tener en cuenta crear funciones que son fáciles de gestionar y ahorran trabajo, muchas veces tiramos poco de ellas.

3.- Saber utilizar todos los recursos de las herramientas que tenemos a nuestro alcance como por ejemplo los display_errors de php. Son una buena opción para ir encaminando una programación 'óptima'.

4.- Valorar la necesidad de utilizar archivos separados para crear funcionalidades. Posiblemente mi trabajo se podría haber hecho de forma más óptima sin necesidad de llamadas a otros archivos php.

Muchas gracias a todos, muy bien ccliment todo Solucionado y aprendiendo!!!

Etiquetas: bucle, cada, 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 13:11.