Visualizzazione risultati 1 fino 13 di 13

Discussione: [php][mysql] votazione

  1. #1
    Guest

    Predefinito [php][mysql] votazione

    salve a tutti!
    sono agli inizi con php e mysql e spero che qualche anima pia mi possa aiutare

    Dovrei creare una pagina php con circa 15 voci (partecipanti) con ognuno un tasto di voto.
    Il tasto dovrebbe incrementare di +1 la voce relativa al voto del partecipante nella tabella mysql (se possibile con un'alert tipo "Grazie per aver Votato") e successivamente effettuare un redirect.

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,681

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Grazie per le dritte alemoppo

    sarebbe possibile contattarti?

  4. #4
    Guest

    Predefinito

    ho provato a seguire il consiglio di alemoppo e studiare, ma sicuramente sbaglio la funzione mysql, se qualcuno ha dei suggerimenti

    index.php
    Codice PHP:
    <?php
    $link
    = mysql_connect ("localhost", "root", "xxx") or die ("connessione non riuscita");
    mysql_select_db ("tortuga_voti") or die ("Selezione del DB non riuscita: " . mysql_error());
    $sql = "SELECT * FROM voti";
    $result = mysql_query ($sql,$link);
    if (
    mysql_num_rows($result) == 0) {
    echo
    "<center><span>Non ci sono Valori!</span></center>";
    exit;
    }
    while (
    $row = mysql_fetch_assoc($result)) {
    echo
    "<div style=\"width:auto;height:50px;\">";
    echo
    "<div style=\"width:50px;height:50px;float:left;line-height:50px;\">".$row["Foto"]."</div>";
    echo
    "<div style=\"width:150px;height:50px;float:left;line-height:50px;\">".$row["Nome"]."</div>";
    echo
    "<div style=\"width:50px;height:50px;float:left;\">";
    echo
    "<form action=\"vota.php\" method=\"post\">";
    echo
    "<input type=\"text\" name=\"Id\" value=\"".$row["Id"]."\" style=\"display:none;\">";
    echo
    "<input type=\"submit\" value=\"Vota\" style=\"width:100%;height:100%;\">";
    echo
    "</form>";
    echo
    "</div>";
    echo
    "</div><br style=\"clear:both;\">";
    }
    mysql_free_result($result);
    mysql_close ($link);
    ?>
    vota.php

    Codice PHP:
    <?php
    $Id
    = $_POST ["Id"];
    $link = mysql_connect ("localhost", "root", "xxx") or die ("Non mi posso connettere");
    mysql_select_db ("tortuga_voti") or die ("Non mi posso connettere al DB");
    $sql = "UPDATE voti SET Voti='+ 1' WHERE Id=$Id";
    $result = mysql_query ($sql,$link) or die ("query non funzionante = $sql");
    mysql_close ($link);
    echo
    "<script type=\"text/javascript\">alert(\"Grazie Per Aver Votato!\"); location = \"index.php\";</script>";
    ?>
    Ultima modifica di alemoppo : 19-08-2012 alle ore 22.42.24 Motivo: [code] -> [php]

  5. #5
    Guest

    Predefinito

    ho corretto la funzione sql in vota.php con

    $sql = "UPDATE voti SET Voti=voti+1 WHERE Id=$Id";
    e sembra essere tutto ok

    ma se il browser ha javascript disabilitato come posso ottenere lo stesso risultato dell'alert e redirect...qualche suggerimento?

  6. #6
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,681

    Predefinito

    Citazione Originalmente inviato da MusicFreeWorld Visualizza messaggio
    ma se il browser ha javascript disabilitato come posso ottenere lo stesso risultato dell'alert e redirect...qualche suggerimento?
    Se ha javascript disabilitato, l'alert non è possibile farlo. Al massimo, potresti far apparire un div che emula un alert, con un "ok" nel centro: quando lo si preme, si effettua il redirect a index.php.
    Un modo forse più semplice, è quello di far apparire il messaggio "grazie per aver votato" nella pagina, ed effettuare il recirect tramite html:
    Codice HTML:
    <META HTTP-EQUIV="REFRESH" CONTENT="0; URL=http://www.google.com">
    Dove lo 0 indica i secondi dopo il caricamento della pagina prima di effettuare il redirect.
    p.s: l'uso degli alert secondo me rende i siti meno professionali.
    -----------------
    Nello script c'é un problema (non evitabile, ma arginabile ): un utente potrebbe votare infinite volte la stessa cosa.
    Si potrebbe arginare salvando l'ip di chi ha votato, e magari anche un flag nel cookie: se un utente vuole rivotare, sarà costretto ad eliminare i cookie e cambiare ip. Un altro modo, potrebbe essere quello di far votare soltanto se si è loggati.... ma anche questo è aggirabile ri-iscrivendosi più volte.
    ------------------
    Se fai eseguire quello script su altervista, occhio ai parametri di connessione al database:
    Codice PHP:
    $link = mysql_connect ("localhost", "root", "xxx") or die ("connessione non riuscita");
    mysql_select_db ("tortuga_voti") or die ("Selezione del DB non riuscita: " . mysql_error());
    ------------------
    Ultima cosa, il tag <center> è obsoleto, e non andrebbe più utilizzato.

    Ciao!

  7. #7
    Guest

    Predefinito

    grazie alemoppo, e' un piacere trovare qualcuno disposto a darti una mano...

    1- si ormai il tag <center> e' estinto ma funziona ancora molto bene ihihih
    2- il redirect tramite <META bell'idea semplice e veloce non ci avevo pensato
    3- giusta osservazione bloccare la multi-votazione, ma in questo caso la votazione avviene tramite pagamento x accedere alla pagina e questa e' protetta da uno script di controllo x evitare l'accesso diretto.

    Cmq. il controllo tramite IP mi interessa molto solo che non so ancora implementarlo.
    ancora grazie alemoppo :)

  8. #8
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,681

    Predefinito

    Citazione Originalmente inviato da MusicFreeWorld Visualizza messaggio
    Cmq. il controllo tramite IP mi interessa molto solo che non so ancora implementarlo.
    Per fare il controllo ip è semplice: salvi in una tabella tutti gli ip che votano; l'ip si preleva da $_SERVER['REMOTE_ADDR']. Quindi prima di salvare, controlli che l'ip non sia nella tabella.

    Ciao!
    Ultima modifica di alemoppo : 20-08-2012 alle ore 12.49.02

  9. #9
    Guest

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Per fare il controllo ip è semplice: salvi in una tabella tutti gli ip che votano; l'ip si preleva da $_SERVER['REMOTE_ADDR']. Quindi prima di salvare, controlli che l'ip non sia nella tabella.

    Ciao!
    si avevo trovato come ricavarlo e scriverlo grz comunque x l'interesse
    solo che a logica non posso eliminare del tutto chi ha votato, dovrei magari impedire un'ulteriore voto magari nell'arco delle 24 ore tipo 1 voto al gg

    solo che sto vedendo come lavorare su i calcoli

  10. #10
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,681

    Predefinito

    In questo caso devi salvarti non solo l'ip, ma anche il timestamp del voto. Per 24 ore, se il timestamp attuale è maggiore del timestamp salvato più 60*60*24, allora riaggiorni il timestamp e incrementi il voto.
    Codice PHP:
    //$riga = query(SELECT timestamp WHERE ip=$_SERVER['REMOTE_ADDR'])
    if($_SERVER['REQUEST_TIME'] > $riga['timestamp']+60*60*24)
    {
    //riaggiorni timestamp (UPDATE timestamp WHERE ip=$_SERVER['REMOTE_ADDR'])
    //incrementi i voti
    }
    (le query non son corrette: sono soltanto per far capire. Ad esempio manca il FROM; $riga non è la query, ma il dato prelevato dal db con quella pseudo-query)

    Ciao!
    Ultima modifica di alemoppo : 20-08-2012 alle ore 13.06.12

  11. #11
    Guest

    Predefinito

    un piccolo consiglio sulla gestione della pagina votazioni:

    e' meglio registrare ogni voto in mysql come IP(di chi vota) e VOTO, successivamente sommare i voti, in modo da rintracciare tramite IP eventuali problemi (controllo su multivoto).

    o come stavo facendo un semplice aggiornamento della colonna voto

    ps. nel caso capita qualche problema tipo differenza tra incasso (voto a pagamento) e voti

  12. #12
    Guest

    Predefinito

    ancora qui a porre un'altra domanda

    per creare la paginazione dei voti in modo"automatico" stavo provando con un ciclo while ma l'impaginazione avviene uno sotto l'altro

    ho 18 partecipanti (per adesso)
    dovrei impaginare in modo da creare una griglia 6x3 con foto e sotto tasto vota

    foto foto foto
    tasto tasto tasto

    e via dicendo non riesco a trovare una soluzione, qualche consiglio?

  13. #13
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,681

    Predefinito

    Se il voto è soltanto "1 o 0", cioè se l'utente deve scegliere un determinato oggetto/persona etc tra tante, allora io salverei soltanto IP e data di ogni oggetto/persona (quindi n tabelle per n oggetti/persone).

    Per il secondo problema, il ciclo while potrebbe andar bene, ma dipende dal codice html.

    Ciao!

Regole di scrittura

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