Creare sondaggio

  • Creatore Discussione Creatore Discussione Shyson
  • Data di inizio Data di inizio
ciao
che errore ti da al foreach?
metti un var dump a $riga e dimmi cosa ti risulta
PHP:
<?php
$q="SELECT * FROM sondaggio WHERE id=1";
$risultato = mysql_query($q);
$riga=mysql_fetch_array($risultato);
var_dump($riga);//dovrebbe darti: array il nome dei campi e il loro valore
$tot=0;//metto il totale a 0
//e calcolo 
//ecc...
?>

comunque spero per domani sera di poter verificare il tutto (oggi sino alle 17 non riuscivo a collegarmi al forum)
 
ciao
che errore ti da al foreach?
metti un var dump a $riga e dimmi cosa ti risulta
PHP:
<?php
$q="SELECT * FROM sondaggio WHERE id=1";
$risultato = mysql_query($q);
$riga=mysql_fetch_array($risultato);
var_dump($riga);//dovrebbe darti: array il nome dei campi e il loro valore
$tot=0;//metto il totale a 0
//e calcolo 
//ecc...
?>

comunque spero per domani sera di poter verificare il tutto (oggi sino alle 17 non riuscivo a collegarmi al forum)
Anchio non riuscivo a collegarmi, comunque se entri nella mia home vedi questo errore sopra il sondaggio

Warning: Invalid argument supplied for foreach() in /membri/gruppoalveo/menuDX.php on line 52
 
Risolto anche questo, ora mi rimangono 2 cose:

1. il calcolo tôt delle percentuali arriva a 46% e non 100%

2. vorrei mettere un cockie che memorizza il suo ip e non lo fa più votare con un echo "Hai già votato"

Riposto il codice completo e funzionante

PHP:
<?php
$q="SELECT * FROM sondaggio WHERE id=1";
$risultato = mysql_query($q);
$riga=mysql_fetch_array($risultato);
$tot=0;//metto il totale a 0
//e calcolo
foreach($riga as $chiave => $valore) {
    ${$chiave}=$valore;//valore del campo
    $tot=$tot+$valore;//faccio il totale
}
if($tot>0) { 
     $internet= (int)($internet/$tot*100); $internet_pos=$internet-100;
     $depliant= (int)($depliant/$tot*100); $depliant_pos=$depliant-100; 
     $casualmente= (int)($casualmente/$tot*100); $casualmente_pos=$casualmente-100;
     $amici_o_conoscenti= (int)($amici_o_conoscenti/$tot*100); $amici_pos=$amici_o_conoscenti-100;
     $giornali_o_televisione= (int)($giornali_o_televisione/$tot*100); $giornali_pos=$giornali_o_televisione-100;  
}
else {
     $internet= 0; $internet_pos=-100;
     $depliant= 0; $depliant_pos=-100;
     $casualmente= 0; $casualmente_pos=-100;
     $amici_o_conoscenti= 0; $amici_pos=-100;
     $giornali_o_televisione= 0; $giornali_pos=-100;
}
if(isset($_POST['puls_invio'])) {   
if(isset($_POST['voto'])) {
    $voto=mysql_real_escape_string($_POST['voto']);
    $q="UPDATE sondaggio SET $voto = $voto + 1 WHERE id=1"; 
    if(mysql_query($q)) { 
    echo "<img src=\"http://localhost:8888/MIEI%20SITI/Alveo/immagini/ok.png\" width=\"40\" height=\"40\" alt=\"Ok\" title=\"Ok\" /><br /><div style=\"margin-top:10px; margin-bottom:20px;font-size:16px; color:#0000ff; text-align: center;\">Grazie, il tuo voto è stato inserito!</div>"; 
    echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
     }
    }
    else { 
    echo "<img src=\"http://localhost:8888/MIEI%20SITI/Alveo/immagini/alert.png\" width=\"50\" height=\"50\" alt=\"Alert\" title=\"Alert\" /><br /><div style=\"margin-top:10px; margin-bottom:20px; font-size:16px; color:#ff0000; text-align: center;\">Devi selezionare una risposta!</div>"; 
    echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
  } 
} 
?>
<p style="font-size:13px; text-align:center; margin-top:-5px; margin-bottom:30px; color:#008040;">Come hai conosciuto i prodotti Akuna?</p>

<div style="margin-top:-10px; margin-left:3px; text-align:left;">
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">

<div class="fra">
<input type="radio" name="voto" value="internet"> Internet
<br />
<div class="a" style="background-position:<?php echo $internet_pos;?>px"></div><div class="percentuale"><?php echo $internet;?>%</div>
<br />
<input  type="radio" name="voto" value="depliant"> Depliant
<br />
<div class="a" style="background-position:<?php echo $depliant_pos;?>px"></div><div class="percentuale"><?php echo $depliant;?>%</div>
<br />
<input type="radio" name="voto" value="casualmente"> Casualmente
<br />
<div class="a" style="background-position:<?php echo $casualmente_pos;?>px"></div><div class="percentuale"><?php echo $casualmente;?>%</div>
<br />
<input type="radio" name="voto" value="amici_o_conoscenti"> Amici o conoscenti
<br />
<div class="a" style="background-position:<?php echo $amici_pos;?>px"></div><div class="percentuale"><?php echo $amici_o_conoscenti;?>%</div>
<br />
<input type="radio" name="voto" value="giornali_o_televisione"> Giornali o televisione
<br />
<div class="a" style="background-position:<?php echo $giornali_pos;?>px"></div><div class="percentuale"><?php echo $giornali_o_televisione;?>%</div>
<div style="margin-top:30px; text-align:center;"><input type="submit" name="puls_invio" value="Vota" class="manina-guest"></div>
</div><!-- fra -->
</form>
</div><!-- div style -->
 
ciao
ho trovato l'inghippo perche sbaglia la percentuale, modifica cone qua sotto
PHP:
<?php
$q="SELECT * FROM sondaggio WHERE id=1";
$risultato = mysql_query($q);
$riga=mysql_fetch_assoc($risultato);//questa riga
$tot=0;//metto il totale a 0
//e calcolo
foreach($riga as $chiave => $valore) {
	if($chiave !="id"){// e aggiungi questo if
		${$chiave}=$valore;//valore del campo
    	$tot=$tot+$valore;//faccio il totale
	}
}
//ecc tutto uguale
?>
errore di logica nel totale aggiungeva anche il valore dell id
ora guardo per il cookie
 
ciao
ho trovato l'inghippo perche sbaglia la percentuale, modifica cone qua sotto
PHP:
<?php
$q="SELECT * FROM sondaggio WHERE id=1";
$risultato = mysql_query($q);
$riga=mysql_fetch_assoc($risultato);//questa riga
$tot=0;//metto il totale a 0
//e calcolo
foreach($riga as $chiave => $valore) {
	if($chiave !="id"){// e aggiungi questo if
		${$chiave}=$valore;//valore del campo
    	$tot=$tot+$valore;//faccio il totale
	}
}
//ecc tutto uguale
?>
errore di logica nel totale aggiungeva anche il valore dell id
ora guardo per il cookie

Bene :beer:
 
ciao
ecco lo script col cokie per impedire la votazione continua.
guarda che ho messo il tempo di vita del cockoe a solo 10 secondi dalla sua creazione per fare le prove, ti conviene portarlo a 1 giorno modificando
setcookie("votato", "si", time()+10);
in
setcookie("votato", "si", time()+(24*60*60);
oppure
setcookie("votato", "si", time()+86400);
poi stai attente alle istruzioni
<?php
ob_start();//QUESTA DEVE ESSERE ALLA RIGA 2. prima NON deve esserci nulla a parte il tag di php
?>
e
<?php
ob_end_flush();//QUEST DEVE ESSESRE ALLA PENULTIMA RIGA
?>
altrimenti set_cookie ti da errore
PHP:
<?php
ob_start();//QUESTA DEVE ESSERE ALLA RIGA 2. prima NON deve esserci nulla a parte il tag di php NEMMENO UNO SPAZIO
?>
<style type="text/css">
.a{
display:block;
float:left;
width:100px;/*dare larghezza 100px per non dover fare ulteriori calcoli*/
height:10px;
background-color:#CCCCCC;
background-image:url(barra_x100.jpg);/*fare immagine larga 100px*/
background-repeat:no-repeat;
background-position:-100px;/*corrisponde a 0 =100-100*/
margin-top:2px;
}
</style> 
<?php
$host = 'localhost';     //nome host
$username = 'root';      //user name
$password = 'password';  //password
$db = 'prove';            // nome data base
//---connessione----------------------------------------------------
$conn = @mysql_connect($host,$username,$password) or die (mysql_error());
$sel = @mysql_select_db($db) or die (mysql_error());
// a mysql_error() si può sostituire un altro messaggio
$q="SELECT * FROM sondaggio WHERE id=1";
$risultato = mysql_query($q);
$riga=mysql_fetch_assoc($risultato);
$tot=0;//metto il totale a 0
//e calcolo
foreach($riga as $chiave => $valore) {
	if($chiave !="id"){
		${$chiave}=$valore;//valore del campo
    	$tot=$tot+$valore;//faccio il totale
	}
}
if($tot>0) { 
     $internet= (int)($internet/$tot*100); $internet_pos=$internet-100;
     $depliant= (int)($depliant/$tot*100); $depliant_pos=$depliant-100; 
     $casualmente= (int)($casualmente/$tot*100); $casualmente_pos=$casualmente-100;
     $amici_o_conoscenti= (int)($amici_o_conoscenti/$tot*100); $amici_pos=$amici_o_conoscenti-100;
     $giornali_o_televisione= (int)($giornali_o_televisione/$tot*100); $giornali_pos=$giornali_o_televisione-100;  
}else{
     $internet= 0; $internet_pos=-100;
     $depliant= 0; $depliant_pos=-100;
     $casualmente= 0; $casualmente_pos=-100;
     $amici_o_conoscenti= 0; $amici_pos=-100;
     $giornali_o_televisione= 0; $giornali_pos=-100;
}
if(isset($_POST['puls_invio'])) {   
	if(!isset($_COOKIE['votato'])){
		if(isset($_POST['voto'])) {
    		$voto=mysql_real_escape_string($_POST['voto']);
    		$q="UPDATE sondaggio SET $voto = $voto + 1 WHERE id=1"; 
    		if(mysql_query($q)) { 
    			echo "<img src=\"http://localhost:8888/MIEI%20SITI/Alveo/immagini/ok.png\" width=\"40\" height=\"40\" alt=\"Ok\" title=\"Ok\" /><br /><div style=\"margin-top:10px; margin-bottom:20px;font-size:16px; color:#0000ff; text-align: center;\">Grazie, il tuo voto è stato inserito!</div>"; 
    			echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
				setcookie("votato", "si", time()+10); //per un giorno al posto di 10 metti +(24*60*60)
     		}
		}else { 
    		echo "<img src=\"http://localhost:8888/MIEI%20SITI/Alveo/immagini/alert.png\" width=\"50\" height=\"50\" alt=\"Alert\" title=\"Alert\" /><br /><div style=\"margin-top:10px; margin-bottom:20px; font-size:16px; color:#ff0000; text-align: center;\">Devi selezionare una risposta!</div>"; 
    		echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
		}
	}else{
		echo "<img src=\"http://localhost:8888/MIEI%20SITI/Alveo/immagini/alert.png\" width=\"50\" height=\"50\" alt=\"Alert\" title=\"Alert\" /><br /><div style=\"margin-top:10px; margin-bottom:20px; font-size:16px; color:#ff0000; text-align: center;\">tra un voto e il successivo deve passare almeno un giorno</div>"; 
    	echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
	}
} 
?>
<p style="font-size:13px; text-align:center; margin-top:-5px; margin-bottom:30px; color:#008040;">Come hai conosciuto i prodotti Akuna?</p>

<div style="margin-top:-10px; margin-left:3px; text-align:left;">
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">

<div class="fra">
<input type="radio" name="voto" value="internet"> Internet
<br />
<div class="a" style="background-position:<?php echo $internet_pos;?>px"></div><div class="percentuale"><?php echo $internet;?>%</div>
<br />
<input  type="radio" name="voto" value="depliant"> Depliant
<br />
<div class="a" style="background-position:<?php echo $depliant_pos;?>px"></div><div class="percentuale"><?php echo $depliant;?>%</div>
<br />
<input type="radio" name="voto" value="casualmente"> Casualmente
<br />
<div class="a" style="background-position:<?php echo $casualmente_pos;?>px"></div><div class="percentuale"><?php echo $casualmente;?>%</div>
<br />
<input type="radio" name="voto" value="amici_o_conoscenti"> Amici o conoscenti
<br />
<div class="a" style="background-position:<?php echo $amici_pos;?>px"></div><div class="percentuale"><?php echo $amici_o_conoscenti;?>%</div>
<br />
<input type="radio" name="voto" value="giornali_o_televisione"> Giornali o televisione
<br />
<div class="a" style="background-position:<?php echo $giornali_pos;?>px"></div><div class="percentuale"><?php echo $giornali_o_televisione;?>%</div>
<div style="margin-top:30px; text-align:center;"><input type="submit" name="puls_invio" value="Vota" class="manina-guest"></div>
</div><!-- fra -->
</form>
</div><!-- div style -->
<?php
ob_end_flush();//QUEST DEVE ESSESRE ALLA PENULTIMA RIGA
?>
 
Pensavo, spiegami il funzionamento di quel cookie, cioè, da come vedo non memorizza il suo ip, cosa memorizza? Se lui cambia pc ma ha lo stesso ip, può votare?
 
ciao
controllare tramite ip non è una cosa giusta, da che ne so se si usano dei proxi diversi utenti possono avere lo stesso ip.
il cookie è la cosa che si avvicina di più ad una certa sicurezza (che in rete non esiste).
come funziona il cookie.
quando uno accede e non ha hancora votato il cookie non esiste quindi può votare: if(!isset($_COOKIE['votato']))...
se vota (e da un voto valido cioè non vuoto) si crea il cookie
ora i cookie hanno la particolarità che possono avere un "tempo di vita" dal momento in cui vengono creati
passato tale tempo il cookie si ditrugge (per quello ti ho detto di dargli un tempo di vita come minimo di un gg)
se uno tenta di rivotare e non è passato un giorno il cookie esiste e quindi gli dice che deve aspettare. solo dopo un giorno e dopo che il cookie si è autodistrutto può votare di nuovo.
come detto però la sicurezza al 100x100 non potrai mai averla.
es. il bw dell'utente è impostato a non accettare i cookie (si potrebbe fare una verifica e avvisare che se il bw non li accetta non si può votare), ma anche se li accetta l'utente puo cancellarli manualmente e quindi votare di nuovo.
un certo grado di incertezza devi comunque accettarlo
 
ciao
controllare tramite ip non è una cosa giusta, da che ne so se si usano dei proxi diversi utenti possono avere lo stesso ip.
il cookie è la cosa che si avvicina di più ad una certa sicurezza (che in rete non esiste).
come funziona il cookie.
quando uno accede e non ha hancora votato il cookie non esiste quindi può votare: if(!isset($_COOKIE['votato']))...
se vota (e da un voto valido cioè non vuoto) si crea il cookie
ora i cookie hanno la particolarità che possono avere un "tempo di vita" dal momento in cui vengono creati
passato tale tempo il cookie si ditrugge (per quello ti ho detto di dargli un tempo di vita come minimo di un gg)
se uno tenta di rivotare e non è passato un giorno il cookie esiste e quindi gli dice che deve aspettare. solo dopo un giorno e dopo che il cookie si è autodistrutto può votare di nuovo.
come detto però la sicurezza al 100x100 non potrai mai averla.
es. il bw dell'utente è impostato a non accettare i cookie (si potrebbe fare una verifica e avvisare che se il bw non li accetta non si può votare), ma anche se li accetta l'utente puo cancellarli manualmente e quindi votare di nuovo.
un certo grado di incertezza devi comunque accettarlo

Allora l'ideale sarebbe far durare per sempre il cockie, perché l'utente non ha motivo di ritentare la votazione visto che l'ha già fatto, però in caso di dimentichi di aver votato, anche tra es. 1 anno viene avvisato.
 
ciao
puoi cercare di portare ad un anno
time()+(60*60*24*365)
anche se come detto non ti da l'assoluta certezza (es l'utente si compra un nuovo pc)
 
ciao
puoi cercare di portare ad un anno
time()+(60*60*24*365)
anche se come detto non ti da l'assoluta certezza (es l'utente si compra un nuovo pc)

Lo metto ad 1 anno, ho notato che usando un altro browser sullo stesso pc, mi lascia votare, come dici tu memorizza nel browser, non c'è modo di par si che il cookie si memorizzi in tutti brower sin dalla prima votazione?
 
Non capisco, ho messo l cookie ma mi da errore al foreach

bool(false)
Warning: Invalid argument supplied for foreach() in /membri/gruppoalveo/menuDX.php on line 52


PHP:
<?php
ob_start(); // Questo va messo qui,, setta il coockie "votato" per tutte le pagine (1/4), il resto si trova in menuDX.php
//---variabili di connessione in locale
$host = 'localhost';     //nome host 
$username = 'root';      //user name che utilizzi per accedere a phpmyadmin 
$password = 'root';  //password  che utilizzi per accedere a phpmyadmin 
$db = 'gruppoalveo';  // nome che hai dato al database

..


<?php
$q="SELECT * FROM sondaggio WHERE id=1"; 
$risultato = mysql_query($q); 
$riga=mysql_fetch_assoc($risultato);
var_dump($riga);//dovrebbe darti: array il nome dei campi e il loro valore 
$tot=0;//metto il totale a 0  
foreach($riga as $chiave => $valore) { 
    if($chiave !="id") {
        ${$chiave}=$valore;//valore del campo 
        $tot=$tot+$valore;//faccio il totale 
    } 
} 
if($tot >0) { 
     $internet= (int)($internet/$tot*100); $internet_pos=$internet-100;
     $depliant= (int)($depliant/$tot*100); $depliant_pos=$depliant-100; 
     $casualmente= (int)($casualmente/$tot*100); $casualmente_pos=$casualmente-100;
     $amici_o_conoscenti= (int)($amici_o_conoscenti/$tot*100); $amici_pos=$amici_o_conoscenti-100;
     $giornali_o_televisione= (int)($giornali_o_televisione/$tot*100); $giornali_pos=$giornali_o_televisione-100;  
}
else {
     $internet= 0; $internet_pos=-100;
     $depliant= 0; $depliant_pos=-100;
     $casualmente= 0; $casualmente_pos=-100;
     $amici_o_conoscenti= 0; $amici_pos=-100;
     $giornali_o_televisione= 0; $giornali_pos=-100;
}
if(isset($_POST['puls_invio'])) { 
if(!isset($_COOKIE['votato'])){ //Setta il coockie (2/4), il primo si trova in connessione.php
if(isset($_POST['voto'])) {
    $voto=mysql_real_escape_string($_POST['voto']);
    $q="UPDATE sondaggio SET $voto = $voto + 1 WHERE id=1"; 
    if(mysql_query($q)) { 
    echo "<img src=\"http://gruppoalveo.altervista.org/immagini/ok.png\" width=\"40\" height=\"40\" alt=\"Ok\" title=\"Ok\" /><br /><div style=\"margin-top:10px; margin-bottom:20px;font-size:16px; color:#0000ff; text-align: center;\">Grazie, il tuo voto è stato inserito!</div>"; 
    echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
    setcookie("votato", "si", time()+3600*24*30*12*5); //Dura 5 anni, setta il coockie (3/4)
     }
   } 
else { 
     echo "<img src=\"http://gruppoalveo.altervista.org/immagini/alert.png\" width=\"50\" height=\"50\" alt=\"Alert\" title=\"Alert\" /><br /><div style=\"margin-top:10px; margin-bottom:20px; font-size:16px; color:#ff0000; text-align: center;\">Devi selezionare una risposta!</div>"; 
     echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
   }
}
else { 
    echo "<img src=\"http://gruppoalveo.altervista.org/immagini/stop.jpg\" width=\"70\" height=\"70\" alt=\"Stop\" title=\"Stop\" /><br /><div style=\"margin-top:10px; margin-bottom:20px; font-size:16px; color:#ff0000; text-align: center;\">Hai già votato, grazie!</div>";  
    echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>"; 
   } 
}  
?>

.....//FORM
<?php 
ob_end_flush();//QUEST DEVE ESSESRE ALLA PENULTIMA RIGA, setta il coockie (4/4)
?>
 
Ultima modifica:
ciao
ma prima non telo dava?
quello che ho testato io funziona, hai modificato qualcos'altro?
piccolo dubbio hai vuotato la tabella successi?
 
Ultima modifica:
ciao
scrivi con phpmyadmin il record (che tra l'altro rimmarrà sempre unico) nella tabella sondaggio

id 1
internet 0
depliant 0
casualmente 0
amici_o_conoscenti 0
giornali_o_televisione 0

se devi fare delle prove per ripartire da zero non vuotare la tabella ma fai l'uppaggio
Codice:
UPDATE sondaggio SET internet  = 0, depliant = 0, casualmente = 0, amici_o_conoscenti = 0, giornali_o_televisione = 0 WHERE id = 1

edit
comunque ora guardo in modo da mettere una sicurezza in modo che se il record non esiste non ti dia errore.
 
Ultima modifica:
ciao
scrivi con phpmyadmin il record (che tra l'altro rimmarrà sempre unico) nella tabella sondaggio

id 1
internet 0
depliant 0
casualmente 0
amici_o_conoscenti 0
giornali_o_televisione 0

se devi fare delle prove per ripartire da zero non vuotare la tabella ma fai l'uppaggio
Codice:
UPDATE sondaggio SET internet  = 0, depliant = 0, casualmente = 0, amici_o_conoscenti = 0, giornali_o_televisione = 0 WHERE id = 1

edit
comunque ora guardo in modo da mettere una sicurezza in modo che se il record non esiste non ti dia errore.

Avevo vuotato la tabella cosi azzerava anche gli id, ora ho inserito questo in SQL e sembra a posto, prova a vedere

PHP:
INSERT INTO sondaggio (id,internet,depliant,casualmente,amici_o_conoscenti,giornali_o_televisione) VALUES (1,0,0,0,0,0);
 
ciao
un cosnsiglio guarda se riessi tramite ajax e jquerry a non far ricaricare la pagina al voto.
eventual posta nella sezione dove puoi trovare degli esperti
 
ciao
un cosnsiglio guarda se riessi tramite ajax e jquerry a non far ricaricare la pagina al voto.
eventual posta nella sezione dove puoi trovare degli esperti
Vedo, ho notato che da un errore a fondo pagina dove c'è la data dell'ultimo aggiornamento, lui però funziona

PHP:
// Aggiorna la data in tutte le pagine anche se ne modifichi una
function ultimo_aggiornamento(){ 
    $file=glob('*');//legge tutti i file 
    $file = array_filter($file, "is_file");//verifica se sono file 
    $mod_time = array_map('filemtime', $file);//legge il tempo  
    return max($mod_time); //estrae il massimo 
} 
...
<?php echo "Ultimo aggiornamento: ".date("j.m.Y",ultimo_aggiornamento()); ?>
 

Discussioni simili