phpBB Italia chiude!
phpBB Italia ringrazia tutti gli utenti che hanno dato fiducia al nostro progetto per ben 9 anni, e che, grazie al grande lavoro fatto da tutto lo Staff (rigorosamente a titolo gratuito), hanno portato il portale a diventare il principale punto di riferimento italiano alla piattaforma phpBB.

Purtroppo, causa motivi personali, non ho più modo di gestirlo e portarlo avanti. Il forum viene ora posto in uno stato di sola lettura, nonché un archivio storico per permettere a chiunque di fruire di tutte le discussioni trattate.

Il nuovo portale di assistenza per l'Italia di phpBB diventa phpBB-Store.it, cui ringrazio per aver deciso di portare avanti questo grande progetto.

Grazie ancora,
Carlo - Amministratore di phpBB Italia

[risolto] recupero informazioni post

Area di discussione relativa al linguaggio di programmazione web più conosciuto. Il forum è dedicato anche a MySQL, la piattaforma di database più utilizzata con il PHP.
mae89
Utente
Utente
Messaggi: 112
Iscritto il: 12/05/2011, 9:32
Sesso: Maschio
Versione: 3.0.10
Server: UNIX/Linux
Contatta:

[risolto] recupero informazioni post

Messaggio da mae89 » 16/07/2011, 10:23

Ciao a tutti...

Sto scrivendo uno script per il recupero degli ultimi 5 post inseriti nel mio forum (evitando doppioni di titoli)... lo script è pronto:

Codice: Seleziona tutto

<?php
echo "<ul>";

mysql_connect($db_host,$db_user,$db_pass)or die("non riesco a connettermi");

mysql_select_db($database_name)or die("non riesco selezionare il database");

$sql = "SELECT DISTINCT post_subject, forum_id,topic_id FROM phpbb_posts ORDER BY post_id DESC LIMIT 0, 5";

$dati=mysql_query($sql);
while ($fetchM=mysql_fetch_row($dati))
{



$nome_post=$fetchM[0];
$forum_id=$fetchM[1];
$topic_id=$fetchM[2];


      $sql1 = "SELECT  forum_name,forum_image FROM phpbb_forums WHERE forum_id = $forum_id";

      $dati1=mysql_query($sql1);
      while ($fetchM1=mysql_fetch_row($dati1))
      {
        
           
        
        echo '<li><a  href="/new/forum//viewtopic.php?f='.$forum_id.'&t='.$topic_id.'#p'.$post_id.'"\><img src="new/forum/' .$fetchM1[1]. '" style="vertical-align: middle;"   alt="avatar" height="20" width="20" >   '.$fetchM1[0].' - '.$nome_post.'</a><br/></li>';
        

    }

}


//fine modifica


        echo "</ul>";?>
e questo script svolge ottimamente il suo dovere (se volete vederlo in azione premente qui) ma il problema sorge quando voglio che ogni titolo del post,sia anche un link diretta a quel post...

ora, come l'ho scritto io, il titolo del post mi porta al forum. Il problema sta che non riesco ad estrapolare la variabile del post stesso...

Quindi dovrei riuscire ad estrarmi anche post_id da

Codice: Seleziona tutto

$sql = "SELECT DISTINCT post_subject, forum_id,topic_id FROM phpbb_posts ORDER BY post_id DESC LIMIT 0, 5";  
poiche se io inserisco:


$sql = "SELECT DISTINCT post_subject, forum_id,topic_id,post_id FROM phpbb_posts ORDER BY post_id DESC LIMIT 0, 5";


ovviamente i doppioni non si eliminano piu....

vi ringrazio in anticipo
Ultima modifica di mae89 il 16/09/2011, 16:57, modificato 1 volta in totale.

Avatar utente
Carlo
Amministratore
Amministratore
Messaggi: 9957
Iscritto il: 19/04/2009, 10:24
Sesso: Maschio
Versione: 3.2.0
Server: UNIX/Linux
PHP: 7.1.0
Database: MySQL(i) 10.0.27-MariaDB-cll-lve
Località: Puglia
Contatta:

Re: recupero informazioni post

Messaggio da Carlo » 16/07/2011, 11:09

Intendi estrarre 1 post per discussione?
MODs | Stili | Traduzioni MOD
Ogni MP contenente una richiesta di supporto verrà ignorato.

mae89
Utente
Utente
Messaggi: 112
Iscritto il: 12/05/2011, 9:32
Sesso: Maschio
Versione: 3.0.10
Server: UNIX/Linux
Contatta:

Re: recupero informazioni post

Messaggio da mae89 » 17/07/2011, 0:56

mmm circa...

lo script, preleva gli ultimi 5 post, appartenenti a post diversi, in ordine cronologico. con questo sistema ottengo gli utlimi 5 topic dove è stato aggiunto qualcosa. ma per collegare questo dato, all'ultimo post mi serve il post_id.... che non riesco a prelevarlo con lo script precedente...

idee?

mae89
Utente
Utente
Messaggi: 112
Iscritto il: 12/05/2011, 9:32
Sesso: Maschio
Versione: 3.0.10
Server: UNIX/Linux
Contatta:

Re: recupero informazioni post

Messaggio da mae89 » 06/08/2011, 15:30

nessuno saprebbe aiutarmi?

Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
Messaggi: 3704
Iscritto il: 07/01/2010, 8:51
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.4.36
Database: MySQL 5.1.70-log
Località: Udine
Contatta:

Re: recupero informazioni post

Messaggio da Micogian » 06/08/2011, 15:38

La Mod Topten_Topics estrae gli ultimi 10 Topics, i 10 più letti e i 10 ultimi posts.
Adattarla a 5 Posts è una sciocchezza.

mae89
Utente
Utente
Messaggi: 112
Iscritto il: 12/05/2011, 9:32
Sesso: Maschio
Versione: 3.0.10
Server: UNIX/Linux
Contatta:

Re: recupero informazioni post

Messaggio da mae89 » 06/08/2011, 15:41

si ma la mia intenzione era scrivere uno script dato che mi serve importare queste informazioni in joomla...

Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
Messaggi: 3704
Iscritto il: 07/01/2010, 8:51
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.4.36
Database: MySQL 5.1.70-log
Località: Udine
Contatta:

Re: recupero informazioni post

Messaggio da Micogian » 06/08/2011, 16:25

mae89 ha scritto:si ma la mia intenzione era scrivere uno script dato che mi serve importare queste informazioni in joomla...
Perchè, nella Mod non è uno script ? è php.

EDIT:
a parte che ci sono altri modi per selezionare solo l'ultimo post di un Topic, la soluzione più semplice è quella di interrogare la tabella "topics", non "posts" e quindi senza bisogno del DISTINCT.
Nella tabella "topics" trovi, oltre al topic_id, "topic_last_post_id" e "topic_last_poster_id", quindi tutto quello che ti serve.
Nella Mod Topten_Topics funziona così.

davide cangiamila
Utente
Utente
Messaggi: 1
Iscritto il: 06/08/2011, 18:34
Sesso: Maschio
Versione: 3.0.9
Server: UNIX/Linux
PHP: 5

Re: recupero informazioni post

Messaggio da davide cangiamila » 06/08/2011, 20:18

Codice: Seleziona tutto

<?php

mysql_connect($db_host,$db_user,$db_pass)or die("non riesco a connettermi");

mysql_select_db($database_name)or die("non riesco selezionare il database");

$max = 20; //Ultimi N post da visualizzare

mysql_query("SET CHARACTER SET 'utf8'");
mysql_query("SET NAMES 'utf8'");

$query = "SELECT phpbb_topics.topic_id, phpbb_topics.forum_id, phpbb_topics.topic_last_post_id,  FROM_UNIXTIME( phpbb_topics.topic_last_post_time) as last_post_time, phpbb_topics.topic_title, phpbb_topics.topic_first_poster_name, phpbb_topics.topic_last_poster_colour, phpbb_topics.topic_last_poster_name, phpbb_forums.forum_name, phpbb_forums.forum_image 



FROM phpbb_topics
RIGHT JOIN phpbb_forums ON phpbb_topics.forum_id = phpbb_forums.forum_id
WHERE phpbb_forums.forum_id = 18 ORDER BY topic_last_post_time DESC LIMIT 0,$max";
//qui sopra puoi optare se estrarre i post da tutti i forum o solo da alcuni, puoi usare anche u paret_id
//WHERE phpbb_forums.parent_id != 121 or phpbb_forums.parent_id != 91 ORDER BY topic_last_post_time DESC LIMIT 0,$max";

$risultato = mysql_query($query);
if (!$risultato) {
	echo "Fallimento nell'esecuzione della query ($query) dal DB: " . mysql_error();
	exit;
}

if (mysql_num_rows($risultato) == 0) {
	echo "Nessuna riga trovata, niente da stampare quindi si esce";
	exit;
}

while ($dati = mysql_fetch_assoc($risultato)) {
	$data_ultimo_post=@$dati[last_post_time];
	$data_post=date ("d-m-Y", strtotime ($data_ultimo_post));
	$ora_post=date ("H:i", strtotime ($data_ultimo_post));
	//$test=time_to_eur($data_ultimo_post);
	echo '
		<a href="forum/viewforum.php?f='.@$dati[forum_id].'">
				<img src="img/tpl/articoli.png" style="float:left; margin-left:5px" />
		</a>
		<span class="autore">Scritto da:<a href="forum/memberlist.php?mode=viewprofile&un='.@$dati[topic_last_poster_name].'">
				'.$dati[@topic_last_poster_name].'
		</a> il '.$data_post.' alle '.$ora_post.'</span><br />
		<h3 class="link"><a href="forum/viewtopic.php?f='.@$dati[forum_id].'&t='.@$dati[topic_id].'#p'.@$dati[topic_last_post_id].'">'.@$dati[topic_title].'</a></h3>
        
		<br />
';
 }
	mysql_free_result($risultato);
?>

Avatar utente
Carlo
Amministratore
Amministratore
Messaggi: 9957
Iscritto il: 19/04/2009, 10:24
Sesso: Maschio
Versione: 3.2.0
Server: UNIX/Linux
PHP: 7.1.0
Database: MySQL(i) 10.0.27-MariaDB-cll-lve
Località: Puglia
Contatta:

Re: recupero informazioni post

Messaggio da Carlo » 07/08/2011, 14:07

bingo ha scritto:a parte che ci sono altri modi per selezionare solo l'ultimo post di un Topic, la soluzione più semplice è quella di interrogare la tabella "topics", non "posts" e quindi senza bisogno del DISTINCT.
Nella tabella "topics" trovi, oltre al topic_id, "topic_last_post_id" e "topic_last_poster_id", quindi tutto quello che ti serve.
Nella Mod Topten_Topics funziona così.
Infatti come detto da bingo, nella tabella degli argomenti (prefisso_topics), per ogni argomento viene riportato, se non erro, l'ID dell'ultimo messaggio.
MODs | Stili | Traduzioni MOD
Ogni MP contenente una richiesta di supporto verrà ignorato.

Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
Messaggi: 3704
Iscritto il: 07/01/2010, 8:51
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.4.36
Database: MySQL 5.1.70-log
Località: Udine
Contatta:

Re: recupero informazioni post

Messaggio da Micogian » 07/08/2011, 16:35

Certo che c'è l'ID dell'ultimo messaggio nella tabella prefix_topics, è topic_last_post_id
Lo script della Mod Topten Topics tiene conto anche dei permessi di lettura, quindi estrae un numero superiore di records per poi controllarli e terminare al raggiungimento del numero fissato per la lista.

Codice: Seleziona tutto

$list_rec = 20 ;
//---------- 10 Ultimi posts start -----------//
$sql4 = "SELECT tt.topic_id, tt.forum_id, tt.topic_moved_id, tt.topic_last_post_id, tt.topic_last_poster_id, tt.topic_last_poster_name, tt.topic_last_post_subject, tt.topic_last_post_time,
    ft.forum_id, ft.forum_name
    FROM " . TOPICS_TABLE . " tt, " . FORUMS_TABLE . " ft 
    WHERE tt.topic_type = 0
    AND tt.topic_moved_id = 0
    AND tt.forum_id = ft.forum_id
    ORDER BY tt.topic_last_post_time DESC LIMIT 0,$list_rec";
$result4 = $db->sql_query($sql4);
    $n4 = 0;
    while ($row4 = $db->sql_fetchrow($result4))
    {
       	if ($auth->acl_get('f_read', $row4['forum_id']) == 1) 
        {
            if ($n4 < $list_view)
			{
				$post_subject = str_replace("Re: ", "", $row4['topic_last_post_subject']) ;
				if (strlen($post_subject) > 28)
				{
				$post_title = substr($post_subject,0,25) . "...";
				}else{
				$post_title = $post_subject ;
				}
			$last_post_link[$n4]		= append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=" . $row4['forum_id'] . "&t=" . $row4['topic_id'] . "#p" . $row4['topic_last_post_id']);
			$last_post_title[$n4] 		= $row4['topic_last_post_subject'];
			$last_post_title_short[$n4] = $post_title;
			$last_post_forum[$n4]  		= $row4['forum_name'];
			$last_post_author[$n4] 		= $row4['topic_last_poster_name'];
			++$n4 ;          	
			}else{
			break ;
			}
        }
    }
//---------- 10 Ultimi posts end -----------//
Ovviamente la query lavora in ambiente phpbb e quindi non necessita della connessione al DB che c'è già.
Anche le variabili TOPIC_TABLE e FORUM_TABLE sono ricavata da phpbb.
In alternativa basta aggiungere lo script di connessione e sostituire le variabili TABLE con i nomi delle tabelle.

Rispondi

Torna a “PHP - MySQL”

Chi c’è in linea

Visitano il forum: Baidu [Spider] e 40 ospiti