Foros del Web » Programando para Internet » PHP »

Problemilla que no soluciono :-(

Estas en el tema de Problemilla que no soluciono :-( en el foro de PHP en Foros del Web. Buenas, tengo un pequeño problema en este code, el metodo getForums() me funciona bien cuando lo uso en case "foros" pero cuando lo uso en ...
  #1 (permalink)  
Antiguo 12/01/2004, 09:25
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 16 años, 1 mes
Puntos: 5
Problemilla que no soluciono :-(

Buenas, tengo un pequeño problema en este code, el metodo getForums() me funciona bien cuando lo uso en case "foros" pero cuando lo uso en ver_foros me devuelve los datos correctamente, pero a parte al final de todo me inserta un numero, y no se por que o bueno no soy capaz de encontrar el fallo jeje esta claro que el fallo tiene que estar al hacer return $this->datos; pero bueno ... a ve si alguien me puede ayudar

Código PHP:
<?PHP
/*
   +--------------------------------------------------------------------+
   | DForum v.0.0.1                                                     |
   +--------------------------------------------------------------------+
   | Copyright (c) 2003 Dikode                                          |
   +--------------------------------------------------------------------+
   | This source file is subject to version 2.02 of the PHP license,    |
   | that is bundled with this package in the file LICENSE, and is      |
   | available at through the world-wide-web at                         |
   | [url]http://www.php.net/license/2_02.txt.[/url]                               |
   | If you did not receive a copy of the PHP license and are unable to |
   | obtain it through the world-wide-web, please send a note to        |
   | [email][email protected][/email] so we can mail you a copy immediately.             |
   +--------------------------------------------------------------------+
   | Authors: Ivan Rodriguez Espada   <[email protected]>          |
   +--------------------------------------------------------------------+
*/

class DForum {
    var 
$host;
    var 
$user;
    var 
$pass;
    var 
$BBDD;
    var 
$id_connection;
    var 
$datos = array();
    
    function 
DForum($host$user$pass) {
        
$this->host $host;
        
$this->user $user;
        
$this->pass $pass;
        
$this->BBDD "DForum";
        
$this->id_connection mysql_connect($this->host$this->user$this->pass) or die (mysql_error());
        
mysql_select_db($this->BBDD$this->id_connection) or die (mysql_error());
        return 
$this->id_connection;
    }
    
    function 
getForums($SQL   "SELECT id_forum, forum_title FROM forums") {
        
$expresion "from ([a-z0-9_]+)";        
        if(
eregi ($expresion$SQL$nombre)) {
            
$tabla $nombre[1];
        }
        
        
$celdas    mysql_list_fields($this->BBDD$tabla$this->id_connection);
        
$columnas  mysql_num_fields($celdas);
        
$campos    = array();
        
$dato      = array();
        
        for (
$i 0$i $columnas$i++) {
            
$campos[] = mysql_field_name($celdas$i);
        }
        
        
$consulta  mysql_query($SQL$this->id_connection) or die(mysql_error());
        
$registros mysql_num_rows($consulta) or die(mysql_error());
        
        for(
$i 0$i $registros$i++) {
            while(
$campo mysql_fetch_array($consulta)) {
                for(
$i 0$i count($campos); $i++) {
                    
$dato[$i] = $campo[$campos[$i]];
                }
                
$this->datos[] = $dato;
            }
        }
        
        return 
$this->datos;
    }
    
    function 
getForumInfo($id_forum) {
        
$id_forum $id_forum-1;
        
$SQL      "SELECT autor, data FROM messages WHERE forum = $id_forum ORDER BY data DESC LIMIT 0, 1";
        
$query mysql_query($SQL$this->id_connection) or die (mysql_error());
        while(
$d mysql_fetch_array($query)) {
            return 
$d["autor"] . "-" date("d-m-Y"$d["data"]) . "<br>";
        }
    }
    
    function 
countForumMessages($id_forum) {
        
$id_forum $id_forum-1;
        
$SQL      "SELECT    id_message FROM messages WHERE forum = $id_forum AND id_forum = 0";
        
$query mysql_query($SQL$this->id_connection) or die (mysql_error());
        return 
mysql_num_rows($query);
    }
    
    function 
getForumMessages($forum) {
        
$forum $forum 1;
        
$SQL   "SELECT id_message, autor, title, message, data, answers, id_forum, forum FROM messages WHERE id_forum = 0 AND forum = $forum ORDER BY data DESC";
        return 
$this->getForums($SQL);
    }
}

$f = new DForum("host""user""pass");

if(empty(
$_GET['accion'])) {
    
$accion "foros";
} else {
    
$accion $_GET['accion'];
}

switch(
$accion) {
    case 
"foros":
        echo 
"<table cellpadding=\"2\" cellspacing=\"0\" border=\"0\">";
        echo 
"<tr><td width=\"200\">Foro</td><td width=\"50\">Mensajes</td><td width=\"200\">Último mensjae</td></tr>";
        echo 
"</table>";
        echo 
"<table cellpadding=\"2\" cellspacing=\"0\" border=\"0\">";
        foreach(
$f->getForums() aS $F) {
            echo 
"<tr><td width=\"200\"><a href=\"ver.php?id_foro=$F[0]&accion=ver_foro\">" .$F[1] . "</a></td><td width=\"50\">".$f->countForumMessages($F[0])."</td><td width=\"200\">" .             $f->getForumInfo($F[0]) . "</td></tr>";
        }
        echo 
"</table>";
        break;
    case 
"ver_foro":
        
$datos $f->getForumMessages($_GET['id_foro']);
        for(
$i 0$i count($datos); $i++) {
            echo 
$datos[$i][1] . "<br>";
        }
        break;
    default: break;
}
?>
__________________
Usuario registrado de Linux #288725
  #2 (permalink)  
Antiguo 12/01/2004, 09:37
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Fijate bien:
Código PHP:
       for($i 0$i $registros$i++) {
            while(
$campo mysql_fetch_array($consulta)) {
                for(
$i 0$i count($campos); $i++) {
                    
$dato[$i] = $campo[$campos[$i]];
                }
                
$this->datos[] = $dato;
            }
        } 
¿Cuantos bucles for con indice $i ves? Yo veo 2. Ademas, esa estructura me suena muy mal. Si $registros es el numero de registros de $consulta, o no hace falta el for de fuera, o no hace falta el while (en mi modesta opinion).

Espero haber sido de ayuda
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 12/01/2004, 09:41
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 16 años, 1 mes
Puntos: 5
Que cosas ... al comienzo me funcionaba perfectamente, es deicr con la primera consulta, con el resto no ... voy a probarlo.
__________________
Usuario registrado de Linux #288725
  #4 (permalink)  
Antiguo 12/01/2004, 09:46
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 16 años, 1 mes
Puntos: 5
Nada jeje no funciona, mira te dejo aqui la estructura, para el quien lo quiera probar y ver el problema:

Código:
CREATE TABLE forums (
  id_forum int(4) NOT NULL auto_increment,
  forum_title varchar(255) NOT NULL default '',
  PRIMARY KEY  (id_forum)
) TYPE=MyISAM;

#
# Volcar la base de datos para la tabla `forums`
#

INSERT INTO forums VALUES (1, 'Playas');
INSERT INTO forums VALUES (2, 'Surf y Bodyboard');
# --------------------------------------------------------

#
# Estructura de tabla para tabla `messages`
#

CREATE TABLE messages (
  id_message int(10) NOT NULL auto_increment,
  title varchar(255) NOT NULL default '',
  data int(11) NOT NULL default '0',
  autor varchar(255) NOT NULL default '',
  message longtext NOT NULL,
  forum int(4) NOT NULL default '0',
  answers int(4) NOT NULL default '0',
  id_forum int(4) NOT NULL default '0',
  PRIMARY KEY  (id_message)
) TYPE=MyISAM;

#
# Volcar la base de datos para la tabla `messages`
#

INSERT INTO messages VALUES (1, 'Prueba 1', 1073907893, 'epplestun', 'hola sto es una prueba', 0, 0, 0);
INSERT INTO messages VALUES (2, 'Holitas', 1073907279, 'dell', 'pepepepeppe', 0, 0, 0);
INSERT INTO messages VALUES (3, 'Geropa', 0, 'DForum', 'jejejejeje', 1, 0, 0);
A ve si alguien es capaz de sacarlo :D
__________________
Usuario registrado de Linux #288725
  #5 (permalink)  
Antiguo 12/01/2004, 10:02
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Por cierto, ¿cual es el numero? ¿Es siempre el mismo o cambia? ¿Seguro que no lo generas mas abajo?
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #6 (permalink)  
Antiguo 12/01/2004, 10:24
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Acabo de probar con mi cambio y no veo ningun numero. ¿no sera en otra parte?

Por cierto, con mi cambio queda:
Código PHP:
        //for($i = 0; $i < $registros; $i++) {
            
while($campo mysql_fetch_array($consulta)) {
                for(
$i 0$i count($campos); $i++) {
                    
$dato[$i] = $campo[$campos[$i]];
                }
                
$this->datos[] = $dato;
            }
        
//} 
(por no quitar el codigo, simplemente lo he comentado).

Lo gracioso es que sin hacer el cambio, tampoco me sale el numero. No se, quizas es que con esos pocos datos no sale. O quizas es codigo que esta detras.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #7 (permalink)  
Antiguo 12/01/2004, 10:26
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
¿Has mirado que contiene $this->datos antes del return? Ya sea con un depurador o con un simple print_r($this->datos). Lo digo porque si hay no muestra el numero ...

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #8 (permalink)  
Antiguo 12/01/2004, 10:48
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 16 años, 1 mes
Puntos: 5
Los numeros son el 1 y el 3 y jeje siempre salen cuando hago uso getForums jaja en ver_foro y seguro (99%) que no lo genero luego pero bueno lo haremos de otra manera o ya me pegare con ello
__________________
Usuario registrado de Linux #288725
  #9 (permalink)  
Antiguo 12/01/2004, 11:19
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 16 años, 1 mes
Puntos: 5
SI dios exste jeje nose que leches he modificado jeje pero me funciona perfectamente jeje, si ya digo yo que trabajar con fiebre no es nada bueno!!
__________________
Usuario registrado de Linux #288725
  #10 (permalink)  
Antiguo 12/01/2004, 11:32
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Cita:
si ya digo yo que trabajar con fiebre no es nada bueno!!
No, te equivocas. La frase deberia ser

si ya digo yo que trabajar no es nada bueno!!
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #11 (permalink)  
Antiguo 12/01/2004, 11:41
 
Fecha de Ingreso: enero-2004
Mensajes: 235
Antigüedad: 13 años, 11 meses
Puntos: 0
Por ciero para que sirve esta classe?
  #12 (permalink)  
Antiguo 12/01/2004, 11:52
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
A mi me parece que es un foro en su estado embrionario. Creo que epplestun el que hizo ya hace tiempo un ejemplo de foro (no recuerdo ahora si es el mismo que el de zonaphp).

Ahora mismo no tengo muy clara la licencia PHP, pero confio en que sea opensource (y aprovecharnos gratis del trabajo de epplestun ).

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #13 (permalink)  
Antiguo 12/01/2004, 11:59
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 16 años, 1 mes
Puntos: 5
jeje el mismo que escribio hace tiempo ya en www.zonaphp.com un articulo sobre como crear un foro en php y mysql exando lexes jajaja esta haciendo ahora un foro basado en un solo objeto, en una clase, jeje y como mu bien dice josemi es un embrion aun jajaja aun que ya esta la parte minima hecha, foros, mensajes de cada foro, respuestas de cada mensajes y esas cosas jeje

En cuanto a la licencia es PHP, la cual se basa en BSD, es decir el code es mio, podeis hacer uso de el gratuitamente, modificarlo a vuestro gusto siempre y cuando dejeis el autor original, en este caso yo jeje, la verdad es que lo iva a hacer GPL pero bueno ... me fio un poquito mas de la BSD si no os parece mal

En cuanto acabe el foro lo pongo por aqui si quereis y bueno ... la clase es muy sencilla tiene unos metodos simple sy listo

La clase es tan sencilla que se basa en esto:

Código PHP:
/*
   +--------------------------------------------------------------------+
   | DForum v.0.0.1                                                     |
   +--------------------------------------------------------------------+
   | Copyright (c) 2003 Dikode                                          |
   +--------------------------------------------------------------------+
   | This source file is subject to version 2.02 of the PHP license,    |
   | that is bundled with this package in the file LICENSE, and is      |
   | available at through the world-wide-web at                         |
   | [url]http://www.php.net/license/2_02.txt.[/url]                               |
   | If you did not receive a copy of the PHP license and are unable to |
   | obtain it through the world-wide-web, please send a note to        |
   | [email][email protected][/email] so we can mail you a copy immediately.             |
   +--------------------------------------------------------------------+
   | Authors: Ivan Rodriguez Espada   <[email protected]>          |
   +--------------------------------------------------------------------+
*/

error_reporting(E_ALL&~E_NOTICE);

class 
DForum {
    var 
$host;
    var 
$user;
    var 
$pass;
    var 
$BBDD;
    var 
$id_connection;
    var 
$datos = array();
    
    function 
DForum($host$user$pass) {
        
$this->host $host;
        
$this->user $user;
        
$this->pass $pass;
        
$this->BBDD "DForum";
        
$this->id_connection mysql_connect($this->host$this->user$this->pass) or die (mysql_error());
        
mysql_select_db($this->BBDD$this->id_connection) or die (mysql_error());
        return 
$this->id_connection;
    }
    
    function 
getForums($SQL   "SELECT id_forum, forum_title FROM forums") {
        
$expresion "from ([a-z0-9_]+)";        
        if(
eregi ($expresion$SQL$nombre)) {
            
$tabla $nombre[1];
        }
        
        
$celdas    mysql_list_fields($this->BBDD$tabla$this->id_connection);
        
$columnas  mysql_num_fields($celdas);
        
$campos    = array();
        
$dato      = array();
        
        for (
$i 0$i $columnas$i++) {
            
$campos[] = mysql_field_name($celdas$i);
        }
        
        
$consulta  mysql_query($SQL$this->id_connection) or die(mysql_error());
        
$registros mysql_num_rows($consulta) or die(mysql_error());
        
        while(
$campo mysql_fetch_array($consulta)) {
            for(
$j 0$j count($campos); $j++) {
                
$dato[$j] = $campo[$campos[$j]];
            }
            
$this->datos[] = $dato;
        }
        
        return 
$this->datos;
    }
    
    function 
getForumInfo($id_forum) {
        
$id_forum $id_forum-1;
        
$SQL      "SELECT autor, data FROM messages WHERE forum = $id_forum ORDER BY data DESC LIMIT 0, 1";
        
$query mysql_query($SQL$this->id_connection) or die (mysql_error());
        while(
$d mysql_fetch_array($query)) {
            return 
$d["autor"] . "-" date("d-m-Y"$d["data"]) . "<br>";
        }
    }
    
    function 
countForumMessages($id_forum) {
        
$id_forum $id_forum 1;
        
$SQL      "SELECT    id_message FROM messages WHERE forum = $id_forum AND id_forum = 0";
        
$query mysql_query($SQL$this->id_connection) or die (mysql_error());
        return 
mysql_num_rows($query);
    }
    
    function 
getForumMessages($forum) {
        
$forum $forum 1;
        
$SQL   "SELECT id_message, autor, title, message, data, answers, id_forum, forum FROM messages WHERE id_forum = 0 AND forum = $forum ORDER BY data DESC";
        return 
$this->getForums($SQL);
    }
    
    function 
getMessageInfo($id_message) {
        
$SQL "SELECT id_message, autor, title, message, data, answers, id_forum, forum FROM messages WHERE id_message = $id_message";
        return 
$this->getForums($SQL);
    }
    
    function 
getAnswerInfo($id_message) {
        
$SQL "SELECT id_message, autor, title, message, data, answers, id_forum, forum FROM messages WHERE id_forum = $id_message";
        return 
$this->getForums($SQL);
    }

jeje simplemente hay que meterle metodos y luego llamarlos y punto jeje cada uno se hace la plantilla que quiera y usa los metodos y san sacabo jeje no, ami me gusta trabajar asi jeje con objetillos y esas cosas y como toy aburrido en el curro pos me lo toy haciendo, por que se que me va a ser bastante util.

Un saludillo!!!
__________________
Usuario registrado de Linux #288725
  #14 (permalink)  
Antiguo 12/01/2004, 12:08
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 16 años, 1 mes
Puntos: 5
Se me olvido decir, por ejemplo si queremos añadirle la opcion de mostra la info de un usuario por ejemplo hacemos un metodo tal que:

Código PHP:
function getUserInfo($id_user)  {
$SQL "SELECT nick, registration_data FROM users WHERE id_user = $id_user";
return 
$this->getForums($SQL);

JEJE ya se que no es el metodo correcto el getForums pero bueno seria algo asi de faicl xD jeje es decir te curras la consulta y lito jeje

Se me olvidaba, es mas, el foro se podria hacer tan solo con un metodo xDD jeje y trabajar siempre haciendo uso de ese metodo ... sin mas jeje
__________________
Usuario registrado de Linux #288725

Última edición por epplestun; 12/01/2004 a las 12:11
  #15 (permalink)  
Antiguo 12/01/2004, 12:21
 
Fecha de Ingreso: enero-2004
Mensajes: 235
Antigüedad: 13 años, 11 meses
Puntos: 0
Esto de las licencias es interesante, si yo hago un script, lo tengo que licenciar en algun sitio? o que tengo que hacer?

Licencia BDB o GLP , que difrencia hay?
  #16 (permalink)  
Antiguo 12/01/2004, 19:55
Avatar de nublar
(Desactivado)
 
Fecha de Ingreso: octubre-2003
Ubicación: Argentina - BsAs
Mensajes: 321
Antigüedad: 14 años, 2 meses
Puntos: 0
Referente al tema licencia, lo que concierne a GNU/GPL lo encontrarás en español en el sitio:
http://www.gnu.org/home.es.html

POr lo que he visto en una lectura rápida:
- Compartes sin ninguna clase de restriccion tu proyecto con el codigo totalmente abierto.
- Si los usuarios quieren te avisan de las modificaciones y si quieren no te avisan.
- No tienen por que hacer mención al copyright, que en verdad se llama copyleft.
- Los usuarios pueden lucrar como quieran con tu aplicacion si darte una moneda por tu desarrolo.
- Pero lo bueno es que obtienes ayuda de la comunidad para mejorar y debuguear el proyecto.
(si me equivoco u omito algo importante avisenme)

Pero sobre las licencias BSD realmente no tengo idea de que se trata.

JOSEMI ¿que ventajas tiene la licencia BSD? y donde leo más al respecto?
  #17 (permalink)  
Antiguo 13/01/2004, 06:31
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
jmaribau ..y nublar ..

Recientemente moví el mensaje que publicó nublar con respecto a los comentarios sobre las licencias GNU,etc .. al foro "E-bussines" que es donde se suelen tratar esos temas (es más .. si usan su buscador verán comentarios al respecto).

Se que los programadores "PHP" hacen o usan muchas aplicaciones bajo estas licencias .. pero, si forosdelweb.com dispone de foros temáticos para ciertas cosas .. please, hagamos usos de ellos.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 09:02.