È 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!
regolamento altervista_______________ regolamento forum
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 -->
Ultima modifica di gruppoalveo : 11-01-2013 alle ore 01.16.38 Motivo: aggiunta
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!
Ultima modifica di alemoppo : 11-01-2013 alle ore 01.27.33
regolamento altervista_______________ regolamento forum
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'];?>">
...
Ultima modifica di gruppoalveo : 11-01-2013 alle ore 11.37.49
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: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 fareCodice 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!
regolamento altervista_______________ regolamento forum
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!
Ultima modifica di alemoppo : 11-01-2013 alle ore 18.41.00
regolamento altervista_______________ regolamento forum
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!
Ultima modifica di alemoppo : 11-01-2013 alle ore 19.05.25
regolamento altervista_______________ regolamento forum
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!
regolamento altervista_______________ regolamento forum
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!
Ultima modifica di alemoppo : 11-01-2013 alle ore 21.22.10
regolamento altervista_______________ regolamento forum
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 ).
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!
regolamento altervista_______________ regolamento forum
http://www.html.it/pag/16696/mantene...tato-i-cookie/
Quello che ti avevo linkato sopra, però, era la documentazione ufficiale
Ciao!
regolamento altervista_______________ regolamento forum
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
Ultima modifica di gruppoalveo : 12-01-2013 alle ore 18.24.48 Motivo: Aggiunta
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!
regolamento altervista_______________ regolamento forum
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!
regolamento altervista_______________ regolamento forum
Il controllo IP non si fa con i cookie. Si devono salvare gli ip in una tabella del database.
Ciao!
regolamento altervista_______________ regolamento forum
Vedendo che è stato settato un cookie.
Ciao!
regolamento altervista_______________ regolamento forum
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 .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!
Ultima modifica di alemoppo : 13-01-2013 alle ore 01.51.32
regolamento altervista_______________ regolamento forum