Creare sondaggio

  • Creatore Discussione Creatore Discussione Shyson
  • Data di inizio Data di inizio
ciao

dato che la tabella ha un solo record inutile dargli es int(3) che corrisponde a voler avere tanti record da 1 a 999, di default 1 perche deve rimanere sempre lo stesso

ho messo 12 per non avere problemi, puoi accettare un totale massimo di 999.999.999.999 voti (999 milardi, ti auguro di averli, saresti meglio di google), defaul 0 perche il conteggio deve partire da 0 (nessun voto), al primo che clicca su "internet" avrai internet = 0 + 1 = 1

per i radio basta che sostituire il codice tra <select ... >....</select> con la serie di radio

edit
se parli di quello che c'è nel box indicato "SONDAGGIO" da quello che vedo è tutto js, in tal caso non so darti una mano
Ho messo così la tabella
 

Allegati

  • Img_01.png
    Img_01.png
    47,9 KB · Visite: 205
Questo è tutto il codice che ho nel file esterno, i dati di connessione sono in ogni pagina che richiama questa

PHP:
<?php
//dati di connessione
if(isset($_POST['vota'])){
    $voto=htmlspacialcars($_POST['voto']);//per eventuale sicurezza
    $q="UPDATE sondaggio SET $voto= $voto + 1 WHERE id=1";
    if(mysql_query($q)){
        echo "grazie di aver votato";
    }else{
        echo "si è verificato un errore, riprova più tardi";
    }
}
?>
<p style="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'];?>">
<input name="voto" type="radio" value="internet"> Internet
<br />
<br />
<input name="voto" type="radio" value="depilant"> Depliant
<br />
<br />
<input name="voto" type="radio" value="casualmente"> Casualmente 
<br />
<br />
<input name="voto" type="radio" value="amici_o_conoscenti"> Amici o conoscenti
<br />
<br />
<input name="voto" type="radio" value="giornali_o_televisione"> Giornali o televisione
<br /> 
<br /> 
<input name="vota" type="submit" id="vota" value="vota">
</form>
</div>

A video è così, ci sono 2 cose da sistemare:

1. quando clicco Vota sparisce il div, riappare se ricarico la pagina
2. manca la barra e il conteggio percentuale, come nel link che ti ho dato

Img_01.png
 
ciao
Si, ho notato anche che col codice php sopra il form mi nasconde il div
cosa ti nasconde il div? la frase "grazie di aver votato" o la "si è verificato un errore, riprova più tardi"?
se è quella devi aggiustarla con i css e dopo un tot di secondi farla sparire.
potresti farla sparire mettendo prima della chiusura dell'if isset l'istruzione
PHP:
<?php
//dati di connessione
if(isset($_POST['vota'])){
//..... .... .....
echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
}
?>
comunque secondo me ti conviene visualizzare i risultati in un altro box, sto mettendo a punto un metodo che ti visualizza la barra senza usare js, solo con i css. poi te lo posto
 
ciao
ecco come potresti fare per visualizzare i risultati (la parte rossa è un'immagine da 100x15px)
PHP:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Documento senza titolo</title>
<style type="text/css">
.a{
display:block;
float:right;
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;
}
.c{
background-color:#999999;
font-family:Arial, Helvetica, sans-serif;
font-size:12px;
width:250px;
height:14px;
}
.d{
background-color:#999999;
width:260px;
}
</style>
</head>
<body>
<?php
//dati di connessione
/*
$q="SELECT * FROM sondaggio WHERE id=1";
$riga=mysql_fetch_array(mysql_query($q));
//faccio passo passo poi puoi semplificare
$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
}
//se $tot > 0 calcolo la percentuale (uso la percentuale senza virgole numero intero)
if($tot>0){//per evitare divisione per zero
	$internet_x100= (int)($internet/$tot*100); $internet_pos=$internet_x100-100;
	$depliant_x100= (int)($depliant/$tot*100); $depliant_pos=$depliant_x100-100;
	$casualmente_x100= (int)($casualmente/$tot*100); $casualmente_pos=$casualmente_x100-100;
	$giornali_x100= (int)($giornali_o_televisione/$tot*100); $giornali_pos=$giornali_x100-100;
	$amici_x100= (int)($amici_o_conoscenti/$tot*100); $amici_pos=$amici_x100-100;
}else{
	$internet_x100= 0; $internet_pos=-100;
	$depliant_x100= 0; $depliant_pos= -100;
	$casualmente_x100= 0; $casualmente_pos= -100;
	$giornali_x100= 0; $giornali_pos=-100;
	$amici_x100= 0; $amici_pos=-100;
}
*/
//valori per test - provalo modificando i valori di $......_x100
$internet_x100=0; $internet_pos=$internet_x100-100;
$depliant_x100=80; $depliant_pos=$depliant_x100-100;
$casualmente_x100=20; $casualmente_pos=$casualmente_x100-100;
$giornali_x100=50; $giornali_pos=$giornali_x100-100;
$amici_x100=5; $amici_pos=$amici_x100-100;
//dopo provato togli il test e decommenta la parte con il db e provalo
?>
<div class="d">
<div class="c">internet: <?php echo $internet_x100;?>%<div class="a" style="background-position:<?php echo $internet_pos; ?>px"></div></div><br />
<div class="c">depliant: <?php echo $depliant_x100;?>%<div class="a" style="background-position:<?php echo $depliant_pos; ?>px"></div></div><br>
<div class="c">casualmente: <?php echo $casualmente_x100;?>%<div class="a" style="background-position:<?php echo $casualmente_pos; ?>px"></div></div><br />
<div class="c">giornali o televisione: <?php echo $giornali_x100;?>%<div class="a" style="background-position:<?php echo $giornali_pos; ?>px"></div></div><br />
<div class="c">amici o conoscenti: <?php echo $amici_x100;?>%<div class="a" style="background-position:<?php echo $amici_pos; ?>px"></div></div>
</div>
</body>
</html>
e questo è il risultato con i valori del test (a te aggiustare il css)
box_percentuale.jpg
prima provala così come è, poi togli i valori del test e decommenti tutta la parte relativa al db

dimenticavo: nel test la somma delle percentuali non fa 100 (le ho messe a caso) ma quando farà il calcoli si
 
Ultima modifica:
Non capisco, che fa sparire tutto il blocco div è questo codice che è messo sopra il form, se tolgo questo codice riappare il div e tutti quelli sottostanti

PHP:
<?php 
//dati di connessione 
if(isset($_POST['vota'])){ 
    $voto=htmlspacialcars($_POST['voto']);//per eventuale sicurezza 
    $q="UPDATE sondaggio SET $voto= $voto + 1 WHERE id=1"; 
    if(mysql_query($q)){ 
        echo "grazie di aver votato"; 
    }else{ 
        echo "si è verificato un errore, riprova più tardi"; 
    } 
} 
?>
 
ciao
dovrebbero essere gli echo, prova a toglierli

Li ho tolti ma è uguale, tieni presente che si trova in una pagina esterna e quelle che la richiamano hanno già i dati di connessione al db

non potresti usare i miei codici per fare funzionare il tutto, visto che è già quasi pronto come lo vorrei?

PHP:
<?php 
//dati di connessione 
if(isset($_POST['vota'])){ 
    $voto=htmlspacialcars($_POST['voto']);//per eventuale sicurezza 
    $q="UPDATE sondaggio SET $voto= $voto + 1 WHERE id=1"; 
    if(mysql_query($q)){ 
        echo "grazie di aver votato"; 
    }else{ 
        echo "si è verificato un errore, riprova più tardi"; 
    } 
} 
?> 
<p style="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'];?>">
<input type="radio" name="voto" value="internet"> Internet
<br />
<br />
<input  type="radio" name="voto" value="depilant"> Depliant
<br />
<br />
<input type="radio" name="voto"  value="casualmente"> Casualmente 
<br />
<br />
<input type="radio" name="voto"  value="amici_o_conoscenti"> Amici o conoscenti
<br />
<br />
<input type="radio" name="voto"  value="giornali_o_televisione"> Giornali o televisione
<div style="margin-top:30px; text-align:center;"><input type="submit" name="vota"  id="vota" value="vota"></div>
</form>
</div><!-- div style -->
 
Sono riuscito a fare qualcosa anche se non funziona, il problema è sempre questo

if(isset($_POST['vota'])){
$voto=htmlspacialcars($_POST['voto']);//per eventuale sicurezza
$q="UPDATE sondaggio SET $voto= $voto + 1 WHERE id=1";
if(mysql_query($q)){
echo "grazie di aver votato";
}else{
echo "si è verificato un errore, riprova più tardi";
}
}


PHP:
<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

$q="SELECT * FROM sondaggio WHERE id=1";
$riga=mysql_fetch_array(mysql_query($q));
//faccio passo passo poi puoi semplificare
$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
}
//se $tot > 0 calcolo la percentuale (uso la percentuale senza virgole numero intero)
if($tot>0){//per evitare divisione per zero
    $internet_x100= (int)($internet/$tot*100); $internet_pos=$internet_x100-100;
    $depliant_x100= (int)($depliant/$tot*100); $depliant_pos=$depliant_x100-100;
    $casualmente_x100= (int)($casualmente/$tot*100); $casualmente_pos=$casualmente_x100-100;
    $amici_x100= (int)($amici_o_conoscenti/$tot*100); $amici_pos=$amici_x100-100;
    $giornali_x100= (int)($giornali_o_televisione/$tot*100); $giornali_pos=$giornali_x100-100;
}else{
    $internet_x100= 0; $internet_pos=-100;
    $depliant_x100= 0; $depliant_pos= -100;
    $casualmente_x100= 0; $casualmente_pos= -100;
    $giornali_x100= 0; $giornali_pos=-100;
    $amici_x100= 0; $amici_pos=-100;
}

if(isset($_POST['vota'])){ 
    $voto=htmlspacialcars($_POST['voto']);//per eventuale sicurezza 
    $q="UPDATE sondaggio SET $voto= $voto + 1 WHERE id=1"; 
    if(mysql_query($q)){ 
        echo "grazie di aver votato"; 
    }else{ 
        echo "si è verificato un errore, riprova più tardi"; 
    } 
} 
?> 
<p style="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'];?>">
<input type="radio" name="voto" value="internet"> Internet
<br />
<div class="a" style="background-position:<?php echo $internet_pos; ?>px"><?php echo $internet_x100;?>%</div>
<br />
<br />
<input  type="radio" name="voto" value="depilant"> Depliant
<br />
<div class="a" style="background-position:<?php echo $depliant_pos; ?>px"><?php echo $depliant_x100;?>%</div>
<br />
<br />
<input type="radio" name="voto"  value="casualmente"> Casualmente
<br />
<div class="a" style="background-position:<?php echo $casualmente_pos; ?>px"><?php echo $casualmente_x100;?>%</div>
 <br />
<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"><?php echo $amici_x100;?>%</div>
<br />
<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"><?php echo $giornali_x100;?>%</div>

<div style="margin-top:30px; text-align:center;"><input type="submit" name="vota"  id="vota" value="vota"></div>
</form>
</div><!-- div style -->

Stampa così

Img_01.png
 
Novità

Ho sistemato un po di cose, ma ci sono alcune cose che non riesco:

1. il totale delle percentuali non arriva al 100% ma a 45% circa
2. non appare la barra progressiva (ho messo un immagine lunga 100px)
3. devo mettere un codice che individua il suo ip e in caso ha già votato, esce l'avviso
4. come puoi vedere dalla mia Home se premi Vota senza selezionare una risposta, esce un avviso di errore

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_pos=$internet-100; $internet= (int)($internet/$tot*100); 
    $depliant_pos=$depliant-100; $depliant= (int)($depliant/$tot*100); 
    $casualmente_pos=$casualmente-100; $casualmente= (int)($casualmente/$tot*100);
    $amici_pos=$amici_o_conoscenti-100; $amici_o_conoscenti= (int)($amici_o_conoscenti/$tot*100); 
    $giornali_pos=$giornali_o_televisione-100; $giornali_o_televisione= (int)($giornali_o_televisione/$tot*100); 
}
else {
    $internet_pos=-100; $internet= 0; 
    $depliant_pos=-100; $depliant= 0; 
    $casualmente_pos=-100; $casualmente= 0; 
    $amici_pos=-100; $amici_o_conoscenti= 0; 
    $giornali_pos=-100; $giornali_o_televisione= 0;  
}
if(isset($_POST['puls_vota'])) { 
    $voto=htmlspecialchars($_POST['voto']);
    $q="UPDATE sondaggio SET $voto= $voto + 1 WHERE id=1"; 
    if(mysql_query($q)) { 
    echo "<div style=\"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 "<div style=\"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="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><!-- fra -->
<div style="margin-top:30px; text-align:center;"><input type="submit" name="puls_vota" value="Vota" class="manina-guest"></div>
</form>
</div><!-- div style -->
 
ciao
scusa, ma sono un po' incasinato in questi giorni, riprendo il filo del discorso e poi (spero) di saperti dire.

p.s.
dici che si ferma al 45%, cosa? la barra o il calcolo numerico?
 
ciao
scusa, ma sono un po' incasinato in questi giorni, riprendo il filo del discorso e poi (spero) di saperti dire.

p.s.
dici che si ferma al 45%, cosa? la barra o il calcolo numerico?
La barra non appare del tutto, mi riferivo al calcolo numerico totale.

Riguardo all'errore dice che voto non è definito $voto=htmlspecialchars($_POST['voto']);
 
ciao
così a occhio non capisco perche ti dia indefinita, poi
PHP:
//.....
$internet_pos=$internet-100; $internet= (int)($internet/$tot*100);
//...
attento: devi invertire le istruzioni (anche per le altre)
PHP:
//....
$internet= (int)($internet/$tot*100);$internet_pos=$internet-100; 
//....
questo perchè (come hai scritto tu) nella prima istruzione usi la variabile $internet che non è definita e php la "aggiusta" a zero, indipendentemente dal valore che poi assumerà
comunque guardo meglio il resto
 
ciao
così a occhio non capisco perche ti dia indefinita, poi
PHP:
//.....
$internet_pos=$internet-100; $internet= (int)($internet/$tot*100);
//...
attento: devi invertire le istruzioni (anche per le altre)
PHP:
//....
$internet= (int)($internet/$tot*100);$internet_pos=$internet-100; 
//....
questo perchè (come hai scritto tu) nella prima istruzione usi la variabile $internet che non è definita e php la "aggiusta" a zero, indipendentemente dal valore che poi assumerà
comunque guardo meglio il resto
Ok, li ho invertiti, anche quelle sotto in else
 
Sono a buon punto, come vedi da un errore nel foreach eppoi non conteggia le somme fino al 100%, lo so perché in locale ho lo stesso codice ma li funziona.

Vedi la Home

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 "<div style=\"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 "<div style=\"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="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 -->
 

Discussioni simili