Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Permettere di far votare solo una volta lo stesso utente

    Salve a voi...
    Sto realizzando un sistema di votazione per profili iscritti a un sito....
    Ho creato un form con una select con valori da scegliere da 1 a 10.
    Questi valori vanno inseriti nel campo "votoricevuto" e e fare in modo poi che un utente possa votare solo una volta...cioè se un utente ha già votato quell utente non deve poter farlo..
    ho creato una tabella di nome "voti" con 5 campi...cioè

    nick_votoinviante,nick_votoricevente,votoricevuto, letto,data

    ora come faccio...per farsi' faccio un esempio...
    Paolo vota Luca quindi Paolo d ora in avanti non può piu' votare Luca perchè l ha già votato..
    Posto lo script che ho fatto io che non va...cioè credo sia la query o il controllo if che sia sbagliato su cui mi sto sbattendo ma ch enn riesco a risolvere...

    Codice PHP:
    //recupero i valori dal form per votare
    $cdestinatario $_POST['destinatario']; 
    $cvoto $_POST['voto']; 
    $cmittente $_SESSION['nickname'];


    //Qui parte la query per fare il controllo e seleziono il nick di chi riceve il voto e il campo letto che contiene il valore 1
    $sql="SELECT nick_votoricevente,letto FROM voti WHERE nick_votoricevente='".$cdestinatario."'AND letto=1 ";
    $query1=@mysql_query("$sql",$link) or die("Errore query database: " mysql_error()); 

    while(
    $row=mysql_fetch_array($query1)){
         
         
    $nickinviante=$row['nick_votoinviante'];
         
    $nickricevente=$row['nick_votoricevente'];
         
    $votodato=$row['votoricevuto'];
    $haivotato=$row['letto'];

         
    }
    if(
    $nickinviante =$haivotato)
    {echo 
    "hai già votato";
    }   
    else {
    $strsql="INSERT INTO voti (nick_votoinviante,nick_votoricevente,votoricevuto,letto,data) VALUES ('$cmittente','$cdestinatario','$cvoto','1',NOW())"

    @
    mysql_query("$strsql",$link) or die("Errore query database: " mysql_error()); 
    echo 
    "<script>
        alert(\"Voto inviato!!!\");
       </script>"

    }
    ?> 
    Avevo pensato in questo script di assegnare il valore 1 al campo "letto" nel momento in cui un utente vota un altro utente..e fare poi l if..se letto uguale a 1 dai l alert "hai già votato" sennò inserisci il voto...Nulla succede che a volte anche se un utente non è stato votato quando clicco che voglio votare mi da l alert che l ho già votato

    Come posso risolvere??

    Grazie

  2. #2
    A patto che, logicamente, lo script sia corretto, non mi sembra di vedere errori di sintassi ad una prima occhiata, c'e' sicuramente un errore nell'if

    Prova cosi'

    if($nickinviante == $haivotato){
    .....
    }

  3. #3
    Ti ringrazio per la risposta

    Il problema è qui'...non ci sono errori di sintassi..
    Codice PHP:
    if($nickinviante ==$haivotato)
    {

         echo 
    "<script>
        alert(\"Mi dispiace...ma hai già votato questo utente\");
        location = \"sito/profiloaltri.php?nickname=
    $cdestinatario\"
    </script>"
    ;
     
        

    $nickinviante contiene al suo interno tutti i nick di chi vota un altro utente che vengono inseriti poi in un campo della tabella voti chiamato "nickvotainviante"...e finche non conterrà un nick di qualcuno che nn ha ancora votato nessuno lo script funzionerà...invece una volta che vota e che il suo nick andrà a inserirsi nel campo "nickvotainviante" e nello stesso momento che vota sarà dato valore 1 al campo "letto" e questo valore 1 sarà poi contenuto nell array $haivotato...al controllo dell if risulterà uguale a 1 e quindi nn potrà piu' votare nessuno...e qui' il problema..che non riesco a risolvere...c'è qualche soluzione?
    Grazie

  4. #4
    come fai a mettere tutti i nick in $nickinviante, lo consideri come un array?
    E successivamente come fai a fare il controllo? Fai un esempio concreto...

  5. #5
    Originariamente inviato da beta_persei
    come fai a mettere tutti i nick in $nickinviante, lo consideri come un array?
    E successivamente come fai a fare il controllo? Fai un esempio concreto...

    Si...$nickinviante contiene il valore estrapolato da un array chiamata $row..

    Codice PHP:
    $nickinviante=$row['nick_votoinviante']; 
    praticamente nel campo nick_votoinviante nel momento in cui un utente vota...il suo nome va a inserirsi in questo campo..quindi la variabile$nickinviante contiene tutti i nick che danno dei voti ad altri utenti...mentre

    Codice PHP:

    $nickricevente
    =$row['nick_votoricevente']; 
    contiene tutti i nick degli utenti che hanno ricevuto il voto...

    Ecco ciò che succede nella tabella quando un utente vota..il suo nick e memorizzato nel campo nick_votoinviante ,il nick_votoricevente contiene il nick a cui ha dato il voto,votoricevuto contiene il voto dato,e a letto do sempre il valore 1 che uso poi per il controllo..


    Codice PHP:
    nick_votoinviante |nick_votoricevente|  votoricevuto  letto   |   data 
    Codice PHP:
    laura   |    carlitos  |    8  |    1  |    2009-04-17 04:31:05 
    Codice PHP:
    laura      |     Gigio78   |    8  |    1  |    2009-04-17 04:30:01 
    Codice PHP:
    Gigio78  |     laura    |   7  |   1  |       2009-04-10 04:34:01 
    Ora qui succede per esempio che se l utente Gigio78 voglia votare carlitos mi da che ho già votato quell utente anche se non l ho votato...e quà che sta il problema...

    Il controllo viene fatto cosi...

    Codice PHP:
    //Se nel campo nickinviante quel nick ha valore 1 nel campo "letto" non fare votare...qui manda l alert...
    if($nickinviante ==$haivotato)
    {

         echo 
    "<script>
        alert(\"Mi dispiace...ma hai già votato questo utente\");
        location = \"http://italiawebchat.altervista.org/profiloaltri.php?nickname=
    $cdestinatario\"
    </script>"
    ;
     
         

    Purtroppo e un controllo approssimativo...perchè non potrà mai funzionare del tutto...o almeno funzionerà finchè nel campo "nickinviante"della tabella non sia presente il nick di chi vuole votare con valore uguale a 1....so già che è sbagliato cosi'..purtroppo però non ho trovato ancora come risolvere questa cosa...

    Codice PHP:
    //seleziono il nick di chi riceve il voto e il campo letto che contiene il nick di chi ha già votato
    $sql="SELECT nick_votoricevente,letto FROM voti WHERE nick_votoricevente='".$cdestinatario."'AND letto=1 ";
    $query1=@mysql_query("$sql",$link) or die("Errore query database: " mysql_error()); 

    //ciclo e racchiudo i valori in un array di nome $row
    while($row=mysql_fetch_array($query1)){
         
    //variabili che contengono valori racchiusi in array
         
    $nickinviante=$row['nick_votoinviante'];
         
    $nickricevente=$row['nick_votoricevente'];
         
    $votodato=$row['votoricevuto'];
    $haivotato=$row['letto'];

         
    }
    //Qui controllo che il nick che vuole votare quell utente abbia valore uguale ad 1 nel campo letto..se cosi fosse dai l alert
    if($nickinviante ==$haivotato)
    {

         echo 
    "<script>
        alert(\"Mi dispiace...ma hai già votato questo utente\");
        location = \"http://italiawebchat.altervista.org/profiloaltri.php?nickname=
    $cdestinatario\"
    </script>"
    ;
     
         
    }   



    //se il valore non è uguale a 1 nel campo letto può votare...
    else {
    $strsql="INSERT INTO voti (nick_votoinviante,nick_votoricevente,votoricevuto,letto,data) VALUES ('$cmittente','$cdestinatario','$cvoto','1',NOW())"

    @
    mysql_query("$strsql",$link) or die("Errore query database: " mysql_error()); 
    echo 
    "<script>
        alert(\"Voto inviato!!!\");
        location = \"http://italiawebchat.altervista.org/profiloaltri.php?nickname=
    $cdestinatario\"
    </script>"

    }
    ?> 

  6. #6
    Sbagli a pensare che in $nickinviante ci siano tutti i nickname poiche' li hai tirati fuori con while.
    In $nickinviante cosa c'e' realmente lo sai?

    Prima di fare questo controllo if($nickinviante ==$haivotato) prova a stampare con una echo la variabile $nickinviante e vedi cosa esce...

    In $nickinviante non c'e' quello che pensi tu

  7. #7
    Infatti non ci sta un bel nulla...
    però cambiando cosi' la query
    Codice PHP:
    $sql="SELECT nick_votoricevente,nick_votoinviante,letto FROM voti WHERE nick_votoricevente='".$cdestinatario."'AND letto=1 "
    mi da il nickname laura ..mmm..però lo stesso non funziona

  8. #8
    Oddio...forse c'è l ho fatta...ho cambiato ancora lo script in questo modo...

    Codice PHP:
    //seleziono solo il nick di chi riceve  il voto e solo il nick di chi lo effettua e il campo letto che contiene il valore 1
    $sql="SELECT nick_votoinviante,nick_votoricevente,letto FROM voti WHERE nick_votoricevente='".$cdestinatario."' AND nick_votoinviante='".$cmittente."'";

    while(
    $row=mysql_fetch_array($query1)){
         
         
    $nickinviante=$row['nick_votoinviante'];
         
    $nickricevente=$row['nick_votoricevente'];
         
    $votodato=$row['votoricevuto'];
    $haivotato=$row['letto'];

    }if(
    $nickinviante =$haivotato)
    {

         echo 
    "<script>
        alert(\"Mi dispiace...ma hai già votato questo utente\");
        location = \"http://italiawebchat.altervista.org/profiloaltri.php?nickname=
    $cdestinatario\"
    </script>"
    ;
     
         
    }   




    else {
    $strsql="INSERT INTO voti (nick_votoinviante,nick_votoricevente,votoricevuto,letto,data) VALUES ('$cmittente','$cdestinatario','$cvoto','1',NOW())"

    @
    mysql_query("$strsql",$link) or die("Errore query database: " mysql_error()); 
    echo 
    "<script>
        alert(\"Voto inviato!!!\");
        location = \"sito/profiloaltri.php?nickname=
    $cdestinatario\"
    </script>"

    }
         


    ?> 
    Almeno per ora funziona egregiamente...secondo te ho risolto in via definitiva..?

  9. #9
    fai sempre delle verifiche approfondite, se funziona per quello che deve fare allora sei sulla strada giusta...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.