Letzte Aktion ausführen.

redX

Erfahrenes Mitglied
Ich brauche mal etwas Hilfe.

Also, ich Progge so ein Textbassiertes RPG in PHP. In OO und mit Smarty als Template System. Sodala. Jetzt zum Problem. Ich habe einen Event Handler. Dieser Prüft, ob man die angeforderte Seite aufrufen darf. Wenn nicht >>mach etwas<<. So, das alles funktioniert bis jetzt wunderbar.
Jetzt aber zu dem >>mach etwas<<. Man nehme mal an. Man ist in einem Laden mit Items die man kaufen kann. Was für Items auch immer. Jetzt klicke ich eins an und es wird gekauft, also Geld vom Konto abgebucht. Wenn jetzt der User irgend einen Fehler macht, und er einen illegalen Event auslöst, soll er eben wieder auf die alte Seite zurück. Jedoch hat er auf dieser Seite ja ein Item gekauft. Dies möchte er jetzt ja nicht noch einmal kaufen. Man soll also einfach den HTML Code anzeigen, aber nix mehr ausführen. Gibt es da irgend eine Einfache funktion? Ich dachte mir, dass man vieleicht mit dem Smarty Cache da etwas erreichen könnte?

Ich hoffe ich hab mich verständlich ausgedrückt :(

Gruss
X
 
Wie kann er beim Kaufen einen Illegalen Event aufrufen? Wenn er ein Item kauft sollte ja nur überprüft werden ob er genug Geld und vl Platz im Inventar hat.
 
Nö, hast glaub was falsch verstanden:

Step 1: Items aufliesten
Step 2: Item kaufen. -> User Item gutschreiben und Geld abziehen.
Step 3: Illegaler Event. -> Step 2 anzeigen aber nix ausführen..

So meinte ich das :)

Gruss
X

Edit:
Hey caramba12321
Nöö. Den vorherigen Event normal ausführen ist nicht so das Problem. Ich habe eifnach das Problem das es dem User dann nochmals ein Item gutschreibt und ihm Geld abzieht. Dies sollte es jedoch nicht noch einmal machen.... Es sollte nur die Seite anzeigen, aber nichts ausführen.
 
achso meinst du das :)
ja dann mach das doch so, das du einen parameter mit übergibtst und schreib dir eine schleife, wo denn die funktion reinkommt, wo du Geld abziehst usw. Du übergibtst dann einfach einen Wert der automatisch true; ist, wenn die kontrolle aber false; ergibt lässt du den Wert der Variable ( also den Parameter ) auf false; ändern. verstehst du?
 
Schleife? Meinst du eine Bedingung?
Könnte man so machen. Oder ich teile die Funktion, eifnach auf 2 Funktionen auf. Eine führt aus, die andere zeigt an. Also muss ich entweder zuerst ausführen und dann anzeigen aufrufen oder hald nur anzeigen. Ist das gleiche wie caramba12321 meinte...

Eine weitere Möglichkeit währe, das die letzte Seite immer in ein HTML File geschrieben wird. Muss man dann die letzte Seite nochmals aufrufen wird einfach das HMTL File angezeigt.

Oder drittens, vieleicht gibts eben was mit dem Smarty Cache zu machen. Weiss das jemand?

Hmpf.. welche der 3 Lösungen ist am "edelsten". Also besser gesagt am performantisten und am "saubersten"?

Gruss
X
 
Ähh ja Bedingung, ups das sieht kein guter Programmierer gern, böse Ausdrucksform, erinnert mich immer daran :
http://www.php-faq.de/q/q-terminologie-if.html :)

Also ich würde es in 2 oder mehrere Funktionen aufteilen. So hättest du später die Möglichkeit zum Beispiel einfach nur eine Ausgabe abzurufen, falls dir das aber zu umständlich ist ( was es ja eigendlich nicht ist ), würd ich dir empfehlen einfach eine Variable zu übergeben, wie ich oben halt schon sagte ;)
 
aso ich verstehe, falls ein illegales Event in Kraft tritt leitest du zurück auf die Seite wo davor ein Gegenstand gekauft wurd? Ich kenn mich bei Smarty zwar nicht aus aber die Variablen werden auch nochmals übergeben und deswegen wird der Gegenstand nochmals gekauft? Ich weis nicht obs was bringt aber ein header("Location : index.php?seite=$seite"); exit; hilft dabei nichts?
Wird dem User der Illegale Event angezeigt und is es unbedingt notwendig das er auf die Seite zurück geleitet wird?
 
Naja, irgend etwas muss man ja machen wenn ein illegaler event (klickt so böse :rolleyes: ) eintritt. Ich denke einfach es ist am besten für den User wenn man einfach wieder die letzte Seite sieht. Einfach eine Fehlermeldung wäre auch möglich. Aber wie weiter dann?

;)
 
naja wenn du noch eine Fehlermeldung ausgeben willst, übergibst du einfach noch eine Variable mit: könnte z.B. so aussehen:

Header im Übeprüfungsteil

PHP:
 header("Location: http://www.example.com?stop=1&error=1")

Anzeigedatei:

PHP:
if( isset($_GET["error"]) ) {

die("Fehlerhafte Aktion");

}

Beachte beim die();, das dies das Script auch beendet, also falls nach der IF-Bedienung noch etwas kommen sollte kein die(); benutzten ;)
 
Zurück