Visualizzazione risultati 1 fino 2 di 2

Discussione: Associazione ID

  1. #1
    personalthings non è connesso Utente giovane
    Data registrazione
    10-08-2013
    Messaggi
    73

    Predefinito 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>&nbsp;&nbsp;<? echo($rss['1risp']) ?> <br><br>
    <input type=radio name=vota value=2>&nbsp;&nbsp;<? 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());
    Ultima modifica di personalthings : 27-06-2018 alle ore 18.08.02

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    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.

    I suggerimenti che do più spesso:


Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •