Perciò lo tolgo?
Ho guardato nel db SQL ma non c'è più il codice che avevo messo
Printable View
È normale che non c'é: quello era soltanto un comando per aggiungere un record nella tabella.
Ripristina la pagina come era all'inizio. Poi vediamo se funziona, o il perché non funziona.
Ciao!
Puoi vederla la home
EDIT:
Questo è il nuovo codice
Codice PHP:<?php
$q="SELECT * FROM sondaggio WHERE id=1";
$risultato = 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= (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;
}
$risultato=mysql_query("INSERT INTO sondaggio(internet,depliant,casualmente,amici_o_conoscenti,giornali_o_televisione)
VALUES('$internet','$depliant','$casualmente','$amici_o_conoscenti','$giornali_o_televisione')");
?>
<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="depilant"> 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>
<?php
if(isset($_POST['puls_vota'])) {
$voto=htmlspecialchars($_POST['puls_vota']);
$q="UPDATE sondaggio SET $voto= $voto + 1 WHERE id=1";
if(mysql_query($q)) {
echo "<div style=\"margin-top:12px;font-size:16px; color:#0000ff; text-align: center;\">Grazie per aver votato!</div>";
echo "<meta http-equiv='Refresh' content='2; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
}
else {
echo "<div style=\"margin-top:12px;font-size:16px; color:#ff0000; text-align: center;\">Devi selezionare una risposta!</div>";
echo "<meta http-equiv='Refresh' content='2; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
}
}
?>
</div><!-- div style -->
Dopo:
Aggiungi:Codice PHP:$risultato = mysql_query($q);
EDIT:Codice PHP:$riga=mysql_fetch_array($risultato);
ah, ed elimina:
E risposta sopra la parte dell'UPDATE: come era all'inizio, era circa corretto :) ...era corretto aparte la mysql_real_escape_string().Codice PHP:$risultato=mysql_query("INSERT INTO sondaggio(internet,depliant,casualmente,amici_o_conoscenti,giornali_o_televisione)
VALUES('$internet','$depliant','$casualmente','$amici_o_conoscenti','$giornali_o_televisione')");
Ciao!
Fatto, non capisco come fa ad inserire i dati nella tabella, poi ho visto che nella tabella si aggiornano sottoforma di numero di votazioni, però ad ogni voto la tabella si allunga in verticale, no si può evitare?
Altra cosa, nella home la somma delle percentuali non arriva a 100% ma a circa 44%
Codice PHP:<?php
$q="SELECT * FROM sondaggio WHERE id=1";
$risultato = mysql_query($q);
$riga=mysql_fetch_array($risultato);
//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= (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_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 per aver votato!</div>";
echo "<meta http-equiv='Refresh' content='2; 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='2; 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'];?>">
...
Inserisce i dati con la UPDATE. Incrementa di uno il campo $voto passato tramite il form.
la tabella si allunga, perché ieri nello script avevi aggiunto
Puoi cancellare tutte le righe della tabella, a parte quella con id=1. Perché proprio quella con id=1? Perché lo script prende in considerazione soltanto la riga con id=1:Citazione:
Codice PHP:$risultato=mysql_query("INSERT INTO sondaggio(internet,depliant,casualmente,amici_o_conoscenti,giornali_o_televisione)
VALUES('$internet','$depliant','$casualmente','$amici_o_conoscenti','$giornali_o_televisione')");
Non capisco infatti il perché di tutti i calcoli sotto. Basterebbe fareCitazione:
Codice PHP:$q="SELECT * FROM sondaggio WHERE id=1";
Codice PHP:$q="UPDATE sondaggio SET $voto= $voto + 1 WHERE id=1";
Per ogni voce...Codice PHP:$voce = ($voce/100)*$tot;
magari poi usare round() per evitare molte cifre dopo la virgola...
Comunque capisco che lo script non lo hai fatto te, ma le barre, da quel che vedo, dovrebbero variare la loro lunghezza in proporzione alla percentuale... ma non lo fanno :|
Ciao!
Ho sistemato la tabella, continua a dare errore se premo Vota senza aver selezionato una risposta, prova nella Home
Beh, è normale, perché non invii nessun dato, quindi lui fa la query ma non trova nulla.
Sostituisci:
con:Codice PHP:if(isset($_POST['puls_vota'])) {
EDIT:Codice PHP:if(isset($_POST['voto'])) {
ah, invece di "htmlspecialchars", scrivi "mysql_real_escape_string". Quella funzione è fatta a posta per prevenire sql injection.
Ciao!
Ho messo così:Poi ho sostituito puls_vota con voto però non esce più l'avviso "Devi selezionare una risposta!", inoltre se aggiorno la pagine esce "Grazie, il tuo voto è stato inserito!" e aumenta la percentuale a qualche rispostaCodice PHP:$voto=mysql_real_escape_string($_POST['voto']);
Sostituisci il blocco:
con:Codice 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 "<div style=\"margin-bottom:20px;font-size:16px; color:#0000ff; text-align: center;\">Grazie per aver votato!</div>";
echo "<meta http-equiv='Refresh' content='2; 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='2; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
}
}
Il fatto che se aggiorni incrementa la visita, lo faceva anche prima, immagino.Codice 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 "<div style=\"margin-bottom:20px;font-size:16px; color:#0000ff; text-align: center;\">Grazie per aver votato!</div>";
// echo "<meta http-equiv='Refresh' content='2; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
}
else {
echo "<div style=\"margin-bottom:20px; font-size:16px; color:#ff0000; text-align: center;\">Errore nella query!</div>";
// echo "<meta http-equiv='Refresh' content='2; 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='2; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
}
La soluzione più semplice, sarebbe quella di far un redirect a se stessa via PHP dopo l'update.
EDIT: ho commentato i redirect: che scopo hanno?
Ciao!
Lo scopo è ricaricare la pagina e far scomparire gli echo, comunque quello che va meglio è questo perché escono gli avvisi giusti e conteggia i voti, l'unico problema è che non è definito "voto"
Codice PHP:if(isset($_POST['puls_invio'])) {
$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'])."'>";
}
}
.....
<input type="submit" name="puls_invio" value="Vota" class="manina-guest">
L'ultimo che ti ho scritto, decommentando i redirect, che problema da?
Ciao!
Anche se è bruttino, dovrebbe funzionare:
Molto strano che in quello sopra appariva "errore nella query".Codice PHP: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'])."'>";
}
}
Ciao!
Puoi anche toglierlo. Se però succedono fatti strani, rimettilo e dovrebbe dare degli errori o warning su cosa sta succedendo (se ci son errori o warning, ovviamente :tongue).
Dovresti creare una nuova tabella sul database, dove ogni volta salvi l'ip. Occhio che è molto facile eludere questa protezione: è sufficiente (in molti casi ma non in tutti) riavviare il modem.
Un controllo un pelo più severo, sarebbe quello di incrociare sia il controllo IP, sia settare un cookie sul browser quando vota: anche se cambia ip, ma utilizza lo stesso browser, lo script dovrebbe accorgersene per la presenza del cookie.
Ovviamente nemmeno questo metodo è sicuro. Anzi, per questa cosa non esiste alcun metodo sicuro.
Ciao!
setCookie()
Ciao!
http://www.html.it/pag/16696/mantene...tato-i-cookie/
Quello che ti avevo linkato sopra, però, era la documentazione ufficiale :wink:
Ciao!
Ho fatto varie ricerche prove ma non me la cavo, a me basterebbe un cookie senza scadenza che semplicemente riconosce il suo ip e non lo fa votare più di una volta, se possibile senza db però se proprio serve...
EDIT: ho notato che da ancora errore nel foreach, vedi la Home
Per il cookie, non è possibile farlo durare all'infinito. Però, penso che 5 anni siano sufficienti: dopo 5 anni uno ha anche il PC nuovo :).
Invece di "voto" e "qualsiasi cosa" puoi mettere dei nomi che attirano meno l'attenzione, anche se comunque non so quando sia conveniente...Codice PHP:if(isset($_POST['puls_invio']) && !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)) {
setcookie('votato','qualsiasi cosa',time()*3600*24*30*12*5);
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'])."'>";
}
}
Per l'errore nel foreach, hai eliminato la riga nella tabella con id=1? (anche perché non fa più nemmeno votare).
Ciao!
Per il fatto che vedi gli array, molto probabilmente hai messo un var_dump da qualche parte.
Per la setcookie() andrebbe messa prima di qualsiasi output html. In effetti mi sembra che prima ci sia tutta la pagina, quindi dovresti spostare quel pezzo sopra in alto nella pagina. Ovviamente poi avrai i problemi degli echo, quindi puoi salvare le stringhe dei messaggi in variabili, da mostrare dopo, nel posto corretto.
Ciao!
Il controllo IP non si fa con i cookie. Si devono salvare gli ip in una tabella del database.
Ciao!
Vedendo che è stato settato un cookie.
Ciao!
Prova a modificare la prima query:
con:Codice PHP:$q="SELECT * FROM sondaggio WHERE id=1";
Come era prima, $tot era +1 perché conteggiava anche l'id. Quindi, potevi anche lasciar la query come era prima, ed eliminare 1 dal totale... Ma penso sia più pulita e chiara questa soluzione :wink:.Codice PHP:$q="SELECT internet, depliant, casualmente, amici_o_conoscenti, giornali_o_televisione FROM sondaggio WHERE id=1";
(comunque non son sicuro che funzioni correttamente... prova...).
Ciao!