Pagina di forum

  • Creatore Discussione Creatore Discussione icex
  • Data di inizio Data di inizio

icex

Nuovo Utente
14 Ago 2012
29
0
0
Buon pomeriggio ragazzi.
Avrei intenzione di implementare il sito che sto sviluppando (che praticamente è un blog) con una sezione stile forum.
Mi spiego meglio: in questa sezione dovrebbe essere possibile aggiungere delle discussioni e rispondere nelle discussioni stesse. L'importante è che, ovviamente, il tutto venga salvato e sia visibile in una successiva visita. Praticamente una vera e propria pagina di forum.
Il problema è molto semplice: non so da dove incominciare :) quindi una qualche delucidazione (che non sia necessariamente fatta da script "precotti" ma mi va bene anche una procedura da seguire con qualche esempio, dato che vorrei capire come funziona il fatterello :fonzie: ) mi farebbe molto piacere :) vi ringrazio in anticipo ;)
 
Ciao!

Una pagina di forum con sezioni (metodo A) o solamente delle discussioni da inserire (metodo B)?

Metodo B:
Io farei una cosa del genere:



TABELLA discussioni
Id-Testo-Data-Ora

TABELLA risposte
Id-Id_discussione-Testo-Data-Ora



Poi con un for visualizzi tutte le discussioni, e quando un'utente ne clicca una:
http://tuo_sito.com/forum/index.php?view_disc=Id

Id=id della tabella discussioni

Visualizzi tutto e poi dall'id discussione richiami tutte le risposte dalla tabella risposte e le visualizzi

Quando un utente vuole aggiungere una risposta aggiungi una riga a Risposte mettendo l'id automatico (AUTO_INCREMENT) e come id_discussione l'id della discussione

Ho fatto un po' di casino ma forse riesci a capire

Per il metodo A invece la cosa è leggermente più complicata, ma possibile smanettando un po'.

Ma perché non ti limiti a integrare una piattaforma già fatta? Tipo SMF?
 
Ma perché non ti limiti a integrare una piattaforma già fatta? Tipo SMF?

Per il semplice motivo che andrei a perdere tutto il lavoro in PHP che ho fatto finora. O sbaglio? Io ho visto (per quanto rigurada la parte di blog) che Joomla! è un'ottima piattaforma ma non mi va di utilizzarla proprio per i suddetti motivi. D'altronde "chi lascia la strada vecchia per la strada nuova...." :D
Se poi c'è la possibilità di integrare il lavoro svolto, ben venga! :)

In ogni caso hai colto in pieno quello che ti ho chiesto... sono interessato semplicemente alla tipologia B che mi hai proposto e d'altronde, per ciò che ho intenzione di fare, non mi servono neanche le risposte!! :D quindi è ancora più semplificato il lavoro! Ma, d'accordo sulla creazione di una tabella nel db, non mi è tanto chiaro come lo vado a visualizzare nel sito :confused:

Se potresti spiegarti meglio te ne sarei molto grato :beer:
 
Prendi in considerazione l'idea di un'estensione di joomla per implementare un forum.
Lavoro già fatto e abbastanza sicuro.



Comunque se vuoi farlo tu...
torniamo alle tabelle


TABELLA discussioni
Id-Testo-Data-Ora

TABELLA risposte
Id-Id_discussione-Testo-Data-Ora

(con id auto_increment)



Intanto facciamo finta che questo è il tuo indirizzo del forum:
http://tuo_sito.com/forum/index.php

Per prima cosa mettici un bel pulsantino "Crea discussione" no?
Un form e poi inserisci il tutto (dopo i controlli da fare sui dati inseriti-controlla questa sezione, ci sono 2 discussione su questo) nella tabella discussioni.
Questo sei in grado di farlo?
 
Prendi in considerazione l'idea di un'estensione di joomla per implementare un forum.
Lavoro già fatto e abbastanza sicuro.



Comunque se vuoi farlo tu...
torniamo alle tabelle


TABELLA discussioni
Id-Testo-Data-Ora

TABELLA risposte
Id-Id_discussione-Testo-Data-Ora

(con id auto_increment)



Intanto facciamo finta che questo è il tuo indirizzo del forum:
http://tuo_sito.com/forum/index.php

Per prima cosa mettici un bel pulsantino "Crea discussione" no?
Un form e poi inserisci il tutto (dopo i controlli da fare sui dati inseriti-controlla questa sezione, ci sono 2 discussione su questo) nella tabella discussioni.
Questo sei in grado di farlo?

Se spieghi così anche un bambino ti capirebbe :D chiarissimo ;) comunque sì sì, questo riesco a farlo... tieni conto che ho creato già diverse pagine, tra cui registrazione, Login e logout, quindi proprio così neo-neo-neofita non sono :D diciamo che sono approdato al secondo "neo" ;)

Comunque una volta fatto questo come posso far sì che i risultati memorizzati in tabella siano visibili nella pagina del sito? E sopratutto come posso fare affinchè le discussioni inserite siano subito visibili all'utente, senza dover per forza aggiornare la pagina?
 
Anche io sono un neofita, ma voglio cercare di aiutare gli altri dove posso, e nel miglior modo possibile.

Mmm allora.

Aggiungiamo alla tabella discussioni il nome della discussione che mi ero dimenticato.
TABELLA discussioni
Id-nome-testo-data-ora

Tu devi scriere il codice per richiamare i dati nella pagina in cui l'utente va appena collegato, in modo che appena si connette esce il forum.
Oppure scegli un'altra pagina, come vuoi.

Io partirei subito con la visualizzazione del nome di ogni disc e quando si clicca su un nome si apre il link per vedere tutta la discussione con le risposte.
Poi la grafica devi curartela te.


PHP:
//Qua i tuoi parametri per connetterti al db

$query="SELECT id,nome FROM discussioni";
$esegui=mysql_query($query); //eseguo la query
$num_discussioni=mysql_num_rows($esegui); //trovo il numero totale di discussioni

If ($num_discussioni==0) {

echo "Nessuna discussione lresente";

}else{

For ($n=0; $n<$num_discussioni; $n++) 
{

$risultato=mysql_fetch_row($esegui);
$id_discussione=$risultato[0];
$nome_disc=$risultato[1];

echo '

<a href="index.php?func=view_disc&id_disc='.id_discussione.'">Nome discussione: '.$nome_disc.'</a>

';

} //fine for
} //fine if se il num di discussioni è diverso da zero


Non ho provato il codice ma dovrebbe andare.
 
Ultima modifica:
Anche io sono un neofita, ma voglio cercare di aiutare gli altri dove posso, e nel miglior modo possibile.

Mmm allora.

Aggiungiamo alla tabella discussioni il nome della discussione che mi ero dimenticato.
TABELLA discussioni
Id-nome-testo-data-ora

Tu devi scriere il codice per richiamare i dati nella pagina in cui l'utente va appena collegato, in modo che appena si connette esce il forum.
Oppure scegli un'altra pagina, come vuoi.

Io partirei subito con la visualizzazione del nome di ogni disc e quando si clicca su un nome si apre il link per vedere tutta la discussione con le risposte.
Poi la grafica devi curartela te.


PHP:
//Qua i tuoi parametri per connetterti al db

$query="SELECT id,nome FROM discussioni";
$esegui=mysql_query($query); //eseguo la query
$num_discussioni=mysql_num_rows($esegui); //trovo il numero totale di discussioni

If ($num_discussioni==0) {

echo "Nessuna discussione lresente";

}else{

For ($n=0; $n<$num_discussioni; $n++) 
{

$risultato=mysql_fetch_row($esegui);
$id_discussione=$risultato[0];
$nome_disc=$risultato[1];

echo '

<a href="index.php?func=view_disc&id_disc='.id_discussione.'">Nome discussione: '.$nome_disc.'</a>

';

} //fine for
} //fine if se il num di discussioni è diverso da zero


Non ho provato il codice ma dovrebbe andare.

In effetti il discorso fila ma non riesco a capire come mai l' IF venga praticamente ignorato. Se invece provo ad eliminare il ciclo FO, viene riconosciuto. Come mai avviene questo?
 
Ultima modifica:
ciap
intanto prova così
PHP:
<?php
//Qua i tuoi parametri per connetterti al db
$query="SELECT id,nome FROM discussioni";//se hai la data ci starebbe bene ORDER BY data
$esegui=mysql_query($query); //eseguo la query
$num_discussioni=mysql_num_rows($esegui); //trovo il numero totale di discussioni
if ($num_discussioni==0) {
	echo "Nessuna discussione presente";
}else{
	while($risulytato=mysql_fetch_array($esegui)){
		$id_discussione=$risultato[0];//comunque io preferisco scrivere $risultato['nome_del_campo']
		$nome_disc=$risultato[1];
		echo '<a href="index.php?func=view_disc&id_disc='.id_discussione.'">Nome discussione: '.$nome_disc.'</a><br />';
	} //fine for
} //fine if se il num di discussioni è diverso da zero  
?>

poi
1. scrivi le parole chiave di php miniscole if non If for non For
2. indenta il codice, poi fai meno fatica a leggerlo e capire cosa hai fatto
 
Ops! Dovevo indicizzare il php :incazz: quanto tempo che ho perso per questa idiozia -.- comunque, fatto questo, adesso suppongo che per creare una discussione bisognerebbe creare un pulsante nella pagina con questo codice che indirizzi ad una pagina di creazione della discussione stessa.
Questa, munita dei vari campi necessari, andrà a riempire i campi di "discussioni" nel db. Anche i campi data ed ora di inserimento, con gli opportuni strumenti di php, è possibile riempirli senza troppa difficoltà. Ritenete che questo sia giusto?
 
Ultima modifica:
ciao
la data/ora puoi inserirli in automatico quando il post viene inviato.
un consiglio per la data e ora (almeno secondo la mia opinione) usa il timestamp (il campo data int(15)) ti risolvi un sacco di problemi
 
ciao
la data/ora puoi inserirli in automatico quando il post viene inviato.
un consiglio per la data e ora (almeno secondo la mia opinione) usa il timestamp (il campo data int(15)) ti risolvi un sacco di problemi

ok grazie del consiglio :) ma quello che chiedo è se sia giusto l'iter da seguire o c'è qualche altra cosa da sapere. Perchè quel "func=view_disc" dopo il "?" nell'URL da linkare mi lasci un po' perplesso. E' già una funzione di php o dovrei crearla io affinchè ogni discussione creata sia correlata alla pagina principale?
 
Ho scritto tutto il codice dall'iphone ieri sera, per quello c'erano iniziali maiuscole.

Mettiamo che quando ti connetti vai alla pagina index.php
Qua potresti inserire qualcosa del tipo:

PHP:
If (!isset($_GET['func'])) { //se non c'è nessuna richiesta particolare...

//qua tutto il codice per vedere le discussioni

}

//se invece un'utente ha cliccato su un link....

If (isset($_GET['func'])) { 

     If ($_GET['func'] == 'view_disc') { //se ha cliccato sul link per vedere una discussione
          //recupero "id_disc" e mostro la discussione
     }


     If ($_GET['func'] == 'new_disc') { //se ha cliccato sul link per scrivere una nuova discussione
          //mostro il form per creare una nuova discussione
     }

}


Io farei così.
 
ciao
in parte ti ha risposto malware, io ti do una spiegazione teorica
quello che vedi nell'url sono querystringhe che servono per trasmettere alla index i valori che hai estratto

<a href="index.php?func=view_disc&id_disc='.$id_discussione.'">Nome discussione: '.$nome_disc.'</a>

nella pag index.php avrai qualcosa del tipo (ti scrivo in pseudocodice)

$cosa=$_GET['func'];
$quale=$_GET['id_disc'];

se $cosa == view_disc allora estrai la discussione con id == $quale
 
Ragazzi non so come ringraziarvi! Funziona! :D Davvero bello! :D
Però scusate il mio opportunismo ma desidererei un ultimo chiarimento. Attualmente non mi serve, ma nel caso in cui dovessi implementare qualcosa con le risposte, dovrei:
1) creare nel db una tabella "risposte";
2) creare i vari campi tra cui un campo "id" AUTO-INCREMENT da relazionare con l' "id" della tabella discussioni;
3) nel ciclo while (o for) per la visualizzazione delle discussioni ci aggiungo il riferimento anche ai campi di "risposte" oltre a quello di "discussioni" (sempre dove "id_disc"=£id_discussioni);
4) oltre alla SELECT nel suddetto while, ci metto anche un bel ORDER BY per ora e data affinchè le risposte vengano visualizzate in modo corretto.

Questo è l'iter che ho pensato. Ritenete sia giusto?
 
Crei la tabella risposte con due id:
Id: autoincrement e primary key
Id_discussione

Per visualizzare le discussioni attuali mettendo l'ultima creata in cima devi aggiungere alla fine della query: "ORDER BY id DESC"

Oppure al posti di id il campo "timestamp" come ha detto di fare Borgo Italia.
Per visualizzare dal timestamp il gg/mm/aaaa hh:mm ci sono alcuni algoritmi basta che googli
Il timestamp lo trovi con $timestamp=mktime();
 
Crei la tabella risposte con due id:
Id: autoincrement e primary key
Id_discussione

Per visualizzare le discussioni attuali mettendo l'ultima creata in cima devi aggiungere alla fine della query: "ORDER BY id DESC"

Oppure al posti di id il campo "timestamp" come ha detto di fare Borgo Italia.
Per visualizzare dal timestamp il gg/mm/aaaa hh:mm ci sono alcuni algoritmi basta che googli
Il timestamp lo trovi con $timestamp=mktime();

OOOOk :D Perfetto :D ma come mai 2 id? Una non ne basta?
 
In ogni tabella ci dev'essere un campo obbligatorio primary key.
Questo campo dev'essere univoco (si dice così)?
Cioè non possono esistere due id uguali.
Se aggiungi due risposte alla stessa discussione, ci saranno due campi id_discussione contenenti lo stesso valore.
Quindi non puoi utilizzare id_discussione e basta.

Chi ne sa più di me...confermate?
 
ciao

In ogni tabella ci dev'essere un campo obbligatorio primary key.
questo dipende ma nel tuo caso e generelmente in quasi tutti si
Questo campo dev'essere univoco (si dice così)?
si
Cioè non possono esistere due id uguali.
si

Se aggiungi due risposte alla stessa discussione, ci saranno due campi id_discussione contenenti lo stesso valore.
Quindi non puoi utilizzare id_discussione e basta.
il discorso è leggermente diverso

tu avrai una tabella "discussioni" con (metto solo alcuni campo con nome autoesplicativo)
Codice:
id_discussione int(12) autoincrement primarykey
testo_discussione longtext


e la tabella "risposte"
Codice:
id_risposta int(12) autoincrement primarykey
id_discussione int(12)
testo_risposta longtext

come vedi entrambe le tabelle hanno il loro id unico (primarykey)
quello che lega la risposta alla discussione è il campo della tabella risposte chiamato id_discussione
 
oK :) grazie ancora ragazzi per l'enorme aiuto che mi avete dato! mi avete salvato da uno stato di inerzia permanente :dormo: Alla prossima :beer:
 

Discussioni simili