-
Associazione ID
Buonasera,
ho ultimamente creato il codice per un sondaggio. Spiego con ordine:
1) Ho creato due tabelle nel db in quanto vorrei memorizzare nel DB sia le opzioni possibili del sondaggio, sia i voti degli utenti. :
Sondaggio (ID (auto_increment), Domanda, 1risp, Num1, 2risp, Num2)
Sondaggio_Voto (ID (A_I), Nome, IDSondaggio)
2) Ho creato una pagina con tutta la lista di sondaggi (funziona)
3) Ho creato le opzioni (funziona):
Codice PHP:
<form action="bacheca_sondaggio_risultato.php" target="_top" method="POST" id=form1 name=form1>
<input type=radio name=vota value=1> <? echo($rss['1risp']) ?> <br><br>
<input type=radio name=vota value=2> <? echo($rss['2risp']) ?> <br><br>
<center><INPUT TYPE="Submit" VALUE="Vota" id=Submit2 name=Submit2 style={background:grey;}></center>
</form>
4) Il problema sorge nell'ultimo passaggio. Quando premo vota, nella tabella SondaggioVota viene sì inserito il nome dell'utente che ha votato (che non può più votare) ma l'ID del sondaggio è sbagliato. Più specificatamente, mi viene inserito l'ID dell'ultimo sondaggio creato. Mettiamo conto che io abbia creato 5 sondaggi. Se utente X vota il sondaggio il cui ID è 2, nella tabella SondaggioVota il campo IDSondaggio viene riempito con 5 (cioé l'ultimo).
Questo si ripercuote, ovviamente, anche nella somma dei voti del sondaggio (Quindi nella tabella Sondaggio) il cui ID è sempre dell'ultimo e non di quello per cui si è votato.
Questo è il codice:
Codice PHP:
$Mysql = "SELECT * FROM Sondaggio";
$Result1 = mysql_query($Mysql) or die(mysql_error());
$rs1 = mysql_fetch_array($Result1);
$ID = $rs1['ID'];
$risp = $_POST['vota'];
$Mysql = "SELECT * FROM Sondaggio WHERE ID = '$ID'";
$Result = mysql_query($Mysql) or die(mysql_error());;
$rs = mysql_fetch_array($Result);
$Num1 = $rs['Num1'];
$Num2 = $rs['Num2'];
switch($risp)
{
case '1': echo ('Hai votato la prima risposta');
$Num1 = $Num1 +1;
$MySql = "UPDATE Sondaggio SET Num1 = '$Num1' WHERE ID = '$ID'";
mysql_query($MySql) or die(mysql_error());break;
case '2': echo ('Hai votato la seconda risposta');
$Num2 = $Num2 +1;
$MySql = "UPDATE Sondaggio SET Num2 = '$Num2' WHERE ID = '$ID'";
mysql_query($MySql) or die(mysql_error());break;
}
$MySql = "INSERT INTO Sondaggio_Voto (Nome, IDSondaggio) VALUES ('$Login', '$ID')";
mysql_query($MySql) or die(mysql_error());
-
Non usare le funzioni mysl_* che sono deprecate: usa mysqli o PDO.
Usa nomi significativi per le variabili: quella che tu chiami $Mysql, per esempio, è una query string, non una connessione a MySQL, oppure quello che chiami $rs1 non è un result o result set come il nome suggerirebbe, bensì un record o row.
Ciò detto, ti conviene rivedere la struttura delle tabelle. Anziché memorizzare il numero di voti per ciascuna risposta nella tabella Sondaggio, è più naturale memorizzare il voto espresso da un utente nella tabella Sondaggio_voto, aggiungendovi una colonna.
Nello specifico il problema è che tu stai leggendo l'ID di un sondaggio qualunque, con questo codice:
Codice PHP:
$Mysql = "SELECT * FROM Sondaggio";
$Result1 = mysql_query($Mysql) or die(mysql_error());
$rs1 = mysql_fetch_array($Result1);
$ID = $rs1['ID'];
recuperi tutti i sondaggi (in un ordine non specificato) e leggi l'ID del "primo" di essi. Poi usi quell'ID nel resto del codice come se fosse l'ID del sondaggio giusto, ad esempio in:
Codice PHP:
$MySql = "INSERT INTO Sondaggio_Voto (Nome, IDSondaggio) VALUES ('$Login', '$ID')";
Per risolvere questa cosa deve essere il form a passare, tra i suoi parametri, l'ID del sondaggio, ad esempio tramite un campo
Codice HTML:
<input type="hidden" name="id_sondaggio" value="<?php echo $rss['ID']; ?>">
Ma ti consiglio di sistemare prima la struttura delle tabelle e gli altri dettagli.