Bin echt begeistert, wie einfach man mit php Sachen machen kann wie automatisch mails versenden, Bilder uploaden, passwortgeschütze Bereiche anlegen, Gästebuch, DB, usw... alles in den letzten 3 Tagen ausprobiert.
Aber ein paar Problemchen hab ich noch:
1)
Hab nen einfachen Zähler gebaut, der die Anzahl der Seitenaufrufe in einem File speichert. Nun möchte ich gerne verhindern, daß er bei einem reload auch hochzählt.
Kann man irgendwie abfragen, ob der reload-Button des Browsers gedrückt wurde? Hab da nix zu gefunden...
Oder wie kann man das eleganter lösen? Mit Sessions? Hab das probiert, hat aber irgendwie nicht funktioniert.
2)
Sessions:
a)
Wenn ich den Zähler mit einer Session realisiere, krieg ich da nicht Probleme, weil der Zähler sowohl für anonyme Gäste als auch für angemeldete Benutzer funktionieren soll?
Wenn ich mich z.B. auslogge und die Session beendet wird, dann reloade, hab ich ja auch eine Session-Variable gelöscht, die mir sagt, daß ich schon mal auf der Seite war... muß ich da beim Ausloggen also nur z.B. die User-Variable löschen, oder wie mach ich das am geschicktesten? Kann man vielleicht gleichzeitig verschiedene Sessions laufen lassen?
b)
Ich hab das Problem, daß mein Browser in Sessions manchmal meckert, wenn man den Back-Knopf in Safari drückt ('Formular nochmal absenden?') und beim Reload-Knopf heißt es dann plötzlich 'Benutzer oder Passwort falsch!', obwohl ich mich gar nicht ausgeloggt habe. Seltsam dabei ist, daß beim Reload z.B. von 'privat.php' nicht die Fehlermeldung 'Bitte einloggen!' erscheint, wie es auf selbiger steht. Die Meldung 'Benutzer oder Passwort falsch!' gehört eigentlich zur Seite 'verify.php', die einen vom Login zu 'privat.php' bringt.
Mit firefox funktioniert alles, wie ich es mir vorstelle.
Irgend welche Ideen dazu?
3)
Gästebuch:
Ich saß gestern ewig dran, bis das mit dem Zeilenumbruch funktioniert hat. Ich hab mangels DB die Einträge aus einer Textarea in ein File gespeichert. Dort hatte ich entweder 2 oder 0 statt einem Zeilenumbruch, manchmal sah es im File auch korrekt aus, aber die fgets()-Funktion hat doch nicht die Zeilenumbrüche erkannt, usw...
Nun hab ich es so gelöst:
$text aus der Textarea:
- Alle \r werden in \n umgewandelt.
- Alle \n\n werden in \n umgewandelt.
Der Text wird dann mit explode("\n",$text) in Zeilen zerlegt
und mit fputs($file,$textzeile[$i]."\n") ausgegeben.
So funktioniert es bei mir.
Ich habe aber die leise Ahnung, daß dies wieder ganz anders aussieht, wenn man mit einem Win-Computer Text eingibt. Kann ich leider nicht testen, hab nen Mac.
Wie macht man sowas am elegantesten?
4)
Dateien:
Nur lesen mit 'r' krieg ich hin, kein Ding.
Nur Text anhängen mit 'a' auch.
Aber Text verändern?
Hab z.B. ein user.data-File, wo eine Zeile so aussieht:
<user>#<passwort>#<zugangslevel>#<mailadresse>
Wenn ich jetzt ein Passwort ändern will, muß ich erst Zeile für Zeile nach dem User suchen und dann in der selben Zeile das alte durch das neue Passwort ersetzen.
Ich krieg es aber einfach nicht hin, gleichzeitig zu lesen und zu schreiben!
Wenn ich im 'w'-Modus bin, wird scheinbar jedesmal 'user.data' gelöscht oder überschrieben, denn wenn ich es mit einem Editor öffne, starrt mich die gähnende Leere an. Das ist wohl auch der Grund, weshalb fgets() nichts zurückgibt, auch wenn davor noch kein fputs() oder irgendein anderer schreibender Befehl kam... Ist das normal?
Ich hab das jetzt so gelöst, daß ich mit 'r' das gesamte File in 2-dimensionale Arrays einlese, diese bearbeite und dann mit 'w' alles komplett neu schreibe.
Das muß doch einfacher gehen!
So. Mir war, als ob ich noch ein ungelöstes Problem hätte, fällt mir aber grad nicht ein.
Reicht ja auch erst mal. Vielleicht kommt später noch was dazu
Bin für jede Hilfe dankbar!
Aber ein paar Problemchen hab ich noch:
1)
Hab nen einfachen Zähler gebaut, der die Anzahl der Seitenaufrufe in einem File speichert. Nun möchte ich gerne verhindern, daß er bei einem reload auch hochzählt.
Kann man irgendwie abfragen, ob der reload-Button des Browsers gedrückt wurde? Hab da nix zu gefunden...
Oder wie kann man das eleganter lösen? Mit Sessions? Hab das probiert, hat aber irgendwie nicht funktioniert.
2)
Sessions:
a)
Wenn ich den Zähler mit einer Session realisiere, krieg ich da nicht Probleme, weil der Zähler sowohl für anonyme Gäste als auch für angemeldete Benutzer funktionieren soll?
Wenn ich mich z.B. auslogge und die Session beendet wird, dann reloade, hab ich ja auch eine Session-Variable gelöscht, die mir sagt, daß ich schon mal auf der Seite war... muß ich da beim Ausloggen also nur z.B. die User-Variable löschen, oder wie mach ich das am geschicktesten? Kann man vielleicht gleichzeitig verschiedene Sessions laufen lassen?
b)
Ich hab das Problem, daß mein Browser in Sessions manchmal meckert, wenn man den Back-Knopf in Safari drückt ('Formular nochmal absenden?') und beim Reload-Knopf heißt es dann plötzlich 'Benutzer oder Passwort falsch!', obwohl ich mich gar nicht ausgeloggt habe. Seltsam dabei ist, daß beim Reload z.B. von 'privat.php' nicht die Fehlermeldung 'Bitte einloggen!' erscheint, wie es auf selbiger steht. Die Meldung 'Benutzer oder Passwort falsch!' gehört eigentlich zur Seite 'verify.php', die einen vom Login zu 'privat.php' bringt.
Mit firefox funktioniert alles, wie ich es mir vorstelle.
Irgend welche Ideen dazu?
3)
Gästebuch:
Ich saß gestern ewig dran, bis das mit dem Zeilenumbruch funktioniert hat. Ich hab mangels DB die Einträge aus einer Textarea in ein File gespeichert. Dort hatte ich entweder 2 oder 0 statt einem Zeilenumbruch, manchmal sah es im File auch korrekt aus, aber die fgets()-Funktion hat doch nicht die Zeilenumbrüche erkannt, usw...
Nun hab ich es so gelöst:
$text aus der Textarea:
- Alle \r werden in \n umgewandelt.
- Alle \n\n werden in \n umgewandelt.
Der Text wird dann mit explode("\n",$text) in Zeilen zerlegt
und mit fputs($file,$textzeile[$i]."\n") ausgegeben.
So funktioniert es bei mir.
Ich habe aber die leise Ahnung, daß dies wieder ganz anders aussieht, wenn man mit einem Win-Computer Text eingibt. Kann ich leider nicht testen, hab nen Mac.
Wie macht man sowas am elegantesten?
4)
Dateien:
Nur lesen mit 'r' krieg ich hin, kein Ding.
Nur Text anhängen mit 'a' auch.
Aber Text verändern?
Hab z.B. ein user.data-File, wo eine Zeile so aussieht:
<user>#<passwort>#<zugangslevel>#<mailadresse>
Wenn ich jetzt ein Passwort ändern will, muß ich erst Zeile für Zeile nach dem User suchen und dann in der selben Zeile das alte durch das neue Passwort ersetzen.
Ich krieg es aber einfach nicht hin, gleichzeitig zu lesen und zu schreiben!
Wenn ich im 'w'-Modus bin, wird scheinbar jedesmal 'user.data' gelöscht oder überschrieben, denn wenn ich es mit einem Editor öffne, starrt mich die gähnende Leere an. Das ist wohl auch der Grund, weshalb fgets() nichts zurückgibt, auch wenn davor noch kein fputs() oder irgendein anderer schreibender Befehl kam... Ist das normal?
Ich hab das jetzt so gelöst, daß ich mit 'r' das gesamte File in 2-dimensionale Arrays einlese, diese bearbeite und dann mit 'w' alles komplett neu schreibe.
Das muß doch einfacher gehen!
So. Mir war, als ob ich noch ein ungelöstes Problem hätte, fällt mir aber grad nicht ein.
Reicht ja auch erst mal. Vielleicht kommt später noch was dazu
Bin für jede Hilfe dankbar!
Kommentar