Foros del Web » Programando para Internet » PHP »

Comunicación entre funciones (SQL, visualización)

Estas en el tema de Comunicación entre funciones (SQL, visualización) en el foro de PHP en Foros del Web. Hola a todos, éste es mi primer mensaje, aunque he de deciros que llevo un tiempo aprendiendo con vosotros. No llevo mucho tiempo con el ...
  #1 (permalink)  
Antiguo 15/04/2005, 10:49
 
Fecha de Ingreso: enero-2005
Ubicación: Zaragoza
Mensajes: 3
Antigüedad: 19 años, 3 meses
Puntos: 0
Comunicación entre funciones (SQL, visualización)

Hola a todos, éste es mi primer mensaje, aunque he de deciros que llevo un tiempo aprendiendo con vosotros. No llevo mucho tiempo con el PHP y tengo un problema, pienso que pudiera ser de conceptos.

Quisiera hacer una función que realice una consulta tal que asi:

Código PHP:
function funcion_sql ($x,$y){
global 
$db;
$result $db->sql_query("SELECT  tabla.columna FROM tabla WHERE condiciones);
return $result;


En la condición le pongo parametros que se le pasan a la función.

Luego quiero llamar a la función anterior desde otra función que hace el fetchrow para luego pintar una tabla con los distintos registros, mas o menos asi:

Código PHP:
function funcion_muestra_datos_tabla($x,$y){
global 
$db;
$result=funcion_sql(x,y);
while (
$row=$db->sql_fetchrow($result)){
    
$columna=$row['columna'];
    echo 
"        <tr bgcolor=\"#DFE6EF\">\n";
    echo 
"          <td width=\"234\">$columna</td>\n";
    echo 
"        </tr>\n";
    echo 
"      </table>
       }

(lo hago para poder llamar a la función de la consulta SQL desde cualquier lugar) para aplicarle distintos formatos de visualización (listas, tablas, etc.)

Todo en una misma función funciona correctamente. Pero al hacerlo en dos no lo hace.

He probado jugando con las variables globales $db y $result pero no lo he hecho funcionar.

Si alguien me pudiera ayudar, le estaría muy agradecido.

Un saludo.

Pablo
  #2 (permalink)  
Antiguo 15/04/2005, 11:39
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Debería funcionar lo que propones ...

Con el detallito (tal vez sea un error de trascripción al foro ..) de usar $ en las llamadas a tus variables:

$result=funcion_sql($x,$y);

Al parecer está bien la declaración de tu objeto $db ..

Pon el código exacto que pruebas .. por qué aquí se ven algunos errores que parecen que son a la hora de poner el código aquí ... así que confunde. Por otro lado indica concretamente cual es el problema o error que obtienes al usarlo bajo funciones .. También si tu classe de capa de abastracción de BD (lo que defines en $bd) tiene algún método para mostrar errores (un modo "debug" o similar) activalo .. tal vez se esté originando un error pero no lo ves.


Un saludo,
  #3 (permalink)  
Antiguo 15/04/2005, 11:59
 
Fecha de Ingreso: enero-2005
Ubicación: Zaragoza
Mensajes: 3
Antigüedad: 19 años, 3 meses
Puntos: 0
Efectivamente era un error de transcripción.

No es un error de la base de datos ya que si meto el código de la función de la consulta SQL dentro de la función que pinta la tabla, todo funciona correctamente. A mi entender el problema viene por la variable $result que no recibe correctamente el recordset de la consulta.

A continuación pongo las dos funciones:

Código PHP:
function dame_ultimos_post_foro($forumid,$num_post){
    global 
$db;
    
$result $db->sql_query("SELECT  vb3_post.postid, vb3_post.threadid, vb3_post.username, vb3_post.userid, vb3_thread.title, vb3_post.dateline, vb3_forum.title FROM vb3_post, vb3_thread, vb3_forum WHERE vb3_thread.threadid=vb3_post.threadid and vb3_thread.forumid=$forumid and vb3_thread.forumid=vb3_forum.forumid ORDER BY vb3_post.dateline DESC LIMIT $num_post");
    return 
$result;

Función que muestra en una tabla el resultado de la consulta:

Código PHP:
function muestra_ultimos_post_foro_tabla($forumid$num_post){
    global 
$db;
        
$result=dame_ultimos_post_foro($forumid_id,$num_post);
        
$nombre_foro=dame_nombre_foro($forumid);       
        echo 
"<table width=\"700\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n";
    echo 
" <tr>\n";
    echo 
"    <td><table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n";
    echo 
"        <tr>\n";
    echo 
"          <td width=\"21\" height=\"31\" background=\"images/top_left.gif\">&nbsp;</td>\n";
    echo 
"          <td width=\"200\" height=\"31\" valign=\"bottom\" background=\"images/top_bg.gif\"><div align=\"center\"><strong>En estos momentos en el Foro de $nombre_foro</strong> </div></td>\n";
    echo 
"          <td width=\"18\" height=\"31\" background=\"images/top_end.gif\">&nbsp;</td>\n";
    echo 
"          <td width=\"447\" height=\"31\" background=\"images/top_center.gif\">&nbsp;</td>\n";
    echo 
"          <td width=\"14\" height=\"31\" background=\"images/top_right.gif\">&nbsp;</td>\n";
    echo 
"        </tr>\n";
    echo 
"      </table></td>\n";
    echo 
"  </tr>\n";
    echo 
"  <tr>\n";
    echo 
"    <td valign=\"top\"><table width=\"100%\" border=\"1\" cellpadding=\"0\" cellspacing=\"0\" bordercolor=\"#D7DEE3\">\n";
    echo 
"        <tr bgcolor=\"#D4CFC0\">\n"
    echo 
"          <td width=\"234\"><div align=\"left\">Usuario</div></td>\n";
    echo 
"          <td width=\"303\"><div align=\"left\">T&iacute;tulo</div></td>\n";
    echo 
"          <td width=\"93\"><div align=\"left\">Fecha</div></td>\n";
    echo 
"          <td width=\"70\"><div align=\"left\">Ir a foro</div></td>\n";
    echo 
"        </tr>\n";
    while (
$row=$db->sql_fetchrow($result)){
    
$post_id=$row['postid'];
    
$tema_id=$row['threadid'];
    
$usuario=$row['username'];
    
$usuario_id=$row['userid'];
    
$titulo_thread=$row['title'];
    
$fecha=date("d/m/Y H:i",$row['dateline']);
    if (
$li==10)
        {
        break;
    }
    
$li+=1;
    echo 
"        <tr bgcolor=\"#DFE6EF\">\n";
    echo 
"          <td width=\"234\">$usuario</td>\n";
    echo 
"          <td width=\"303\"><a href=\"http://lawebresponde.com/foro/showthread.php?t=$tema_id\">$titulo_thread</a></td>\n";
    echo 
"          <td width=\"93\">$fecha</td>\n";
    echo 
"          <td width=\"70\"><a href=\"http://lawebresponde.com/foro/showthread.php?t=$tema_id#post$post_id\">Ver</a></td>\n";
    }
    echo 
"        </tr>\n";
    echo 
"      </table></td>\n";
    echo 
"  </tr>\n";
    echo 
"  <tr>\n";
    echo 
"    <td><table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n";
    echo 
"        <tr>\n";
    echo 
"          <td width=\"11\" height=\"18\" background=\"images/blc.gif\">&nbsp;</td>\n";
    echo 
"          <td width=\"677\" height=\"18\" background=\"images/fondo.gif\">&nbsp;</td>\n";
    echo 
"          <td width=\"12\" height=\"18\" background=\"images/brc.gif\">&nbsp;</td>\n";
    echo 
"        </tr>\n";
    echo 
"      </table></td>";
    echo 
"  </tr>\n";
    echo 
"</table>";
    echo 
"<p>&nbsp;</p>";
      

Muchas gracias.
Un saludo.
  #4 (permalink)  
Antiguo 15/04/2005, 13:40
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Ok .. creo que ahora entendí ..

Cuando dices que usas ambas funciones en una sóla .. como usas $db->sql_query(). Es complicado ver el problema si usas una capa de abstracción de BD de la cual no vemos como funciona .. En algunas ocasiones tienes un método o acceso para obtener ese "result" que devuelve tu sql_query() .. pero eso es altamente variable .. depende de que haga dicho método.


Prueba:
Código PHP:
function dame_ultimos_post_foro($forumid,$num_post){ 
    global 
$db
    
$result $db->sql_query("SELECT  vb3_post.postid, vb3_post.threadid, vb3_post.username, vb3_post.userid, vb3_thread.title, vb3_post.dateline, vb3_forum.title FROM vb3_post, vb3_thread, vb3_forum WHERE vb3_thread.threadid=vb3_post.threadid and vb3_thread.forumid=$forumid and vb3_thread.forumid=vb3_forum.forumid ORDER BY vb3_post.dateline DESC LIMIT $num_post"); 

echo 
"<pre>";
print_r($result);
ecoh "</pre>";
    return 
$result

Para ver si se está generando bien tu consulta .. no sé que devolverá exactamente . .pero algo te indicará que funciona.

Un saludo,
  #5 (permalink)  
Antiguo 17/04/2005, 13:06
 
Fecha de Ingreso: enero-2005
Ubicación: Zaragoza
Mensajes: 3
Antigüedad: 19 años, 3 meses
Puntos: 0
[Solucionado] Comunicación entre funciones (SQL, Vis...)

Muchas gracias Cluster.
El encapsulamiento de la base de datos que utilizo es el que proporciona el PHP-Nuke.
Juraría que tengo el código tal cual lo tenía. Antes no funcionaba ahora sí. No hay como dormir unas horas y todo se ve diferente
Gracias otra vez.
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 17:14.