Foros del Web » Programando para Internet » PHP »

Mostrando datos de un fichero

Estas en el tema de Mostrando datos de un fichero en el foro de PHP en Foros del Web. Buenas. Veréis, tengo el siguiente script en PHP que lo que hace es coger una URL de una imagen tipeada en el cuadro, coger el ...
  #1 (permalink)  
Antiguo 10/01/2012, 11:09
 
Fecha de Ingreso: mayo-2011
Mensajes: 65
Antigüedad: 13 años, 6 meses
Puntos: 3
Mostrando datos de un fichero

Buenas. Veréis, tengo el siguiente script en PHP que lo que hace es coger una URL de una imagen tipeada en el cuadro, coger el nombre y guardarlo en un archivo de texto con extensión .pk y además te muestra la imagen en la web a todo detalle.

Todo el código va genial hasta que quiero mostrar de una determinada forma las lineas abajo. Sé que podría mostrarlas de una forma más fácil si lo guardase el texto en el archivo .pk con el código ya hecho, porque sería simplemente imprimir el contenido del archivo, pero como esto no es un caso demasiado práctico y lo estoy haciendo para aprender a manejar a mi antojo la información de un fichero a base de explodes, lists, arrays y demás, quiero hacerlo de esa forma.

Me muestra el contenido, con las lineas que hay en el archivo exactas, el problema es que solamente me repite la primera linea! Primero veamos el código:

Código PHP:
Ver original
  1. <?php
  2.  
  3.  
  4. echo '<form action="" method="POST">'.'Introduce tu nombre: <input type="text" name="name">'.'<br>'.'Introduce url imagen: <input type="text" name="imageurl">'.'<br>'.'<input type="submit" value="Subir imagen">'.'</form>';
  5.  
  6. class AJAXChatImages {
  7.  
  8.             var $_imageURL;
  9.             var $_imageUser;
  10.             var $_user;
  11.             var $_imagename;
  12.             var $_lineas;
  13.            
  14.             function getURL() {
  15.                 $this->_imageURL = $_POST['imageurl'];
  16.             }
  17.            
  18.             function saveURL() {
  19.            
  20.               if($_POST['name'] != "" && $_POST['imageurl'] != "") {
  21.            
  22.                 $this->_imageUser = $_POST['name'];
  23.                 $saveimg = fopen("imgsave.pk", 'r+');
  24.                 $url = $this->_imageURL;
  25.                 $varim = basename($url).'-'.$this->_imageUser.'-';
  26.                 $salto = chr(13).chr(10);
  27.                 fseek($saveimg,0,SEEK_END);
  28.                 fwrite($saveimg,$salto);
  29.                 fwrite($saveimg,$varim);
  30.                 fclose($saveimg);
  31.                
  32.               }
  33.            
  34.             }
  35.            
  36.             function getUSERS() {
  37.               $saveimg = fopen("imgsave.pk", 'r');
  38.               $content = file_get_contents("imgsave.pk");                  
  39.                 $lineas = explode('\n', $content);
  40.                      
  41.                   foreach($lineas as $linea) {
  42.                     list($imgname, $username) = explode('-', $content);
  43.                       $archivo = "imgsave.pk";
  44.                       $lineas = count(file($archivo));
  45.                         $this->_user = $username;
  46.                         $this->_imagename = $imgname;
  47.                         $this->_lineas = $lineas;
  48.                   }
  49.             }
  50.  
  51. }
  52.  
  53. $imagen = new AJAXChatImages();
  54. $imagen->getURL();
  55. $imagen->saveURL();
  56. echo '<img src="'.$imagen->_imageURL.'">';
  57. $imagen->getUSERS();
  58. echo '<br><br>'.'Usuarios que han guardado sus avatars:';
  59.         for($i = 0; $i <= $imagen->_lineas; $i++) {
  60.        
  61.               echo '<br>'.'Nombre del usuario: <b>'.$imagen->_user.'</b> - Imagen: <i>'.$imagen->_imagename.'</i>';    
  62.              
  63.               }
  64.  
  65. ?>



Ok, el problema viene aquí. Pongo como nombre: USUARIO y como archivo de imagen pongo por ejemplo www.miservidor.com/imagen.jpg
Me la guarda correctamente. Luego vuelvo a subir otra imagen, con nombre PERSONA y url de la imagen www.mipagina.com/otraimagen.jpg

Y aquí viene el problema! En el fichero .pk me guarda todos los datos correctamente pero cuando tira a visualizarlos me muestra:

Nombre del usuario: USUARIO - Imagen: imagen.jpg
Nombre del usuario: USUARIO - Imagen: imagen.jpg


Exacto, me muestra dos veces la primera linea, en lugar de la primera y la segunda como yo querría.
Gracias por adelantado y saludos!
  #2 (permalink)  
Antiguo 10/01/2012, 11:32
Avatar de autonotel  
Fecha de Ingreso: junio-2003
Ubicación: Vigo
Mensajes: 480
Antigüedad: 21 años, 5 meses
Puntos: 13
Respuesta: Mostrando datos de un fichero

No te funcionaría poniendo for($i = 0; $i < $lineas; $i++) {
?
  #3 (permalink)  
Antiguo 10/01/2012, 11:38
 
Fecha de Ingreso: mayo-2011
Mensajes: 65
Antigüedad: 13 años, 6 meses
Puntos: 3
Respuesta: Mostrando datos de un fichero

No, el problema no está ahí. El bucle me lo repite bien y cuenta las lineas que hay bien, ahi todo correcto. El problema debe estar entre las lineas 39 y 45, pues la cosa es que me repite solo la primera linea, y lo que yo quiero es que me muestre tanto la primera, como la segunda, y asi sucesivamente.

Que me muestre todas las lineas no la primera siempre.
  #4 (permalink)  
Antiguo 10/01/2012, 11:41
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 13 años
Puntos: 160
Respuesta: Mostrando datos de un fichero

Creo yo que el problema esta en este llamado:

Código PHP:
Ver original
  1. $imagen->getUSERS();

Te explico porque, vos al instanciar la clase llamas al metodo getUSERS() el cual recorre el archivo .pk y guardas en las variables _user, _imagename y _lineas y ahi esta el problema puesto que vas a sobreescribir esas variables por cada iteracion del archivo, por ende siempre te va a guardar el ultimo $username leido, entonces cuando lo imprimas va a mostras siempre el ultimo tantas veces como lineas tengas.

Fijate de reveer la funcionalidad de getUSERS porque pienso que el problema esta ahi. Proba en utilizar una variable de la instancia que sea un vector dinamico y vas metiendo las iteraciones en ese vector, es una idea.

Abrazo!
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com
  #5 (permalink)  
Antiguo 10/01/2012, 12:06
 
Fecha de Ingreso: mayo-2011
Mensajes: 65
Antigüedad: 13 años, 6 meses
Puntos: 3
Respuesta: Mostrando datos de un fichero

Gracias por la ayuda. No sé exactamente a que te refieres, pues yo creia que cada vez que el bucle avanzara un estado, me sustituiría las variables por las de la linea siguiente. Los datos en el archivo .pk están todos correctos.

Ayer empecé con la programacion orientada a objetos y la verdad es que no llevo demasiado con PHP, así que es posible que esté obviando algo de las clases y objetos que yo no sé todavía, me cuesta encontrar webs donde se expliquen con mucho detalle sin entrar directamente ya en lo práctico.

Un abrazo!
  #6 (permalink)  
Antiguo 10/01/2012, 12:16
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 13 años
Puntos: 160
Respuesta: Mostrando datos de un fichero

el archivo debe estar bien, el problema radica en el estado de la variable de la instancia ya que por cada iteracion se sobreescribe puesto que esta dentro del for. lo que podes hacer seria algo asi:

Código PHP:
Ver original
  1. <?php
  2.  
  3.  
  4. echo '<form action="" method="POST">'.'Introduce tu nombre: <input type="text" name="name">'.'<br>'.'Introduce url imagen: <input type="text" name="imageurl">'.'<br>'.'<input type="submit" value="Subir imagen">'.'</form>';
  5.  
  6. class AJAXChatImages {
  7.  
  8.             var $_imageURL;
  9.             var $_imageUser;
  10.             //var $_user;
  11.             //var $_imagename;
  12.             //var $_lineas;
  13.             var $_users;
  14.            
  15.             function getURL() {
  16.                 $this->_imageURL = $_POST['imageurl'];
  17.             }
  18.            
  19.             function saveURL() {
  20.            
  21.               if($_POST['name'] != "" && $_POST['imageurl'] != "") {
  22.            
  23.                 $this->_imageUser = $_POST['name'];
  24.                 $saveimg = fopen("imgsave.pk", 'r+');
  25.                 $url = $this->_imageURL;
  26.                 $varim = basename($url).'-'.$this->_imageUser.'-';
  27.                 $salto = chr(13).chr(10);
  28.                 fseek($saveimg,0,SEEK_END);
  29.                 fwrite($saveimg,$salto);
  30.                 fwrite($saveimg,$varim);
  31.                 fclose($saveimg);
  32.                
  33.               }
  34.            
  35.             }
  36.            
  37.             function getUSERS() {
  38.               $saveimg = fopen("imgsave.pk", 'r');
  39.               $content = file_get_contents("imgsave.pk");                  
  40.               $lineas = explode('\n', $content);
  41.                      
  42.                   foreach($lineas as $linea) {
  43.                     list($imgname, $username) = explode('-', $content);
  44.                       $archivo = "imgsave.pk";
  45.                       $this->_users[] = Array('user' => $username, 'imagen' => $imgname);
  46.                       //$lineas = count(file($archivo));
  47.                       //$this->_user = $username;
  48.                       //$this->_imagename = $imgname;
  49.                       //$this->_lineas = $lineas;
  50.                   }
  51.             }
  52.  
  53. }
  54.  
  55. $imagen = new AJAXChatImages();
  56. $imagen->getURL();
  57. $imagen->saveURL();
  58. echo '<img src="'.$imagen->_imageURL.'">';
  59. $imagen->getUSERS();
  60. echo '<br><br>'.'Usuarios que han guardado sus avatars:';
  61.         /*for($i = 0; $i <= $imagen->_lineas; $i++) {
  62.        
  63.               echo '<br>'.'Nombre del usuario: <b>'.$imagen->_user.'</b> - Imagen: <i>'.$imagen->_imagename.'</i>';    
  64.              
  65.           }*/
  66.  
  67.           foreach ($imagen->_users as $data) {
  68.                   echo "<br>Nombre del usuario: <b>" . $data['user'] . "</b> - Imagen: <i>" . $data['imagen'] . "</i>";
  69.           }
  70.  
  71. ?>

Fijate si algo asi te sirve!
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com
  #7 (permalink)  
Antiguo 10/01/2012, 14:15
 
Fecha de Ingreso: mayo-2011
Mensajes: 65
Antigüedad: 13 años, 6 meses
Puntos: 3
Respuesta: Mostrando datos de un fichero

Que va, nada, no funciona :(
Sé exactamente lo que me falta, o al menos eso creo. La función no navega linea por linea si no que se queda estancada en la primera, y no entiendo por qué! De ahí supongo que me retornará repetida siempre la misma linea.

Tu ejemplo me retornó la primera linea del archivo.pk solamente una vez, no hubo blucle.
  #8 (permalink)  
Antiguo 10/01/2012, 14:51
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 13 años
Puntos: 160
Respuesta: Mostrando datos de un fichero

Debugea la funcion getUSERS y fijate que buclee bien el archivo, si no buclea bien el vector _users[] no lo va a llenar bien. Descarta esa posibilidad
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com
  #9 (permalink)  
Antiguo 11/01/2012, 02:25
Avatar de autonotel  
Fecha de Ingreso: junio-2003
Ubicación: Vigo
Mensajes: 480
Antigüedad: 21 años, 5 meses
Puntos: 13
Respuesta: Mostrando datos de un fichero

No serviría intentar meter los echo dentro de las funciones?

Etiquetas: fichero, imagenes, lineas
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 22:13.