Zähler zurücksetzen, wenn Browser geschlossen wird

lenaMQ

Mitglied
Hallo liebe Leute

Ich bin ein PHP-Neuling und probiere mich grad an einem Projekt aus.
Es geht im Groben darum, dass eine Verlosungsaktion gestartet wird.

Die ersten 10 Seitenbesucher haben die Möglichkeit Freitickets zu gewinnen, indem sie auf einen Button klicken.

Also wenn der Zähler <= 10 ist, öffnet sich ein kleines Kontaktformular, in dem der User seine Emailadresse einträgt und diese absenden kann. Bei allen weiteren, d.h. zähler > 10, wird eine Informationsseite geöffnet, dass alle Tickets verlost sind.

(!) Nur mein Problem ist nun Folgendes :

:confused: Wie kann ich es realisieren, dass der Zähler dekrementiert
PHP:
$zahl--;
wird, wenn das Browserfenster mit dem Kontaktformular (absichtlich oder unabsichtlich) geschlossen wird? Reicht es denn aus, wenn ich eine if-Schleife schreibe, in der der Zähler um 1 vermindert wird, wenn der Absende-Button NICHT gedrückt wurde? :confused:

Ich bitte dringend um Hilfe!

LG Leni
 
Also habe jetzt nicht alles so verstanden ...

So erst einmal die Frage, sollen nur die Ersten 10 Besucher die Wahl haben
--> ist dies der Fall, überprüfst du z. B.: in einer Textdatei der Wert kleiner als 10 oder eben genau 10 ist. Ist das der Fall zeigst du dein Formular für die Verlosung mit Frage etc. an ... was du halt willst. gleichzeitig dann vielleicht noch mit einer Session prüfen.

Meine Idee wäre nicht die ersten 10 Seitenbesucher, sondern die ersten 10 "schlauen" Leute dei auf dein verlosungs Formular den Button anklicken. Dann schickst halt mit POST die Daten an die andere Seite. Dort überprüfst halt die ob Wert > 10 ist oder Wert == "10" und ist das der Fall eben die Weiterverarbeitung + Cookiespere für nicht nochmaliges Teilnehmen und ansonsten eben die ünglückliche Nachricht, dass schon alles verlost wurde.

Ansonsten, musst du mich bitte aufklären.
Weiß jetzt nicht ob du wissen willst ob gerade 10 oder mehr Leute oben sind oder eben ob es die ersten 10 Leute sind --> weiß ich das, kann ich dir nen Code zaubern
 
Also mal im Detail.

Vorerst bin ich leider überfordert mit "Sessions" und "Cookiesperre". Bin erst ne Woche daran PHP zu lernen und versuche etwas zu kombinieren, was ich schon kann.

In dem Fall: Besucherzähler.

Man muss sich Folgendes vorstellen:
Eine Partyseite auf dem die Verlosung angepriesen wird.
Hinweis-> Mit einem Klick zum freien Eintritt. Die ersten 10 Klicks gewinnen.
Darunter ein Button, der mit einer Php Seite verlinkt ist, in die ich einen counter mit IP-Sperre packe also in der Art:

PHP:
<?php
 
include("counter.php");
// Zählvariable =$zahl
 
if($zahl<=10)
include("formular.php");
else
echo "Leider sind alle Karten schon verlost...";
?>

Wenn man nun zu den ersten 10 Leuten gehört, bei dem sich das formular öffnet und man aus Versehen die Seite schließt oder weil man seine Email nicht abschicken will, muss ja $zahl wieder dekrementiert werden, damit alle Karten verlost werden können und der Zähler, somit diesen Klick "rückgängig" macht.

Ungefähr verstanden, was ich meine?
 
Wie wäre es denn damit... Jemand klickt den Button speicherst du Datum & Uhrzeit (oder einen Timestamp) in der Datenbank. Wenn jemand das Formular abschickt, speicherst du die Transaktion. Ansonsten gibst du es wieder frei nach X Minuten.

Tabelle Gutscheine:
Timestamp | Gespeichert
-----------------------------------
1111123343 | ja
1111134546 | nein

Wenn du in dem Script mit dem Zähler die Anzahl der einträge zählst, anstatt den selber hochzuzählen, könntest du bei 10 Transaktionen den Zugriff auf das Formular unterbinden. Gleichzeitig solltest du immer prüfen, ob denn jemand nicht gespeichert hat, z.B. nach 5 Minuten. Wenn "Gespeichert" = nein und aktueller Timestamp - 5*60 = wahr dann lösch den Eintrag. Wenn du 10 Einträge mit "ja" hast, sind alle vergeben.
 
Also meinst du ich könnte zählen, wie oft eine Mail abgeschickt wurde, anstatt den Zugriff auf die Seite überhaupt? Und wenn 10 abgeschickt wurden, dann wird bei $zahl>=10 nicht mehr zugelassen, dass man eine Mail schreiben kann, sondern gleich das echo "Leider sind alle Karten schon verlost..."; anzeigen lassen?

Wenn ja, wie mache ich das?
 
Ja so in die Richtung geht das schon :) Das ist zwar die meiner Meinung nach "leichteste" Möglichkeit, ohne Sessions oder so auszukommen, aber sie ist schon schwierig. Du musst ja die Daten aus dem Formular irgendwo speichern.

Anscheined schickst du ja direkt eine e-Mail los.
Zusätzlich könntest du die auch in der DB speichern (also nicht so wie oben, das ist zu komplex, das hier wird einfacher :) )

Wir nehmen die Tabelle "Gutscheine", die folgende Spalten enthalten soll:
ID
Vorname
Nachname
Straße
PLZ
Ort

Wenn du die Daten aus dem Formular da drin abspeicherst, kannst du mit einer SQL Abfrage feststellen, wie viele Einträge vorhanden sind:
SQL:
SELECT COUNT(*) FROM gutscheine;
oder du verwendest mysql_num_rows(); - je nach Vorliebe ;)
Dann weißt du wie viele Gutscheine schon vergeben sind.

ACHTUNG:
Wenn jemand 2 das Formular aufrufen, während 9 Einträge existieren, musst du vor dem Speichern ebenfalls prüfen, wie viele Einträge vorhanden sind. Sonst könnten sich 11 Anmelden!

Der Rest dreht sich dann nur noch um Formulare, POST-Variablen und Datenbankzugriffe mit PHP.


Gruß Radhad
 
MMh.. Also mit Datenbanken kenn ich mich ja nun garnicht aus.
Weiß ja noch nicht mal, wie ich dann die Daten in die Datenbank schreiben lassen kann :rolleyes:
Da soll ja nichts großartig gespeichert werden. Der User soll bloß seine Emailadresse an den Webseitenbesitzer schicken. :( und mich jetzt in SQL reinfuchsen? Hilfe da werd ich glaub bis Ende der Woche verrückt. Keine Ahnung mit was ich wo Anfragen starten kann/muss.

Es muss sich leider im Moment auf eine "leichte", wenn auch komplexe Lösung belaufen, die ich vllt heut noch verstehe.

Wie gesagt: absolut noch grün hinter den Ohren! :confused:
 
Hi,

du kannst auch mit Textdateien arbeiten, da fummelst du dich evt. schneller ein!

Gruß BSA
 
Obwohl vllt sollte ich mich damit mal plagen, da man mit SQL ja die Zugriffe synchronisieren kann, stimmts?

Muss ich mal recherchieren. Wenn du meinst, dass das die einfachere Lösung ist, dann glaub ich dir mal und setz mich mal hinter SQL.
Obwohl ich erstmal herausfinden muss, wie ich das auf dem Webserver einrichten kann.

:google:
 
Zurück