PDA

View Full Version : [php] mostrare le news nella homepage


KuWa
28-08-2009, 15:47
Salve a tutti, spero possiate darmi una mano. Ho un database e ho implementato l'inserimento, cancellazione delle news tramite php. Ora ho la homepage e dovrei far visualizzare il titolo delle ultime 5 news. Non sono molto pratico e può essere che la domanda sia banale/stupida. Come posso far aggiornare le news in maniera intelligente? I problemi per quanto mi riguarda sono due: uno la home è in html e se volessi aggiornare le news ad ogni refresh dovrei rinominare il file index.html in .php ma dopo funzionerebbe il tutto?
Se volessi aggiornare le news ad ogni inserimento di news come dovrei fare?
ah le new scorrono e per fare questo non posso usare flash e ho utilizzato il tag Marqee (so che non è molto compatibile ma non ho trovato altro).

Ammettendo di aver superato questo problema poi dovrei fare un'altra cosa... cliccando il titolo della news dovrebbe andare in un'altra pagina e visualizzare il titolo + il testo. come posso fare questo in php?
grazie a tutti. se avete ulteriori domande chiedete.

Y3PP4
28-08-2009, 16:02
se avete ulteriori domande chiedete.

Come può, il titolo del topic, aiutare chi in futuro cercherà una soluzione questo problema?
Come fanno, i possibili interessati, a sapere cosa chiedi per sapere se lo sanno - gli interessa- o meno?
Mah...






Per dare comunque un reale contributo alla discussione,
basta semplicemente che mostrando il link alla notizia scrivi dinamicamente dei dati, magari da passare in GET alla pagina che deve mostrare l'articolo (supponendo che si chiami "shownews.php", ad esempio "shownews.php?id_notizia=1)

Poi dipende da come è strutturato il tuo database, passi dei riferimenti alla pagina che analizzandoli può effettuare una query al database recuperando il titolo della notizia e il corpo, poi da lì è tutta impaginazione dinamica del contenuto.
Definisci la struttura e dentro i tags ci metti il contenuto.

Per aprire una nuova pagina è semplice HTML.... usi l'attributo target del tag <a>. (che dice al browser "apri il link in una nuova pagina")

Ciao.

KuWa
28-08-2009, 17:02
manderò un pvt al moderatore pere il titolo... scusate ma non ci ho proprio pensato.
cmq il problema non è recuperare i titoli dal database... quello lo so fare benissimo.
1) come visualizzo le news nella index? il problema è che l'index è html e non posso semplicemente inserire il codice php li...
2)so come fare a linkare una pagina... ma il problema è linkarla e, in base alla "parola" del link, visualizzare la nuova pagina in maniera dinamica... in pratica come faccio a leggere il titolo del link.
Faccio un esempio: HWUPGRADE ("www.hwupgrade.it). in questo caso io dovrei leggere la parola HWUPGRADE per andarla a cercare nel database.
se hai un suggerimento per il titolo del topic te ne sarei grato perchè non mi va bene.

Y3PP4
28-08-2009, 17:11
manderò un pvt al moderatore pere il titolo... scusate ma non ci ho proprio pensato.
cmq il problema non è recuperare i titoli dal database... quello lo so fare benissimo.
1) come visualizzo le news nella index? il problema è che l'index è html e non posso semplicemente inserire il codice php li...
2)so come fare a linkare una pagina... ma il problema è linkarla e, in base alla "parola" del link, visualizzare la nuova pagina in maniera dinamica... in pratica come faccio a leggere il titolo del link.
Faccio un esempio: HWUPGRADE ("www.hwupgrade.it). in questo caso io dovrei leggere la parola HWUPGRADE per andarla a cercare nel database.
se hai un suggerimento per il titolo del topic te ne sarei grato perchè non mi va bene.

Il metodo più semplice è usare un formato .php
lasciare il semplice html li com'è e dove vuoi le news inserisci il codice PHP tra i tag <?php e ?>... non vedo dov'è il problema.
Se devi fare tutto dinamicamente questa è la soluzione - la pagina deve essere dinamica -... altrimenti dovresti modificare te a mano tutto... e non è una soluzione pensabile se le news non le inserisci tu, o comunque è assurdo dover usare un simile escamotage potendo usufruire del PHP.

Riguardo l'aggiornamento automatico basta che fai una query in cui richiedi le ultime 5 news e poi fai un fetch del risultato stampando tutti i link e i titoli...

Y3PP4
28-08-2009, 19:32
Chiedo scusa per il ritardo ma son dovuto uscire.
Allora.

1) come visualizzo le news nella index? il problema è che l'index è html e non posso semplicemente inserire il codice php li...

Per farlo dinamicamente, hai bisogno di una pagina dinamica, nel tuo caso PHP è la risposta.
Volendo potresti crearti una classe Template che carica in una variabile l'intero contenuto del file html, e crearti una specie di parser, che all'occorrenza di una certa stringa sostituisca il contenuto dinamicamente. Es. nel file html tra i tag <h1>e</h1> ci metti un tag speciale come potrebbe essere <$ titolo $> e sostituisci poi il tag speciale con il titolo, e cosi via... Altrimenti fai come sopra... metti il PHP nell'HTML.

2)so come fare a linkare una pagina... ma il problema è linkarla e, in base alla "parola" del link, visualizzare la nuova pagina in maniera dinamica... in pratica come faccio a leggere il titolo del link.

Nella pagina usando PHP leggi le ultime 5 news dal db, quindi prendi il titolo è lo usi come testo (visualizzato) del link, nel attributo href, ci linki una pagina che si occupa di recuperare le news, che accetta i parametri in GET.
Quindi, sapendo con che riferimento, estrai i contenuti dal database (ad esempio NEWS_ID), nella home crei il link "http://www.example.com/viewnews.php?id=ID_NEWS, dove id news il parametro di riferimento che ti fà riconoscere la news da estrarre (potrebbero essere più parametri). Cliccando sul link si apre la pagina viewnews.php?id=ID_NEWS, che legge il parametro get "id" e quindi inserisci l'id nella query per tirar fuori dal database quella news (cosi come l'hai recuperata con la query che ti ha permesso di creare il link dinamico). Ti ritorna quindi il risultato, effettui una fetch e recuperi tutti i dati che ti servono che verranno messi nel corpo della pagina e restituita... et voilà! Hai il tuo sistema di news.... il concetto è molto semplice.

Quello della classe che richiama i template è un possibile metodo per tenere la logica separata dalla presentazione - per altro, secondo me un MUST se si programma OOP -.

Spero di essere stato chiaro, nel caso dimmi cosa non ti torna.

Faccio un esempio: HWUPGRADE ("www.hwupgrade.it). in questo caso io dovrei leggere la parola HWUPGRADE per andarla a cercare nel database.
se hai un suggerimento per il titolo del topic te ne sarei grato perchè non mi va bene.Se devi estrarre le ultime 5 news non serve questa logica... non è un motore di ricerca... (per altro, semplicisticamente risolvibile con una buona query... a meno che tu non voglia competere con google).

Tu estrai le 5 news, ne recuperi i riferimenti (di solito nei database a ogni record si assegna un ID) e crei il link. Aperto il link la pagina legge l'ID passato tramite GET (accodato al nome del file) e recupera dal database il risultato corrispondente all'ID.

Ripeto, il metodo è molto semplice, il concetto pure.

Riguardo a un possibile nome... boh... mettici [PHP] Creare link dinamici per lettura news.

Insomma, sintetizza il contenuto del topic.

Ciao!

KuWa
29-08-2009, 01:44
quindi se cambio l'estensione dovrebbe funzionare se ho capito bene? quello che ho fatto è fare una query per le ultime 5 e prendere i risultati in un fetch no?
fin qui è semplice.
Dopo hai detto
Quindi, sapendo con che riferimento, estrai i contenuti dal database (ad esempio NEWS_ID), nella home crei il link "http://www.example.com/viewnews.php?id=ID_NEWS . qua ho capito cosa intendi ma come lo faccio? puoi farmi un esempio?

Y3PP4
29-08-2009, 10:52
quindi se cambio l'estensione dovrebbe funzionare se ho capito bene? quello che ho fatto è fare una query per le ultime 5 e prendere i risultati in un fetch no?
fin qui è semplice.
Dopo hai detto
. qua ho capito cosa intendi ma come lo faccio? puoi farmi un esempio?

Allora, vado direttamente con un esempio *incompleto* giusto per farti capire come procedere.

Partiamo supponendo di avere una tabella come segue:

[ovviamente questo non è codice SQL]
(nome della tabella: news)
ID - Autoincrement
Title - Varchar(30)
Date - Int o una delle funzioni "date" di MySQL, che consiglio.
// .... body etc etc
Ho solo specificato il campo ID e Title perchè sono probabilmente i due campi (salvo diversa disposizione della tabella) che ti trovi ad usare per trovare una news.
Adesso effettui una query al database dicendogli esplicitamente "dammi solo i primi 5 record".
Ecco un'esempio SELECT ID, Title FROM news LIMIT 0, 5
Nota la clausola LIMIT che, in questo caso, dice al database dammi solo i primi cinque record.
Se li vuoi ordinare ti basta a questo punto addizionare alla query la clausola ORDER BY Date DESC (cosi saranno ordinati in modo decrescente- il primo articolo visualizzato è l'ultimo inserito).

A questo punto è tutto PHP. Supponiamo di aver già effettuato la connessione, i dovuti controlli e la query è stata definita in una variabile $myquery.
$result = mysql_query( $query, $database );
Ora fai un fetch del risultato con una bella chiamata a mysql_fetch_array, lo metti come segue in un ciclo while, come da esempio:
while( $row = mysql_fetch_array( $result ) )
{
echo "<a href=\"viewnews.php?id_news=$row[id]\">$row[titolo]<\a><br />";
}

Questo è un semplice ecempio, volendo puoi anche metterci la data accando al titolo o tra parentesi producendo un ipotetico risultato come segue:Titolo del post (news del: 00/00/0000)
- questo risultato ovviamente se metti tra parentesi la data :), altrimenti solo il titolo del post)

A questo punto la questione link è risolta hai i link ordinati bell'e pronti.
Ovviamente il link deve funzionare, quindi crei il relativo file viewnews in cui eseguirai le query in base al parametro GET che ricevi.
I parametri GET li prendi cosi:$news=$_GET['id_news'];
$myquery = "SELECT * FROM news WHERE ID='$news'";

A questo punto, nuovamente effettui un fetch (essendo solo uno il record ovviamente non cicli nulla), ottieni quindi i vari valori e poi nel documento HTML piazzi le variabili come<h2>$row[title]</h2><p>$row[body]</p>

E cosi via...
Come vedi non è impossibile farlo, anzi è una delle cose più comuni con PHP (altrimenti non si giustificherebbe la dinamicità senza passaggio di parametri).

Spero di essere stato esauriente.
Per ulteriori referenze sulle funzioni o sulle query riferisciti direttamente ai siti ufficiali PHP (http://www.php.net) e MySQL (http://www.mysql.it).


Buona giornata.

PS. Ci tengo a dire che solitamente i parametri vengono SEMPRE controllati per sicurezza, nel tuo caso un ID sbagliato inserito da un utente può dare un vecchio post se esistente, altrimenti un errore. Bisogna sempre controllare comunque gli input secondo il dato aspettato, perchè nel caso si effettuino query un po' più complesse o anche no, che comunque non sono controllate si lascia un buco verso attacchi di tipo SQL Injection.
Nel passato - ma anche oggigiorno - anche siti di una certa portata sono stati colpiti da questi attacchi, fai ben attenzione.

KuWa
29-08-2009, 11:21
grazie mille per l'esempio... in realtà non sapevo che dando il link nella maniera che mi hai consigliato tu (cioè passando come parametro l'id), dopo potevo fare il get nell'altro file come si può fare con i form.

Y3PP4
29-08-2009, 13:14
grazie mille per l'esempio... in realtà non sapevo che dando il link nella maniera che mi hai consigliato tu (cioè passando come parametro l'id), dopo potevo fare il get nell'altro file come si può fare con i form.

Beh se dai un occhiata alla documentazione HTTP riguardante i metodi di interazione tra i tanti trovi GET e POST.
Leggi e capirai molte cose, come il limite di caratteri passabili per il metodo GET.

Sottolineo, comunque che puoi passare più variabili nella forma .php?var1=value1&var2=value2

E cosi via.
Ciao.