PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Umfrage mit Sperre


stivi
18.05.2008, 14:35:58
So mal wieder n Noob in Sachen php hier.

Ich hab mir den Code für die Umfrage von selfphp rüber kopiert und die wichtigsten Dinge erstmal so abgeändert wie ich sie gerne hätte.

Es klappt auch alles wunderbar bis auf die Sperre..

So sieht jetzt mein Code aus:

<?php
if (isset($_POST["ergebnis"])) {
setcookie("abgestimmt","ja",time()+60*60*3);
}

$thema = "Hitparade";
$auswahl = array("Super","Sehr Gut","Gut","Naja","Schlecht");
$anzahl = count($auswahl);

?><h3><?php echo $thema ?></h3>
<form method='post' action='<?php echo $PHP_SELF; ?>'>
<p>
<?php

foreach ($auswahl as $key=>$eintrag) {
echo "<input type='radio' name='ergebnis' value='$key'> $eintrag<br>\n";
}

?>
</p>
<?php
if (empty($_COOKIE["abgestimmt"]) && !isset($_POST["ergebnis"])) {

// Submit nur zeigen, wenn Formular noch nicht abgeschickt wurde
echo "<input type='submit' value='Abstimmen'>";

} else {
echo "<p>Danke für deine Stimme!</p>\n";

// Formular abgeschickt? Aber bisher noch nicht abgestimmt?
if (empty($_COOKIE["abgestimmt"]) && isset($_POST["ergebnis"])) {

// Dateiname in Variable speichern
$datei="daten/stimmen.txt";

// Datei vorhanden?
if (file_exists($datei)) {
$fp=fopen($datei,"r+");
} else {
$fp=fopen($datei,"w");
}

// Datei einlesen
$stimmen=fread($fp,filesize($datei));

// String aus Datei in Array zerlegen
$stimmen=explode(",",$stimmen);

// Der gewählte Punkt wird um 1 erhöht!
$stimmen[$_POST["ergebnis"]]++;

// Stimmen in einem String zusammensetzen
for ($i=0;$i<$anzahl;$i++) {
$total .= $stimmen[$i] .",";
}

// Neuen String in Datei schreiben
rewind($fp);
fputs($fp,$total);
fclose($fp);
}
}
?>
</form>

Wenn ich das ganze richtig verstanden habe müsste es ja danach eine Sperre von 3 Stunden geben bis man wieder abstimmen kann..?

Wenn ich allerdings den Link neu öffne (Nach z.B 5 Sekunden) kann ich schon wieder abstimmen.

Habe es auch mit dem vorgegebenen Beispiel von 60*60*24*30 versucht, was laut Beschreibung 30 Tage wäre. Auch das hat nicht geklappt.

Kann mir jemand sagen wo hier der Wurm drinn ist?

Schonmal danke im Voraus


PS: Die Umfrage findet ihr hier:

www.radio-powerplay.org/hitparade_umfrage.php

doppelklick
18.05.2008, 17:11:39
Hallo stivi und willkommen im Forum.

Ich habe Deinen Code getestet und er funktioniert einwandfrei.
Hast Du vielleicht in Deinem Browser Cookies deaktiviert?

Bitte benutze in Zukunft die Forum-Tags für Deinen Code.

doppelklick

stivi
18.05.2008, 19:05:07
Hallo stivi und willkommen im Forum.

Ich habe Deinen Code getestet und er funktioniert einwandfrei.
Hast Du vielleicht in Deinem Browser Cookies deaktiviert?

Bitte benutze in Zukunft die Forum-Tags für Deinen Code.

doppelklick

Hi doppelklick

Danke für deine Mühe.


Ne, cookies sind akzeptiert (Firefox).

Merkwürdig, aber wenn du sagst dass es geht stell ich das ding dann mal ofiziell on.

Hast du auch direkt bei meinem Link den ich gepostet habe geschaut ob du gleich wieder voten kannst oder hast du ihn einfach selber schnell geuploadet?

gruss und danke
stivi

doppelklick
18.05.2008, 19:16:00
Ich habe es bei mir lokal getestet und da geht es einwandfrei mit 60 Sekunden Sperre.

Auf Deiner Website kann ich sofort wieder abstimmen.

Wann setzt Du das Cookie?
Das muss unbedingt gesetzt werden bevor irgendwelcher Code an den Browser gesendet wird. Ich denke dass ist auf Deiner Seite nicht der Fall.

Teste nur mal folgenden Code:
test.php
<?php
if (isset($_POST["ergebnis"]))
{
setcookie("abgestimmt","ja",time()+60);
}

$thema = "Hitparade";
$auswahl = array("Super","Sehr Gut","Gut","Naja","Schlecht");
$anzahl = count($auswahl);

?><h3><?php echo $thema ?></h3>
<form method='post' action='<?php echo $PHP_SELF; ?>'>
<p>
<?php

foreach ($auswahl as $key=>$eintrag) {
echo "<input type='radio' name='ergebnis' value='$key'> $eintrag<br>\n";
}

?>
</p>
<?php
if (empty($_COOKIE["abgestimmt"]) && !isset($_POST["ergebnis"])) {

// Submit nur zeigen, wenn Formular noch nicht abgeschickt wurde
echo "<input type='submit' value='Abstimmen'>";

} else {
echo "<p>Danke für deine Stimme!</p>\n";

// Formular abgeschickt? Aber bisher noch nicht abgestimmt?
if (empty($_COOKIE["abgestimmt"]) && isset($_POST["ergebnis"])) {

// Dateiname in Variable speichern
$datei="daten/stimmen.txt";

// Datei vorhanden?
if (file_exists($datei)) {
$fp=fopen($datei,"r+");
} else {
$fp=fopen($datei,"w");
}

// Datei einlesen
$stimmen=fread($fp,filesize($datei));

// String aus Datei in Array zerlegen
$stimmen=explode(",",$stimmen);

// Der gewählte Punkt wird um 1 erhöht!
$stimmen[$_POST["ergebnis"]]++;

// Stimmen in einem String zusammensetzen
for ($i=0;$i<$anzahl;$i++) {
$total .= $stimmen[$i] .",";
}

// Neuen String in Datei schreiben
rewind($fp);
fputs($fp,$total);
fclose($fp);
}
}
?>
</form>

doppelklick

stivi
18.05.2008, 20:05:32
Jop, der Code allein geht..

Dürfte also wohl drann liegen dass da vorher noch ne Google-Anzeige (auch php) vorher im Code drinn is?


Werde das gleich mal testen.

stivi
18.05.2008, 20:21:08
Hmm hab jetzt von den beiden Google Anzeigen (Javascript), der Navigation (Ebenfalls Javascript), der Statustanzeige des Radios (nur n iFrame) dem Link zu meiner CSS Datei und sogar dem Banner der oberhalb stand alles raus gelöscht, ohne Erfolg..


Keine Ahnung wo da der Wurm drinn ist. :S

Nachtrag:
Hab da noch was bemerkt..

Ich arbeite mit Dreamweaver, da wird ja in der Vorschau einfach ein kleines php Zeichen angezeigt..


Wenn ich nur den Code ab, ohne was, sind da 3 php Zeichen, habe ich aber drum herum den Rest meiner Seite kommen da 4 solche Zeichen.. Vieleicht erklärt das irgendwas? :S
Jop, bin am verzewifeln ^^

doppelklick
18.05.2008, 20:59:57
Das Cookie muss auf der Seite gesetzt werden noch bevor irgend ein Code ausgegeben wird also noch vor:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html dir="ltr" lang="de">
<head>Schick doch mal eine PM mit Deiner Datei.

doppelklick

stivi
18.05.2008, 21:32:59
Das Cookie muss auf der Seite gesetzt werden noch bevor irgend ein Code ausgegeben wird also noch vor:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html dir="ltr" lang="de">
<head>Schick doch mal eine PM mit Deiner Datei.

doppelklick


hmm aber dann steht das ding ja nicht mehr da wo ichs will..? :S

Jo kann dir das File gerne schicken, dazu bräucht ich aber ne E-Mail Addy oder so, geht ja glaub ich hier per PN net?

doppelklick
19.05.2008, 00:06:35
Du musst den Code aufteilen:

<?php
if (isset($_POST["ergebnis"])) {
setcookie("abgestimmt","ja",time()+60*60*3);
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html dir="ltr" lang="de">
<head>
...
</head>
<body>
...
...
<?php
$thema = "Hitparade";
$auswahl = array("Super","Sehr Gut","Gut","Naja","Schlecht");
$anzahl = count($auswahl);

?><h3><?php echo $thema ?></h3>
<form method='post' action='<?php echo $PHP_SELF; ?>'>
<p>
<?php

foreach ($auswahl as $key=>$eintrag) {
echo "<input type='radio' name='ergebnis' value='$key'> $eintrag<br>\n";
}

?>
</p>
<?php
if (empty($_COOKIE["abgestimmt"]) && !isset($_POST["ergebnis"])) {

// Submit nur zeigen, wenn Formular noch nicht abgeschickt wurde
echo "<input type='submit' value='Abstimmen'>";

} else {
echo "<p>Danke für deine Stimme!</p>\n";

// Formular abgeschickt? Aber bisher noch nicht abgestimmt?
if (empty($_COOKIE["abgestimmt"]) && isset($_POST["ergebnis"])) {

// Dateiname in Variable speichern
$datei="daten/stimmen.txt";

// Datei vorhanden?
if (file_exists($datei)) {
$fp=fopen($datei,"r+");
} else {
$fp=fopen($datei,"w");
}

// Datei einlesen
$stimmen=fread($fp,filesize($datei));

// String aus Datei in Array zerlegen
$stimmen=explode(",",$stimmen);

// Der gewählte Punkt wird um 1 erhöht!
$stimmen[$_POST["ergebnis"]]++;

// Stimmen in einem String zusammensetzen
for ($i=0;$i<$anzahl;$i++) {
$total .= $stimmen[$i] .",";
}

// Neuen String in Datei schreiben
rewind($fp);
fputs($fp,$total);
fclose($fp);
}
}
?>
</form>


Hab Dir ne PN geschickt

doppelklick

stivi
19.05.2008, 23:23:55
Muss dir das File net mehr schicken.

Hab es so wie du oben geschrieben hast versucht..


Und es funktioniert!


Vielen, vielen Dank!
Echt genial.