Problemita sencillo con código PHP

  • Autor Autor jose0071990
  • Fecha de inicio Fecha de inicio
J

jose0071990

Curioso
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Buenas tardes. Antes de nada dar las gracias por la ayuda que sé que voy a recibir por vuestra parte :$. Tengo un código en PHP que muestra los 5 top posters de la semana. Sé que habra que cambiar algo de la parte donde pone "$starttime" y lo de "$mostactiveweek_get" pero no tengo ni idea de lo que hay que cambiar. Lo que quiero es que en vez de ser de una semana, la cuenta de mensajes sea vitalicia.
PD: Éste código va en un widget del CMS 🙂

PHP:
$posts = "Posts"; 
  ob_start(); 
  require_once('./includes/functions_user.php'); 
  require_once('./includes/functions_bigthree.php'); 
  // Current Week Top Posters 
  $starttime = mktime(0, 0, 0, date('n'), date('j'), date('Y')) - ((date('N')-1)*3600*24); 
  // Get Top Members for current week 
  $mostactiveweek_get = vB::$db->query_read(" 
    SELECT ".TABLE_PREFIX."user.userid, ".TABLE_PREFIX."user.username, ".TABLE_PREFIX."user.usertitle, 
     COUNT(".TABLE_PREFIX."post.postid) AS postcount 
    FROM ".TABLE_PREFIX."user 
     LEFT JOIN ".TABLE_PREFIX."post 
      ON ".TABLE_PREFIX."post.userid=".TABLE_PREFIX."user.userid 
       AND dateline>'".$starttime."' 
   GROUP BY ".TABLE_PREFIX."user.userid 
   ORDER BY postcount DESC 
   LIMIT 5"); 
  $topposter = true; 
  $output_bits = ''; 
  while($user = vB::$db->fetch_array($mostactiveweek_get)) 
  { 
        $percentage = round(($user[postcount]/$totalposts[postcount]) * 100); 
        if($topposter == true) 
        { 
           $avatarurl = fetch_avatar_url($user[userid]); 
           if (!$avatarurl) { 
               $useravatar = 'images/misc/avatar.png'; 
           } else  { 
              $useravatar = $avatarurl[0]; 
           } 
           $output_bits .='<div align="center"> 
                           <img border="0" src="'.$useravatar.'"><br /> 
                           <a target="_blank" href="member.php?u='.$user[userid].'">'.$user[username].'</a><br /> 
                           '.$user[usertitle].'<br /> 
                           '.$posts.':&nbsp;'.$user[postcount].'<br /> 
                           </div><hr />'; 
           $topposter = false; 
        } else { 
           $output_bits .= '<a target="_blank" href="member.php?u='.$user[userid].'">'.$user[username].'</a><div style="float: right;">'.$user[postcount].'</div><br />'; 
        } 
  } 
  $output = $output_bits; 
  ob_end_clean();
 
y supongo que deberias borrar esa linea.
Asi no tiene un rago maximo de conteo.
 
A qué línea te refieres Agustín? a la relacionada con //current week top posters(la que viene debajo, vaya)???? Ya lo intenté pero sigue igual. Osease: Siguen saliendo los mismos top posters, no salen los moderadores (por ejemplo) que tendrán más de 50 mensajes.
La cuenta total de post no aparece.
 
Aca esta tu problema:
PHP:
 GROUP BY ".TABLE_PREFIX."user.userid 
   ORDER BY postcount DESC 
   LIMIT 5");

Saca el LIMIT 5. o pone mas.
Si queres un limite de 100 mensajes : LIMIT 100.
Si no queres limite, elmina LIMIT 5.
 
Así tengo el código ahora mismo y no veo nada diferente. Sale el mismo usuario con 2 post (Que son los que lleva esta semana) no salen los 67 totales que tiene


PHP:
$posts = "Posts"; 
  ob_start(); 
  require_once('./includes/functions_user.php'); 
  require_once('./includes/functions_bigthree.php'); 
  // Get Top Members for current week 
  $mostactiveweek_get = vB::$db->query_read(" 
    SELECT ".TABLE_PREFIX."user.userid, ".TABLE_PREFIX."user.username, ".TABLE_PREFIX."user.usertitle, 
     COUNT(".TABLE_PREFIX."post.postid) AS postcount 
    FROM ".TABLE_PREFIX."user 
     LEFT JOIN ".TABLE_PREFIX."post 
      ON ".TABLE_PREFIX."post.userid=".TABLE_PREFIX."user.userid 
       AND dateline>'".$starttime."' 
   GROUP BY ".TABLE_PREFIX."user.userid 
   ORDER BY postcount DESC"); 
  $topposter = true; 
  $output_bits = ''; 
  while($user = vB::$db->fetch_array($mostactiveweek_get)) 
  { 
        $percentage = round(($user[postcount]/$totalposts[postcount]) * 100); 
        if($topposter == true) 
        { 
           $avatarurl = fetch_avatar_url($user[userid]); 
           if (!$avatarurl) { 
               $useravatar = 'images/misc/avatar.png'; 
           } else  { 
              $useravatar = $avatarurl[0]; 
           } 
           $output_bits .='<div align="center"> 
                           <img border="0" src="'.$useravatar.'"><br /> 
                           <a target="_blank" href="member.php?u='.$user[userid].'">'.$user[username].'</a><br /> 
                           '.$user[usertitle].'<br /> 
                           '.$posts.': '.$user[postcount].'<br /> 
                           </div><hr />'; 
           $topposter = false; 
        } else { 
           $output_bits .= '<a target="_blank" href="member.php?u='.$user[userid].'">'.$user[username].'</a><div style="float: right;">'.$user[postcount].'</div><br />'; 
        } 
  } 
  $output = $output_bits; 
  ob_end_clean();

PD: Ese límite que me hiciste quitar no se refiere al número de usuarios que han de parecer en el widget?
 
Fijate esto:
$percentage = round(($user[postcount]/$totalposts[postcount]) * 100);

La verdad nose como funciona tu script.
 
Sinceramente.. yo tampoco lo sé, lo rebusqué por internet (hay permiso para ponerlo donde se quiera y hacerle modificaciones).

Intentaré poner el post en PHP a ver si ahí consigo lo que quiero. Muchas gracias por el intento Agustin 😛 =D
 
Consulta sobre codigo php

Buenas tardes. Antes de nada dar las gracias por la ayuda que sé que voy a recibir por vuestra parte :$. Tengo un código en PHP que muestra los 5 top posters de la semana. Sé que habra que cambiar algo de la parte donde pone "$starttime" y lo de "$mostactiveweek_get" pero no tengo ni idea de lo que hay que cambiar. Lo que quiero es que en vez de ser de una semana, la cuenta de mensajes sea vitalicia.
PD: Éste código va en un widget del CMS 🙂

PHP:
$posts = "Posts"; 
  ob_start(); 
  require_once('./includes/functions_user.php'); 
  require_once('./includes/functions_bigthree.php'); 
  // Current Week Top Posters 
  $starttime = mktime(0, 0, 0, date('n'), date('j'), date('Y')) - ((date('N')-1)*3600*24); 
  // Get Top Members for current week 
  $mostactiveweek_get = vB::$db->query_read(" 
    SELECT ".TABLE_PREFIX."user.userid, ".TABLE_PREFIX."user.username, ".TABLE_PREFIX."user.usertitle, 
     COUNT(".TABLE_PREFIX."post.postid) AS postcount 
    FROM ".TABLE_PREFIX."user 
     LEFT JOIN ".TABLE_PREFIX."post 
      ON ".TABLE_PREFIX."post.userid=".TABLE_PREFIX."user.userid 
       AND dateline>'".$starttime."' 
   GROUP BY ".TABLE_PREFIX."user.userid 
   ORDER BY postcount DESC 
   LIMIT 5"); 
  $topposter = true; 
  $output_bits = ''; 
  while($user = vB::$db->fetch_array($mostactiveweek_get)) 
  { 
        $percentage = round(($user[postcount]/$totalposts[postcount]) * 100); 
        if($topposter == true) 
        { 
           $avatarurl = fetch_avatar_url($user[userid]); 
           if (!$avatarurl) { 
               $useravatar = 'images/misc/avatar.png'; 
           } else  { 
              $useravatar = $avatarurl[0]; 
           } 
           $output_bits .='<div align="center"> 
                           <img border="0" src="'.$useravatar.'"><br /> 
                           <a target="_blank"  href="member.php?u='.$user[userid].'">'.$user[username].'</a><br  /> 
                           '.$user[usertitle].'<br /> 
                           '.$posts.':&nbsp;'.$user[postcount].'<br /> 
                           </div><hr />'; 
           $topposter = false; 
        } else { 
           $output_bits .= '<a target="_blank"  href="member.php?u='.$user[userid].'">'.$user[username].'</a><div  style="float: right;">'.$user[postcount].'</div><br />';  
        } 
  } 
  $output = $output_bits; 
  ob_end_clean();

PD: Postee esto antes en el apartado de problemas con vbulletin, pero creo que este apartado es más indicado.
 
okz .
copia y pega esto :

PHP:
$posts = "Posts"; 
  ob_start(); 
  require_once('./includes/functions_user.php'); 
  require_once('./includes/functions_bigthree.php'); 
  // Current Week Top Posters 
  $starttime = mktime(0, 0, 0, date('n')); 
  // Get Top Members for current week 
  $mostactiveweek_get = vB::$db->query_read(" 
    SELECT ".TABLE_PREFIX."user.userid, ".TABLE_PREFIX."user.username, ".TABLE_PREFIX."user.usertitle, 
     COUNT(".TABLE_PREFIX."post.postid) AS postcount 
    FROM ".TABLE_PREFIX."user 
     LEFT JOIN ".TABLE_PREFIX."post 
      ON ".TABLE_PREFIX."post.userid=".TABLE_PREFIX."user.userid 
       AND dateline>'".$starttime."' 
   GROUP BY ".TABLE_PREFIX."user.userid 
   ORDER BY postcount DESC 
   LIMIT 5"); 
  $topposter = true; 
  $output_bits = ''; 
  while($user = vB::$db->fetch_array($mostactiveweek_get)) 
  { 
        $percentage = round(($user[postcount]/$totalposts[postcount]) * 100); 
        if($topposter == true) 
        { 
           $avatarurl = fetch_avatar_url($user[userid]); 
           if (!$avatarurl) { 
               $useravatar = 'images/misc/avatar.png'; 
           } else  { 
              $useravatar = $avatarurl[0]; 
           } 
           $output_bits .='<div align="center"> 
                           <img border="0" src="'.$useravatar.'"><br /> 
                           <a target="_blank" href="member.php?u='.$user[userid].'">'.$user[username].'</a><br /> 
                           '.$user[usertitle].'<br /> 
                           '.$posts.':&nbsp;'.$user[postcount].'<br /> 
                           </div><hr />'; 
           $topposter = false; 
        } else { 
           $output_bits .= '<a target="_blank" href="member.php?u='.$user[userid].'">'.$user[username].'</a><div style="float: right;">'.$user[postcount].'</div><br />'; 
        } 
  } 
  $output = $output_bits; 
  ob_end_clean();

 
No funciona.. sigue igual
 
No puedo creer que no se hayan dado cuenta donde esta la variable que pide los datos de semana xD. No es necesario saber PHP solo analizar un poco este codigo ^^

Lo que buscan es esto:

PHP:
$starttime = mktime(0, 0, 0, date('n'), date('j'), date('Y')) - ((date('N')-1)*3600*24);

Ahora no se con que reemplazarlo porque no se PHP pero, pensandolo un poco esta es una limitacion de tiempo osea habria que quitarla, pero ademas de eliminarla se debe no hacer esa limitacion en todo el codigo... ¿pienso yo xD?
 
Para que sean los top posteadores de una semana remplaza la linea de NKC por esta:

PHP:
<?
$startTime = mktime(0, 0, 0, date('n'), date('j'), date('Y')) - ((date('N')-1)*3600*24);
$endTime = mktime(); 
?>
 
Para que sean los top posteadores de una semana remplaza la linea de NKC por esta:

PHP:
<?
$startTime = mktime(0, 0, 0, date('n'), date('j'), date('Y')) - ((date('N')-1)*3600*24);
$endTime = mktime(); 
?>

Claro pero el quiere que sean los top posteadores (sin limite de tiempo).
 
Claro pero el quiere que sean los top posteadores (sin limite de tiempo).

Con este todo un año:

<?
$startTime = mktime(0, 0, 0, 1, 1, date('Y'));
$endTime = mktime();
?>
 
Atrás
Arriba