php poll

Status
Niet open voor verdere reacties.

Naughtygirl

Gebruiker
Lid geworden
17 jan 2009
Berichten
174
Bekijk bijlage poll.txt Bekijk bijlage poll.txtIk heb een php poll gevonden op internet, alleen hij doet het niet goed. Ik krijg deze fout bij elke invul optie:

Warning: Division by zero in /home/reseller/domains/slotraceclub.nl/public_html/poll.php on line 63

Kan iemand mij helpen, ben een leek op php gebied. Ik heb de 2 bestanden bijgevoegd. Staan er nog meer fouten in?


Groetjes Naughtygirl
 
Laatst bewerkt:
Die waarschuwing ontstaat als het totaal aantal stemmen 0 is. In de PHP-code wordt er namelijk gedeeld door het totaal aantal stemmen en delen door 0 kan nu eenmaal niet.

De simpelste oplossing is om regel 27 en regel 63 te veranderen van
PHP:
$uitslag = round(100 / $totaal * $resultaat[$i]);       //formule voor procenten
in
PHP:
if ($totaal == 0)
{
   $uitslag = 0;
}
else
{
   $uitslag = round(100 / $totaal * $resultaat[$i]);       //formule voor procenten
}

[edit]Overigens kan je ook beter de regel
PHP:
if(isset($_POST['stemmen']))
vervangen door
PHP:
if ($_SERVER['REQUEST_METHOD'] == "POST")
Dat is de enige betrouwbare manier om te controleren of het formulier is verzonden.[/edit]
 
Laatst bewerkt:
Die waarschuwing ontstaat als het totaal aantal stemmen 0 is. In de PHP-code wordt er namelijk gedeeld door het totaal aantal stemmen en delen door 0 kan nu eenmaal niet.

De simpelste oplossing is om regel 27 en regel 63 te veranderen van
PHP:
$uitslag = round(100 / $totaal * $resultaat[$i]);       //formule voor procenten
in
PHP:
if ($totaal == 0)
{
   $uitslag = 0;
}
else
{
   $uitslag = round(100 / $totaal * $resultaat[$i]);       //formule voor procenten
}

[edit]Overigens kan je ook beter de regel
PHP:
if(isset($_POST['stemmen']))
vervangen door
PHP:
if ($_SERVER['REQUEST_METHOD'] == "POST")
Dat is de enige betrouwbare manier om te controleren of het formulier is verzonden.[/edit]

Ik heb het aangepast, maar nu krijg ik deze foutmeldingen, na het stemmen:

Warning: fopen(poll.txt) [function.fopen]: failed to open stream: Permission denied in /home/reseller/domains/slotraceclub.nl/public_html/poll.php on line 58

Warning: fputs(): supplied argument is not a valid stream resource in /home/reseller/domains/slotraceclub.nl/public_html/poll.php on line 59

Warning: fclose(): supplied argument is not a valid stream resource in /home/reseller/domains/slotraceclub.nl/public_html/poll.php on line 60

Groetjes Naughtygirl
 
Die foutmeldingen willen zeggen dat de rechten van het bestand "poll.txt" verkeerd staan. Het PHP-script mag het bestand niet openen. Je zal dus de rechten van het bestand moeten aanpassen. Dit kan met vrijwel elk ftp-programma. Waarschijnlijk moet je het bestand de rechten 555 (lees- en schrijfrechten voor iedereen) geven.
 
Die foutmeldingen willen zeggen dat de rechten van het bestand "poll.txt" verkeerd staan. Het PHP-script mag het bestand niet openen. Je zal dus de rechten van het bestand moeten aanpassen. Dit kan met vrijwel elk ftp-programma. Waarschijnlijk moet je het bestand de rechten 555 (lees- en schrijfrechten voor iedereen) geven.

Als ik de rechten van poll.txt verander naar 555, krijg ik dezelfde foutmelding na het stemmen. Als ik de rechten op 777 zet, krijg ik deze foutmeldingen:

Warning: Cannot modify header information - headers already sent by (output started at /home/reseller/domains/slotraceclub.nl/public_html/poll.php:2) in /home/reseller/domains/slotraceclub.nl/public_html/poll.php on line 61
Je stem is verzonden!
Je wordt nu doorgestuurd naar de poll...
Warning: Cannot modify header information - headers already sent by (output started at /home/reseller/domains/slotraceclub.nl/public_html/poll.php:2) in /home/reseller/domains/slotraceclub.nl/public_html/poll.php on line 63

Groetjes Naughtygirl
 
Je hebt gelijk, 555 klopt niet. Dat had 666 (:evil:) moeten zijn, al kan 777 geen kwaad; een txt-bestand is niet uitvoerbaar.

De foutmelding die je nu krijgt komt omdat de functie "setcookies" en "header" worden gebruikt in de code. Voordat een van deze functies wordt aangeroepen mag er geen uitvoer zijn. Ook "[b ]poll.php[/b]" (wat helemaal bovenaan staat) mag niet. Als je dat weghaalt (evt. kan je het "echo-en" in de andere situaties) en de volgorde van de regels
PHP:
setcookie("poll", "gestemd", time()+3600*24);   //hier wordt het cookie geset op een dag
echo "Je stem is verzonden!<br>Je wordt nu doorgestuurd naar de poll...";
header("refresh: 2; url=poll.php"); //doorverwijzing
verandert in
PHP:
setcookie("poll", "gestemd", time()+3600*24);   //hier wordt het cookie geset op een dag
header("refresh: 2; url=poll.php"); //doorverwijzing
echo "Je stem is verzonden!<br>Je wordt nu doorgestuurd naar de poll...";
zou die foutmelding opgelost moeten zijn.
 
Je hebt gelijk, 555 klopt niet. Dat had 666 (:evil:) moeten zijn, al kan 777 geen kwaad; een txt-bestand is niet uitvoerbaar.

De foutmelding die je nu krijgt komt omdat de functie "setcookies" en "header" worden gebruikt in de code. Voordat een van deze functies wordt aangeroepen mag er geen uitvoer zijn. Ook "[b ]poll.php[/b]" (wat helemaal bovenaan staat) mag niet. Als je dat weghaalt (evt. kan je het "echo-en" in de andere situaties) en de volgorde van de regels
PHP:
setcookie("poll", "gestemd", time()+3600*24);   //hier wordt het cookie geset op een dag
echo "Je stem is verzonden!<br>Je wordt nu doorgestuurd naar de poll...";
header("refresh: 2; url=poll.php"); //doorverwijzing
verandert in
PHP:
setcookie("poll", "gestemd", time()+3600*24);   //hier wordt het cookie geset op een dag
header("refresh: 2; url=poll.php"); //doorverwijzing
echo "Je stem is verzonden!<br>Je wordt nu doorgestuurd naar de poll...";
zou die foutmelding opgelost moeten zijn.

Vet gaaf... hij werkt!

Is het nu zo dat men maar 1x per dag kan stemmen, of zolang hij er staat, maar 1x? Ik hoop het laatste.
Kan ik de poll ook een datum meegeven, tot wanneer ze kunnen stemmen? Bv. tot 17 dec. en dat dan de definitieve uitslag getoond wordt?

Gr. Naughtygirl
 
Laatst bewerkt:
Met de huidige code kan je 1x per 24 uur stemmen, zie het laatste argument van "setcookie". Je kan deze tijd natuurlijk verlengen tot bijv. een jaar. Overigens is dit ook makkelijk te omzeilen door de cookie(s) te verwijderen.

Met de huidige code kan je niet bepalen tot wanneer men kan stemmen. Al kan je dit wel toevoegen. Voeg een variabele toe met de datum tot wanneer je wilt dat men kan stemmen. Als je dan elke keer dat dit script wordt aangeroepen met date controleert of de huidige datum na de datum van die variabele is toon je alleen de resultaten.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan