- Home
- Categorie
- Coding e Sistemistica
- PHP
- Aiuto con elenco categorie in articoli di un blog
-
Puoi selezionare i dati mettendo DISTINCT per non avere doppioni e per il conteggio ti basterà utilizzare count(campo).
-
Ho un piccolo problemino, in pratica mettendo il codice in questo modo:
[PHP]<?
require_once ("config.php");$sql="SELECT * FROM posts ORDER BY id DESC" ;
$query=@mysql_query($sql) or die (mysql_error());while ($array=mysql_fetch_array($query))
{$titolo=html_entity_decode($array['titolo']);
$post=html_entity_decode($array['post']);
$immpost=html_entity_decode($array['immpost']);
$contenuto=html_entity_decode($array['contenuto']);
$fontenome=html_entity_decode($array);
$fonteind=html_entity_decode($array);
$tags=$array['tags'];
$giorno=$array['giorno'];
$mese=$array['mese'];
$anno=$array['anno'];
$ora=$array['ora'];
$id=$array['id'];
$postid=$id;$sql="SELECT * FROM categorie AS C JOIN assoc AS A ON C.id = A.id_categoria WHERE A.id_post='$post_id'";
$query=@mysql_query($sql) or die (mysql_error());while ($array=mysql_fetch_array($query))
{
echo $array['campo_nome_categoria'].",";
}}
?>
[/PHP]
(Ovviamente con i nomi dei campi corretti), funziona, però mi mostra solo l'ultimo post inserito; dov'è il problema?
-
Perché devi utilizzare altri nomi per le istruzioni sql e l'array dentro il while primario.
Dovresti strutturarle in questa maniera:
[php]<?phprequire_once ("config.php");
$sql_post="SELECT * FROM posts ORDER BY id desc" ;
$query_post=@mysql_query($sql_post) or die (mysql_error());while ($array_post=mysql_fetch_array($query_post))
{echo $array_post['id']."-".$array_post['title']."-".$array_post['text']."-".$array_post['date'];
$sql_cat="SELECT * FROM categorie AS C JOIN assoc AS A ON C.id = A.id_cat WHERE A.id_post='".$array_post['id']."'";
$query_cat=@mysql_query($sql_cat) or die (mysql_error());while ($array_cat=mysql_fetch_array($query_cat))
{
echo "-".$array_cat['categoria'];
}
echo "<br />";}
?>[/php]
-
Guarda ho provato così, ti mostro tutto il codice completo:
[PHP]
<?
require_once ("config.php");//verifico che ci siano post
$sql="SELECT id FROM posts";
$query=@mysql_query($sql) or die (mysql_error());
$row=mysql_num_rows($query);//procedo nel caso ci siano post
if ($row!=0) {$sql_post="SELECT * FROM posts ORDER BY id DESC" ;
$query_post=@mysql_query($sql_post) or die (mysql_error());while ($array_post=mysql_fetch_array($query_post))
{$titolo=html_entity_decode($array_post['titolo']);
$post=html_entity_decode($array_post['post']);
$immpost=html_entity_decode($array_post['immpost']);
$contenuto=html_entity_decode($array_post['contenuto']);
$fontenome=html_entity_decode($array_post);
$fonteind=html_entity_decode($array_post);
$categorie=html_entity_decode($array_post['categorie']);
$tags=$array_post['tags'];
$giorno=$array_post['giorno'];
$mese=$array_post['mese'];
$anno=$array_post['anno'];
$ora=$array_post['ora'];
$id=$array_post['id'];
$postid=$id;//conto quanti commeti ci sono per questo post
$st="SELECT COUNT(*) AS tot FROM commenti WHERE postid='$postid'" ;
$que=@mysql_query($st) or die (mysql_error());
$que=mysql_fetch_assoc($que);
$totalecom=$que['tot'];//associo le categorie al post
$sql_cat="SELECT * FROM categorie AS C JOIN postcat AS A ON C.id = A.id_categoria WHERE A.id_post='$postid'";
$query_cat=@mysql_query($sql_cat) or die (mysql_error());while ($array_cat=mysql_fetch_array($query_cat))
{
echo $array_cat['codicecat'].", ";
}}
//poi qui metto le varie scritture per stampare i risultati e chiudo l'if
}
?>
[/PHP]Però non mi va lo stesso, non so come mai, mi mostra sempre il primo post
-
@ManuelHT said:
> **}** **//poi qui metto le varie scritture per stampare i risultati e chiudo l'if** } ?> >``` Eccallà :D Perché la stampa la effettui fuori dal ciclo while, indi ti manda in stampa l'ultimo dato salvato nelle variabili, ti basta mettere la stampa dei risultati prima di quella graffa. ;)
-
Perfetto ora va tutto alla perfezione, grazie mille.
Un ultimissima cosa, se volessi fare in modo che per ogni post si vedano solo un tot di parole e poi cliccando su "Leggi tutto" si vada al resto dell'articolo come potrei fare??Grazie ancora
-
Ciao io opterei per una sottostringa.
$quanticaratteri=10; $lunghezza= strlen($messaggio); if($lunghezza<=$quanticaratteri) { echo $messaggio } else { $sottostringa=substr($messaggio, 0, $quanticaratteri); echo $sottostringa."..."; }
Chiedo scusa se il codice è sbagliato, ma provengo da Asp, Php lo ho visto poco.
-
Giusto Marco, manca solo un banale ; dopo echo $messaggio, ma va benissimo.
Mi permetto l'intervento solo per una precisazione sull'utilizzo di questo script, perché finché il dato contenuto in $messaggio è privo di tag html va benissimo, ma se utilizzi un editor per salvare il post o comunque utilizzi un qualche tipo di formattazione, ti ritroveresti con dei tag html aperti e non chiusi.
Nel caso tu formattassi il testo dei post allora un metodo è quello di utilizzare la funzione strip_tags, prima di passare $messaggio allo script che ti ha postato Marco.
-
Ok allora proverò come dici tu.
Ma per esempio una volta mi ricordo di aver visto dei pannelli di controllo già fatti che assomigliavano a quello di wordpress (non so se avete presente) ed erano installabili sui siti web normali, sapete mica dove posso reperirli??Ps: Comunque grazie a tutti e due per l'aiuto.
-
Mannaggia hai ragione Samyorn.
Si trovava con div aperti e mai chiusi, magari si spostava anche tutto il template.
-
@ManuelHT said:
Ma per esempio una volta mi ricordo di aver visto dei pannelli di controllo già fatti che assomigliavano a quello di wordpress (non so se avete presente) ed erano installabili sui siti web normali, sapete mica dove posso reperirli??
Sotto quest'aspetto non saprei aiutarti, mi spiace, i pannelli di controllo me li faccio da me.
@marcocarrieri said:
Mannaggia hai ragione Samyorn.
Ma figurati Marco, il tuo indirizzo era giustissimo, solo che immaginavo potevano esserci delle formattazioni nel testo e quindi era consigliabile aggiungere una funzione.