Scusatemi, ho trovato un po' di tempo per riportare il codice e scrivo nella speranza che qualcuno riesca a trovare una soluzione al mio problema. 
Ecco, quindi, i codici dei file php presenti nella cartella del forum.
CONFIG.PHP
codice:
<?php
# Host
$mysql['host'] = "localhost";
# Username
$mysql['user'] = "bellissimacosi";
# Password
$mysql['pass'] = "password";
# Nome del DB
$mysql['name'] = "my_bellissimacosi";
# Titolo della mia Applicazione
$title = "Bellissima Così Forum";
# Funzioni di connessione al mio DB MySQL
@mysql_connect($mysql['host'], $mysql['user'], $mysql['pass']); @mysql_select_db($mysql['name']);
?>
INDEX.PHP
codice:
<?php
# Includo il file di configurazione
require("config.php");
# Recupero i forum esistenti
$query = mysql_query("SELECT * FROM forum_lite_main ORDER BY titolo ASC");
# Stampo il percorso
echo "Indice";
echo "
";
# Stampo la lista di tutti i Forum
while($result = mysql_fetch_array($query))
{
echo "<a href=\"forum.php?f=$result[id]\">"; echo "$result[titolo]</a>"; } ?>
FORUM.PHP
codice:
<?php
require("config.php");
# Recupero i topic del forum
$query = @mysql_query("SELECT * FROM forum_lite_topics
WHERE forum_id = '" . $_GET[f] . "' ORDER BY id DESC");
# Recupero il titolo del forum per il percorso
$query2 = @mysql_query("SELECT titolo FROM forum_lite_main
WHERE id = '" . $_GET[f] . "'");
# Recupero i messaggi nel topic
$query3 = @mysql_query("SELECT MAX(topic_id) FROM
forum_lite_thread");
$result2 = @mysql_fetch_array($query2);
$result3 = @mysql_fetch_array($query3);
# Stampo il percorso
echo "<a href=\"index.php\">Indice</a> »
$result2[titolo]
";
# Stampo a video tutti i topic del Forum selezionato
while($result = @mysql_fetch_array($query))
{
echo "<a href=\"thread.php?f=$_GET[f]&t=$result[id]\">";
echo "$result[titolo] ";
echo "di $result[autore]</a>";
}
# Recupero il valore più alto di topic_id e lo incremento di uno
# per creare il link nuovo topic
$topic_id = $result3[0]+1;
echo "
";
echo "<a href=\"new.php?f=$_GET[f]&t=$topic_id\">";
echo "Nuovo topic</a>";
?>
THREAD.PHP
codice:
<?php
require("config.php");
# Recupero i messaggi del thread
$query = mysql_query("SELECT * FROM forum_lite_thread
WHERE topic_id = '" . $_GET[t] . "' ORDER BY data ASC");
# Recupero il titolo del forum
$query2 = mysql_query("SELECT titolo FROM forum_lite_main
WHERE id = '" . $_GET[f] . "'");
# Recupero il titolo del topic
$query3 = mysql_query("SELECT titolo FROM forum_lite_topics
WHERE forum_id = '" . $_GET[f] . "'");
$result2 = mysql_fetch_array($query2);
$result3 = mysql_fetch_array($query3);
# Stampo il percorso
echo "<a href=\"index.php\">Indice</a> »";
echo "<a href=\"forum.php?f=$_GET[f]\">$result2[titolo]</a> »";
echo "$result3[titolo]";
# Uso il ciclo while per stampare tutti i messaggi del thread
while($result = mysql_fetch_array($query))
{
echo "<hr><div style=\"display: block\">";
echo "$result[titolo]\n";
echo "di $result[autore]
$result[testo]</div>\n";
}
# Stampo a video il link per rispondere alla discussione
echo "<hr><a href=\"reply.php?f=$_GET[f]&t=$_GET[t]\">";
echo "Rispondi</a>";
?>
NEW.PHP
codice:
<?php
require("config.php");
# Recupero il titolo del forum dal DB
$query2 = @mysql_query("SELECT * FROM forum_lite_main
WHERE id = '" . $_GET[f] . "'");
$result2 = @mysql_fetch_array($query2);
# Stampo il percorso
echo "<a href=\"index.php\">Indice</a> »";
echo "<a href=\"forum.php?f=$_GET[f]\">";
echo "$result2[titolo]</a> » Nuovo topic";
# Se il valore di cmd è false stampo il form a video
if ($_POST[cmd] == FALSE)
{
echo "<form action=\"$REQUEST_URI\" method=\"post\">\n";
echo "Titolo:
\n";
echo "<input type=\"text\" name=\"titolo\">
\n\n";
echo "Nome (o nick):
\n";
echo "<input type=\"text\" name=\"autore\">
\n\n";
echo "Messaggio:
\n";
echo "<textarea name=\"testo\" cols=\"50\" rows=\"5\">";
echo "</textarea>
\n\n";
echo "<input type=\"hidden\" name=\"cmd\" value=\"add\">\n";
echo "<input type=\"submit\" value=\"Crea\">\n";
echo "</form>\n";
}
# Se cmd è diverso da false...
else
{
# Verifico che tutti i campi necessari siano stati compilati
if ($_POST[titolo] == FALSE OR $_POST[autore] == FALSE
OR $_POST[testo] == FALSE)
{
echo "
Tutti i campi sono obbligatori.";
}
# Se il controllo è ok salvo tutto nel DB
else
{
$_POST[testo] = str_replace("\n", "
", $_POST[testo]);
mysql_query("INSERT INTO forum_lite_topics
VALUES ('',
'" . $_GET[f] . "',
'" . date("d/m/Y") . "',
'" . $_POST[autore] . "',
'" . $_POST[titolo] . "')");
mysql_query("INSERT INTO forum_lite_thread
VALUES ('',
'NULL',
'" . date("d/m/Y") . "',
'" . $_POST[autore] . "',
'" . $_POST[titolo] . "',
'" . $_POST[testo] . "')");
echo "
Il tuo topic è stato inviato con successo.";
}
}
?>
REPLY.PHP
codice:
<?php
require("config.php");
# Recupero il titolo del forum
$query2 = mysql_query("SELECT titolo FROM forum_lite_main
WHERE id = '" . $_GET[f] . "'");
# Recupero il titolo del topic
$query3 = mysql_query("SELECT titolo FROM forum_lite_topics
WHERE forum_id = '" . $_GET[f] . "'");
$result2 = mysql_fetch_array($query2);
$result3 = mysql_fetch_array($query3);
# Stampo il percorso
echo "<a href=\"index.php\">Indice</a> »";
echo "<a href=\"forum.php?f=$_GET[f]\">$result2[titolo]</a> »";
echo "<a href=\"thread.php?f=$_GET[f]&t=$_GET[t]\">";
echo "$result3[titolo]</a> » Rispondi";
# Se il valore di cmd è false stampo il form a video
if ($_POST[cmd] == FALSE)
{
echo "<form action=\"$REQUEST_URI\" method=\"post\">\n";
echo "Titolo: (facoltativo)
\n";
echo "<input type=\"text\" name=\"titolo\">
\n\n";
echo "Nome (o nick):
\n";
echo "<input type=\"text\" name=\"autore\">
\n\n";
echo "Messaggio:
\n";
echo "<textarea name=\"testo\" cols=\"50\" rows=\"5\">";
echo "</textarea>
\n\n";
echo "<input type=\"hidden\" name=\"cmd\" value=\"add\">\n";
echo "<input type=\"submit\" value=\"Rispondi\">\n";
echo "</form>\n";
}
# Se cmd è diverso da false...
else
{
# Verifico che tutti i campi necessari siano stati compilati
if ($_POST[autore] == FALSE OR $_POST[testo] == FALSE)
{
echo "
Nome e messaggio sono obbligatori.";
}
# Se il controllo è ok salvo tutto nel DB
else
{
$_POST[testo] = str_replace("\n", "
", $_POST[testo]);
mysql_query("INSERT INTO forum_lite_thread
VALUES ('',
'" . $_GET[t] . "',
'" . date("d/m/Y") . "',
'" . $_POST[autore] . "',
'" . $_POST[titolo] . "',
'" . $_POST[testo] . "')");
echo "
Il tuo messaggio è stato inviato con successo.";
}
}
?>
Nei codici quindi è stata apportata la modifica che aveva chiesto softhare:
Non hai postato tutto lo script ma solo la parte che legge il prossimo id.
Eliminala dallo script.
Nelle righe successive ci dovrebbe essere la query che inserisce il nuovo record, qualcosa del tipo:
'INSERT INTO qualetabella (ID, campo1,...,campoN) VALUES ($id,"'.$campo1.....'","'.$campoN.'")';
Sostituisci il valore della $id con la costante NULL. Così:
'INSERT INTO qualetabella (ID, campo1,...,campoN) VALUES (NULL,"'.$campo1.....'","'.$campoN.'")';
Se iD è autoincrementante, mysql sa già quello che deve fare: le assegnarà automaticamente il prossimo valore disponibile.
Il problema è che adesso quando creo un nuovo topic con NEW.PHP, il file assegna in modo giusto il nuovo topic id, ma non associa il messaggio a quel topic.
Mi spiego meglio: i database sono strutturati in questo modo.
TABELLA: forum_lite_main
campi: id, titolo
TABELLA: forum_lite_thread
campi: id, topic_id, data, autore, titolo, testo
TABELLA: forum_lite_topics
campi: id, forum_id, data, autore, titolo
Cosa avviene? Quando creo un nuovo topic, esso assume il nuovo valore, ma il thread (ovvero il messaggio che dovrebbe comparire) non viene associato a quel topic_id.
Infatti nella tabella forum_lite_thread i nuovi thread hanno come valore di topic_id sempre 0.
Mi sapete dire come correggere questo errore?
Grazie mille e scusate se mi sono dilungato