header("Location") zeigt die aufrufende Seite an
Marcus Galka
- php
0 dedlfix0 Tom0 Marcus Galka0 Tom0 Marcus Galka0 Dennis0 Marcus Galka0 Dennis
0 Mike©
Hallo,
ich versuche mal mein Problem zu beschreiben:
Ich habe ein Formular, welches beim Absenden sich selbst aufruft und auf Eingabefehler überprüft. Dabei wird eine Session-Variable mit einem Wert gefüllt ("fehler" bzw. "keinfehler"). Wenn er einen Fehler findet, zeigt er dieselbe Seite mit der passenden Meldung an. Findet er keinen Fehler, so soll er umleiten auf eine andere Seite. An sich wohl kein Problem. Es funktioniert auch mit der Fehleranzeige. Findet er aber keine Fehler, so leitet er nicht zur richtigen Seite um, sondern nur auf sich selbst!
Wo habe ich hier meinen Denkfehler?
<?php
session_start();
if($_POST['submit']) {
if($_POST["nachname"]<3) {
$_SESSION["fehler"] = "fehler";
}
if($_SESSION["fehler"] != "fehler") {
header ("Location: http://www.avdienst.de/rechtschutz/rechtschutz_commit.php");
exit();
}
}
?>
Wahrscheinlich habe ich einen logischen Fehler.
Marcus
echo $begrüßung;
Wo habe ich hier meinen Denkfehler?
Versuche, ihn mit den üblichen Debugging-Methoden zu finden. Stelle das error_reporting aus E_ALL ein, stelle sicher, dass display_errors auf on steht. Kommen damit schon Hinweismeldungen? Wenn nicht, lass dir die Inhalte der beteiligten Variablen ausgeben: echo, var_dump() und print_r() sind dafür geeignete Mittel. Verfolge den Ablauf. Setzt in Verzweigungen Kontrollausgaben, um zu sehen, welcher Weg in deinem Script abgearbeitet wird.
echo "$verabschiedung $name";
Hallo dedlfix,
danke für die schnelle Antwort. Die Session-Variablen werden passend gefüllt. Auch die Kontrollausgaben habe ich schon hinter mir. Alles im grünen Bereich.
Kann es denn überhaupt irgendwie passieren, dass die header()-Funktion trotz korrekter Zielangabe falsch interpretiert wird?
Marcus
Moin Marcus,
danke für die schnelle Antwort. Die Session-Variablen werden passend gefüllt. Auch die Kontrollausgaben habe ich schon hinter mir. Alles im grünen Bereich.
Kann es denn überhaupt irgendwie passieren, dass die header()-Funktion trotz korrekter Zielangabe falsch interpretiert wird?
Sehr wahrscheinlich wird eine deiner IF-Bedinungen nicht so ausgeführt wie Du es erwartest. Setzte an den entsprechenden Punkten Echos.
regds
Mike©
Hallo Jungs,
da ich anscheinend etwas unkonzentriert war (hüstel), habe ich es jetzt aber mit Eurer (jawohl, in GROSS: Für mich seit "Ihr" ab jetzt Könige!) Hilfe geschafft. Ich Depp habe nicht die $_POST-Variablen abgefragt, sondern einfach die "inline"-Variablen ($nachname). Somit konnte das auch nicht so toll klappen. Alle Tests schienen soweit normal zu laufen. Aber nur, weil ich diesen Gehirnknoten hatte, der sich nicht lösen wollte. Oder, wie sagt man so schön: Ich sah den Wald vor lauter Bäumen nicht.
Danke an Eure Majestäten ;-)
Marcus
Hello,
Oder, wie sagt man so schön: Ich sah den Wald vor lauter Bäumen nicht.
Naja, kann auch schon mal vorkommen, dass man an an den nicht vorhandenen Häkchen dreimal vorbeiguckt. Ist mir heute auch gerade passiert...
Shit happens!
Sehr schön, dass Du eine Rückmeldung gegebn hast. Das hilft zumindest auch noch späteren Lesern.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Moin Marcus,
danke für die schnelle Antwort. Die Session-Variablen werden passend gefüllt. Auch die Kontrollausgaben habe ich schon hinter mir. Alles im grünen Bereich.
Noch ein Nachtrag. Wenn Deine Session Variable innerhalb der Session
einmal den Wert fehler hatte, dann wird der Wert immer "fehler" bleiben, da er nicht zurückgesetzt wird.
regds
Mike©
echo $begrüßung;
Kann es denn überhaupt irgendwie passieren, dass die header()-Funktion trotz korrekter Zielangabe falsch interpretiert wird?
Das Zusammenspiel zwischen PHP und deinem Browser lässt sich z.B. mit der livehttpheaders-Extension für den Firefox beobachten. (Für andere Browser gibt es ähnliche Add-Ons.)
echo "$verabschiedung $name";
Hello,
Hallo,
ich versuche mal mein Problem zu beschreiben:
Ich habe ein Formular, welches beim Absenden sich selbst aufruft und auf Eingabefehler überprüft. Dabei wird eine Session-Variable mit einem Wert gefüllt ("fehler" bzw. "keinfehler"). Wenn er einen Fehler findet, zeigt er dieselbe Seite mit der passenden Meldung an. Findet er keinen Fehler, so soll er umleiten auf eine andere Seite. An sich wohl kein Problem. Es funktioniert auch mit der Fehleranzeige. Findet er aber keine Fehler, so leitet er nicht zur richtigen Seite um, sondern nur auf sich selbst!
Wo habe ich hier meinen Denkfehler?
<?php
session_start();
if($_POST['submit'])
{
if($_POST["nachname"]<3)
{
$_SESSION["fehler"] = "fehler";
}
if($_SESSION["fehler"] != "fehler")
{
header ("Location: http://www.avdienst.de/rechtschutz/rechtschutz_commit.php");
exit();
}
}
?>
Wann wird denn eine neue Session begonnen?
Was steht in der Session im Feld ['fehler']?
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hallo,
@Tom:
in der Session-Variable steht halt "fehler" oder "keinfehler".
@dedlfix:
Danke für den Tipp mit der Firefox-Erweiterung. Wenn ich es richtig interpretiere, dann fordert der Header sich selber an. Bedeutet das, dass etwa die header()-Funktion mit der neuem Ziel gar nicht ausgeführt wird?
@Mike:
Die Session-Variable wird später zerstört werden. Wenn ich denn erst einmal auf mein Ziel kommen würde ;-)
@Alle drei:
Super danke für die schnelle Hilfestellung.
Marcus
Hello,
@Tom:
in der Session-Variable steht halt "fehler" oder "keinfehler".
Wann steht das da drin?
Wie lange steht es schon da drin?
Wird tatsächlich bei jedem Versuch eine neue Session gestartet, oder benutzt Du immer Dieselbe?
Da ich nicht finden konnte, wo Du "keinfehler" in die Session schreibst, nehme ich an, dass da immer "fehler" drin steht.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hallo Tom,
So sieht es im Moment aus:
session_start();
if($_POST['submit']) {
if($topic1=="Ja"||$topic2=="Ja" ||$topic3=="Ja" ||$topic4=="Ja" ||$topic5=="Ja" ||$topic6=="Ja" ||$topic7=="Ja" ||$topic8=="Ja" ||$topic9=="Ja"||$topic10=="Ja" ||$topic11=="Ja"||$topic12=="Ja") {
$_SESSION["fehler"] = "keinfehler";
} else {
$_SESSION["fehler"] = "fehler";
}
Trotzdem geht er nicht auf die andere Seite.
Zu den Sessions:
Ich dachte bisher, dass der Server merkt, ob schon eine Session gestartet wurde und startet diese nur einmal. Liege ich da falsch? Was sollte ich ändern?
Danke
Marcus
Hi Marcus,
if($topic1=="Ja"||$topic2=="Ja" ||$topic3=="Ja" ||$topic4=="Ja" ||$topic5=="Ja" ||$topic6=="Ja" ||$topic7=="Ja" ||$topic8=="Ja" ||$topic9=="Ja"||$topic10=="Ja" ||$topic11=="Ja"||$topic12=="Ja") {
$_SESSION["fehler"] = "keinfehler";
} else {
$_SESSION["fehler"] = "fehler";
}
Für Variablen, die nur zwei Zustände kennen, gibt es den Boolschen Datentyp. Warum verwendest du diesen nicht? Damit würdest du schon mal eine Fehlerquelle eliminieren, falls du dich nämlich bei einem Vergleich mal vertippst.
Ich dachte bisher, dass der Server merkt, ob schon eine Session gestartet wurde und startet diese nur einmal. Liege ich da falsch? Was sollte ich ändern?
Dann schau dir doch einfach mal die Dokumentation zu session_start() im PHP-Manual an. Insbesondere dieser Absatz
session_start() erzeugt eine Session oder nimmt die aktuelle wieder auf, die auf der
Session-ID basiert, die mit einer Anfrage, z.B. durch GET, POST oder ein Cookie,
übermittelt wurde.
sowie die darauf folgenden Beispiele sollten dich in deiner Meinung stutzig machen.
Viele Grüße,
~ Dennis.
Hallo Dennis,
session_start() erzeugt eine Session oder nimmt die aktuelle wieder auf, die auf der
Session-ID basiert, die mit einer Anfrage, z.B. durch GET, POST oder ein Cookie,
übermittelt wurde.
Wenn ich meine Daten von Seite zu Seite mittels eines Formulars weiterreiche, so wird doch die gleiche Session genommen, oder verstehe ich da etwas falsch?
Gruss,
Marcus
Hi Marcus,
session_start() erzeugt eine Session oder nimmt die aktuelle wieder auf, die auf der
Session-ID basiert, die mit einer Anfrage, z.B. durch GET, POST oder ein Cookie,
übermittelt wurde.Wenn ich meine Daten von Seite zu Seite mittels eines Formulars weiterreiche, so wird doch die gleiche Session genommen, oder verstehe ich da etwas falsch?
Würde, wenn du die Session starten würdest. ;-) Zur Verständlichkeit: Das „start” aus „session_start” bezieht sich nicht auf das erstmalige Einrichten einer Session-ID, sondern auf das Starten des Session-Systems von PHP. Solange du dieses „System” nicht startest kann keine Session begonnen oder fortgesetzt werden.
Aus den Beispiel-Scripten im Manual müsste das eigentlich auch ersichtlich werden ;-)
Viele Grüße,
~ Dennis.
Hallo Dennis,
ich starte die session fleissig von Seite zu Seite ;-)
Vielen Dank für diese Informationen.
Nun bin ich wieder mal etwas schlauer.
Liebe Grüße
Marcus
Moin Marcus,
@Mike:
Die Session-Variable wird später zerstört werden. Wenn ich denn erst einmal auf mein Ziel kommen würde ;-)
In dem von Dir gesposteten Code Schnipsel ist es gar nicht nötig eine
SESSION zu verwenden?
Das würde reichen:
<?php
if( $_POST['submit'] )
{
if( $_POST['nachname'] >= 3 )
{
header ("Location:http://www.avdienst.de/rechtschutz/rechtschutz_commit.php");
exit;
}
}
Und ausserdem, was ist den das für eine Bedingung?
Sollte das nicht lauten:
if( strlen($_POST['nachname']) >= 3 )
bzw. Dein Originalcode
if( strlen($_POST['nachname']) < 3 )
regds
Mike©
Hallo Mike,
da ist mir doch beim kopieren in den oberen Bereich einiges abhanden gekommen. Du hast natürlich recht (schande über mich :-( ).
Ich brauche die Session aber, um die Variablen auch bei Seitenwechsel im "Hinterkopf" zu haben, oder?
Marcus
Hi,
if( $_POST['nachname'] >= 3 )
Warum werden Leute mit kurzem Nachnamen hier ausgeschlossen?
Ich kenne mehrere Leute mit nur 2 Buchstaben im Familiennamen.
cu,
Andreas
Hello,
if( $_POST['nachname'] >= 3 )
Warum werden Leute mit kurzem Nachnamen hier ausgeschlossen?
Werden sie doch gar nicht. Es werden nur alle Leute ausgeschlossen, deren Nachname nicht mindesens mit 3 anfängt. "3com" wäre also ein zulässiger Nachname.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hi,
Werden sie doch gar nicht. Es werden nur alle Leute ausgeschlossen, deren Nachname nicht mindesens mit 3 anfängt. "3com" wäre also ein zulässiger Nachname.
Ja, ich gestehe, ich habe die falsche Zeile zitiert und die richtige weggelöscht.
Zitieren _wollte_ ich die:
if( strlen($_POST['nachname']) < 3 )
cu,
Andreas
Hello,
if( $_POST['nachname'] >= 3 ) ### wann ist denn nachname >= 3?
Meint Marcus vielleicht
if (isset($_POST['nachname']) and strlen $_POST['nachname'] >= 3) ### ?
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hallo,
natürlich meinte Marcus das (und er hat sich auch eben schon in Grund und Boden geschämt ;-)
Hi,
natürlich meinte Marcus das (und er hat sich auch eben schon in Grund und Boden geschämt ;-)
Das ist aber rücksichtslos! Wo sollen denn die Regenwürmer, Asseln, Ameisen usw. so plötzlich hin, wenn der Marcus da unvorangemeldet daherkommst?
cu,
Andreas