Visualizzazione risultati 1 fino 5 di 5

Discussione: Script PHP da ottimizzare...

  1. #1
    Guest

    Predefinito Script PHP da ottimizzare...

    Salve! io ho trovato questo script, che permette di vedere gli ultimi messaggi inseriti nel forum in home page:
    Codice:
    <?php
       $topicnumber = 10;
       $urlImg = "../Chat-2.gif";
       $phpbb_root_path = './forum/';
    
       define('IN_PHPBB', true);
    
       include($phpbb_root_path . 'extension.inc');
       include($phpbb_root_path . 'common.'.$phpEx);
    
       $table_topics = $table_prefix. "topics";
       $table_forums = $table_prefix. "forums";
       $table_posts = $table_prefix. "posts";
       $table_users = $table_prefix. "users";
    
       $query = "SELECT t.topic_id, t.topic_title, t.topic_last_post_id, t.forum_id, p.post_id, p.poster_id, p.post_time, u.user_id, u.username
       FROM $table_topics t, $table_forums f, $table_posts p, $table_users u
       WHERE t.topic_id = p.topic_id AND
       f.forum_id = t.forum_id AND
       t.topic_status <> 2 AND
       p.post_id = t.topic_last_post_id AND
       p.poster_id = u.user_id
       ORDER BY p.post_id DESC LIMIT $topicnumber";
       $result = mysql_query($query) or die("Query failed");
    
       print "<table cellpadding='0' cellSpacing='0' width='95%' align='center'>";
       while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
       {
          echo  "<tr valign='top'><td><a href=\'$urlPath/viewtopic.php?topic=$row[topic_id]&forum=$row[forum_id]\'><img src=\'$urlImg\' border=\'0\'></a></td><td><font face=\'Verdana, Arial, Helvetica, sans-serif\'><font color=\'#FFCC00\'><b><a href=\'$urlPath/viewtopic.php?topic=$row[topic_id]&forum=$row[forum_id]\'>" .
          $row["topic_title"] .
          "</a></td></font></b><td><font face=\'Verdana, Arial, Helvetica, sans-serif\'><font color=\'#000000\'> by: <a href=\'$urlPath/profile.php?mode=viewprofile&u=$row[user_id]\'>" .
          $row["username"] .
          "</td><td><font face=\'Verdana, Arial, Helvetica, sans-serif\'><font color=\'#000000\'>" .
          date('F j, Y, g:i a', $row["post_time"]) .
          "</td></tr></font>";
       }
       print "</table>\"";
    
       mysql_free_result($result);
    ?>
    Il problema è che si vedono anche i forum delle aree private... e ciò non è bene! c'è un modo per risolvere?

    Grazie!

  2. #2
    Guest

    Predefinito

    mmh... lo script vale per tutti i forum? (ipb, phpbb, ecc. ?)

  3. #3
    Guest

    Predefinito

    questo vale per phpBB ma è da perfezionare... (ribadisco che l'ho trovato così e che ho bisogno di una mano per risolvere il problema delle aree private!)

  4. #4
    Ospite Guest

    Predefinito

    Ciao, non sono molto afferrato in Php, ma qualcosa riesco a leggerlo nel codice in quanto programo in ASp, e questo mi aiuta pochino ^^

    Non so se erro, ma forse in questo pezzo di codice:
    "$query = "SELECT t.topic_id, t.topic_title, t.topic_last_post_id, t.forum_id, p.post_id, p.poster_id, p.post_time, u.user_id, u.username
    FROM $table_topics t, $table_forums f, $table_posts p, $table_users u
    WHERE t.topic_id = p.topic_id AND
    f.forum_id = t.forum_id AND
    t.topic_status <> 2 AND
    p.post_id = t.topic_last_post_id AND
    p.poster_id = u.user_id
    ORDER BY p.post_id DESC LIMIT $topicnumber";
    "
    devi aggiungere un'altro fattore di selezione. Dopo WHERE ci sono delle condizioni di selezione, con cui il codice seleziona i messaggi da mostrare. Si potrebbe aggiungere una condizione in modo che il codice selezioni tutti i messaggi non privati. ^_^
    I campi puoi prenderli tranquillamente in PHPAdmin.

    Chissà se il mio ragionamento è valido?

    Ciao ciao

    P.S. caso mai ci provassi io, te lo comunico, ma spero che riuscirai a risolvere presto ^^

  5. #5
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Certo, il problema era trovare QUALE criterio escludere

    Facendo una ricercuzza ben mirata su google, pare che basti indicare il livello base di autorizzazione (pubblica), cioè aggiungere:
    AND f.auth_read = 0

    ripetendo tutta la query per chiarezza:
    Codice PHP:
    $query = "SELECT t.topic_id, t.topic_title, t.topic_last_post_id, t.forum_id, p.post_id, p.poster_id, p.post_time, u.user_id, u.username
    FROM
    $table_topics t, $table_forums f, $table_posts p, $table_users u
    WHERE t.topic_id = p.topic_id AND
    f.forum_id = t.forum_id AND
    t.topic_status <> 2 AND
    p.post_id = t.topic_last_post_id AND
    p.poster_id = u.user_id
    AND f.auth_read = 0
    ORDER BY p.post_id DESC LIMIT
    $topicnumber";
    Guarda la riga aggiunta prima di ORDER BY.
    Fammi sapere se funziona... altrimenti cerchiamo meglio eheh
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •