Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

No me funciona :(

Estas en el tema de No me funciona :( en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola: Estoy leyendome un libro sobre la iniciación de PHP 5 con objetos. El problema es que hay un código para crear un libro de ...
  #1 (permalink)  
Antiguo 16/04/2009, 14:48
 
Fecha de Ingreso: febrero-2002
Mensajes: 351
Antigüedad: 22 años, 11 meses
Puntos: 19
No me funciona :(

Hola:

Estoy leyendome un libro sobre la iniciación de PHP 5 con objetos. El problema es que hay un código para crear un libro de visitas que no funciona.

Código:
<?php
  class libro_visitas
  {
     private $tamano;
     private $nombre;
     private $descriptor;
     private $contenido;

    function construct($nombre)
   {
    $this->nombre = $nombre;
   }

    public function leer_libro()
   {
    $this->descriptor = fopen ($this->nombre,"a+");
    $this->tamano=filesize($this->nombre);

    if ($this->tamano > 0) {
    $this->contenido = fread($this->descriptor, $this->tamano);
   }

    fclose($this->descriptor);
    return $this->contenido;
   }
 
    public function escribir_libro ($nombre, $texto)
   {
    $this->descriptor = fopen ($this->nombre,"a+");
    $nombre = "<tr><td bgcolor=\"#CCCCCC\">$nombre</td></tr>";
    $texto = "<tr><td bgcolor=\"#FFFFFF\">$texto</td></tr>";
    fwrite($this->descriptor,$nombre);
    fwrite($this->descriptor,$texto);
    fclose($this->descriptor);
   }
}
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loóse.dtd">
<html>
<head>
<title>Libro de visitas</title>
<meta http-eguiv="Content-Type" content="text/html; charset=iso-8859-l">
</head>
<body>
<p align="center"><strong>Libro de visitas</strong></p>
<table width="100%" border="0" cellspacing="0" cellpadding="0">

<?php
if (isset ($_POST["nombre" ] ) || isset($_POST["texto"])) {
$libro = new libro_visitas("libro.txt");
$libro->escribir_libro($_POST["nombre"],$_POST["texto"]);
}
$libro_ver = new libro_visitas("libro.txt");
echo $libro_ver->leer_libro();
?>

</table>
<form action="libro.php" method="POST">
Nombre:
<input name="nombre" type="text" id="nombre">
</p>
<p>Texto:
Ficheros y almacenamiento de datos:
<textarea name="texto" id="texto"></textarea>
</p>
<p>
<input type="submit" name="Submit" value="Enviar" >
</p>
</form>
</body>
</html>
Los errores que me dan son:
Warning: fclose(): supplied argument is not a valid stream resource in C:\wamp\www\curso_php\libro.php on line 20
Este nada más abrir la página para rellenar el formulario

Y éstos más, cuando lo relleno:
Warning: fwrite(): supplied argument is not a valid stream resource in C:\wamp\www\curso_php\libro.php on line 28

Warning: fwrite(): supplied argument is not a valid stream resource in C:\wamp\www\curso_php\libro.php on line 29

Warning: fclose(): supplied argument is not a valid stream resource in C:\wamp\www\curso_php\libro.php on line 30

Warning: fclose(): supplied argument is not a valid stream resource in C:\wamp\www\curso_php\libro.php on line 20


Por supuesto, no se escribe ningún fichero y el código no parece funcionar. Aclarar que este código enteramente lo tengo en un archivo que se llama libro.php, ya que el libro no indica si hay que separarlo o va todo junto.

Un saludo y gracias por todo.
  #2 (permalink)  
Antiguo 16/04/2009, 15:02
Avatar de Acron_0248  
Fecha de Ingreso: junio-2005
Ubicación: 127.0.0.1
Mensajes: 1.648
Antigüedad: 19 años, 6 meses
Puntos: 18
Respuesta: No me funciona :(

Seguramente ha de ser por el hecho de que no estás usando un constructor correcto por ende $this->nombre no será inicializado al llamar $libro = new libro_visitas('libro.txt'); lo que luego termina enviando datos vacíos a fopen/fwrite/fclose.

Debería ser:
Código PHP:

function __construct($nombre)
{
    
$this->nombre $nombre;

La única forma de que tu código actual funcione es que lo llamaras así:
Código PHP:

$libro 
= new libro_visitas();
$libro->construct('libro.txt');
.... 
Pero eso no es realmente una solución que valga la pena usar, simplemente acomoda el constructor y listo
__________________
Usuario Reigistrado de linux #399288
  #3 (permalink)  
Antiguo 16/04/2009, 15:18
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: No me funciona :(

Hola

Esto no es asi
Código:
  function construct($nombre)
   {
    $this->nombre = $nombre;
   }
Deberia ser asi
Código:
  function __construct($nombre)
   {
    $this->nombre = $nombre;
   }
o asi

Código:
  function libro_visitas($nombre)
   {
    $this->nombre = $nombre;
   }
Otra cosa tendrias que verificar que se cree el archivoy la ruta.

Saludos
  #4 (permalink)  
Antiguo 16/04/2009, 16:44
 
Fecha de Ingreso: febrero-2002
Mensajes: 351
Antigüedad: 22 años, 11 meses
Puntos: 19
Respuesta: No me funciona :(

Cita:
Deberia ser asi

Código: function __construct($nombre)
{
$this->nombre = $nombre;
}
correcto!!! se me había pasado ese detalle y era simplemente ese el error.

Ahora funciona perfectamente, aunque tengo que mirar el código y entender lo que se hace porque estoy empezando con las Programación Orientada a Objetos y me entero de algunas cosas, pero otras no llego del todo a entenderlas.

Muchas gracias a los dos, por vuestra ayuda. Os debo una
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 02:00.