$_POST wird nicht übertragen/ausgelesen

Hallo.
Problem: $_POST/$_REQUEST wird nicht ausgelesen.
Ich habe diese Formular:

[code]
User:
Password:
Remember me
<input type=‘hidden’ name=‘ref’ value=’".$_SERVER[‘REQUEST_URI’]."’ />

[/code]

Wenn ich “user” und “pw” eingebe und es abschicke kommt es hierhin:

if($_POST['loginname']!=='' && $_POST['loginpw']!==''){ // mache was } else { // mache was anderes }

Hier macht er leider “was anderes” und nicht “was”.
Komisch - wenn ich davor var_dump($_POST); mache, bekomme ich unter anderem:

[“loginname”]=> string(7) “user” [“loginpw”]=> string(2) “pw” [“ref”]=> string(17) “hierkommeicherURL”

Die Daten werden also übertragen.
Ich bekomme aber auch als Notice: Undefined Index.
Nun aber das paradoxe: Auf dem Localhost klappt es(Apache + PostGreSQL + PHP 5.3)
nur hier bei bplaced klappt es nicht.

Woran liegt das?

Gruß, Phil

Das ist auf Basis der gelieferten Informationen nicht erkennbar.

Wenn var_dump am Scriptanfang(?) das erwartete liefert, später aber irgendwann die entsprechenden Indices in $_POST nicht mehr vorhanden sind - dann sind sie vermutlich irgendwann im Scriptverlauf entfernt, oder $_POST komplett gelöscht worden.

Um diese Stelle zu finden, solltest du schrittweise deine Kontrollausgabe per var_dump weiter nach unten setzen. Dann, wenn die Einträge in $_POST “verschwinden”, dann schaust du dir den direkt darüber stehenden Code genauer an.

[quote=“philz90”]if($_POST['loginname']!=='' && $_POST['loginpw']!==''){ // mache was } else { // mache was anderes }l[/quote]
müsste das net != statt !== sein :smiley:
!== oder auch === überprüft einen booleanischen Wert^^ Denn es gibt Funktionen die auch so 0 oder “” statt dem boolsche false zurückgeben. Dort wird dies auch genutzt^^ Aber für die Überprüfung eines Strings wäre != oder == besser^^

:smiley: :smiley: das ist ja der Witz - das was du da siehst ist die stellenweise Ausgabe.
Das var_dump() ist unmittelbar davor!!

var_dump($_POST); if(...){}

Nein, an dem !== liegt es nicht. !== /=== überprüft nicht nur boolsch sondern generell den Typ.

Sprich
$i=1;
if($i===“1”) -> false
if($i===1) -> true

Bei == würde PHP darauf “scheissen”.

[quote=“philz90”]:smiley: :smiley: das ist ja der Witz - das was du da siehst ist die stellenweise Ausgabe.
Das var_dump() ist unmittelbar davor!!

var_dump($_POST); if(...){}[/quote]
OK, das ist seltsam.

Sind ‘loginname’ und ‘loginpw’ wirklich die Original-Indices/Feldnamen, die du verwendest? (Ich frage nur zur Sicherheit, um weiteren Missverständnissen vorzubeugen.)
Wenn die Indices irgendwelche “Sonderzeichen” enthalten würden - dann könnte es vielleicht noch ein Problem mit der Zeichenkodierung sein. In dem Sinne, dass du dein Script vielleicht in einer bestimmten Kodierung abgespeichert hast, und die Formulardaten aber in einer anderen geliefert werden …

Ist nur ein Schuss ins Blaue … wenn’s daran auch nicht liegt, kannst du mal eine Adresse nennen, wo man sich das ganze anschauen kann?

Das sind die Original-Daten - Copy&Paste hier hierein.
Die Dateien werden ausserdem UTF-8 gespeichert + UTF-8 übertragen und haben eine UTF-8 Ausgabe (meta-tag + php-header). Selbst die Datenbankkodierung ist UTF-8.

Adresse bringt dir nichts, er macht dann einfach “was anderes” und lenkt auf “Sie haben vergessen Daten einzugeben” weiter…

Und ein angepasstes Beispiel-Script, welches eben nicht weiterleitet, sondern nur Testausgaben und PHP-Fehlermeldungen zeigt …?
Wenn du bspw. bei dem problematischen if einfach sofort am Beginn der Anweisungsblöcke für wahr/falsch jeweils mal ein die oder exit reinhaust - dann sollte man zumindest Testausgaben und Fehlermeldungen sehen können (sofern die Weiterleitung nicht schon vorher stattfindet).

Und sonst vielleicht einen Testaccount anlegen, so dass man “richtige” Logindaten ins Formular eingeben und dann das Ergebnis betrachten kann.

Achtung jetzt wird es richtig strange.

Die Daten kommen auf einmal an.
Auch unmittelbar davor.
Die IF-Abfrage greift trotzdem zu und der Rest des Skripts läuft danach trotzdem weiter und erst am ENDE leitet er zu der in der IFAbfrage vorhanden Weiterleitung weiter.

if(strlen($_POST["loginname"])<1 || strlen($_POST["loginpw"])<1){ tools::goNext("/Auth/show/Check/Login/missingData"); }

public static function goNext($goto){ $homeuri="http://example.com/"; header("Location: ".$homeuri.ltrim($goto,"/"));exit(); }

Also so siehts aus:

[code]if(nicht vorhanden) {
// leite Weiter X
}

// Skript
// Leite Weiter Y
[/code]

Und er macht:
// Skript
// Leite weiter X

Unglaublich…

so - jetzt bin ich echt am Ende.

echo strlen($_POST["loginname"])." . ".strlen($_POST["loginpw"])." 1"; if(strlen($_POST["loginname"])<1 || strlen($_POST["loginpw"])<1){ echo strlen($_POST["loginname"])." . ".strlen($_POST["loginpw"])." 2"; }

Folgende Ausgabe sollte bei einer Eingabe von “user” “pw” erschienen:
4 . 2 1
4 . 2 2

Aber wisst ihr was erscheint?
4 . 2 1

Mehr nicht.
D.h. praktisch: In der If-Abfrage würden $_POST und Dingens überschrieben.
Was aber nicht der Fall ist - denn - was nach dem Abschnitt oben kommt, wird weiter ausgeführt…

OH MEIN GOTT - gelöst.

-.- Ich habe einfach nen Status 301 vorgeschickt =D… ich Idiot…

[quote=“philz90”]echo strlen($_POST["loginname"])." . ".strlen($_POST["loginpw"])." 1"; if(strlen($_POST["loginname"])<1 || strlen($_POST["loginpw"])<1){ echo strlen($_POST["loginname"])." . ".strlen($_POST["loginpw"])." 2"; }

Folgende Ausgabe sollte bei einer Eingabe von “user” “pw” erschienen:
4 . 2 1
4 . 2 2[/quote]
Wieso sollte die erscheinen?
$_POST[“loginname”] ist 4 Zeichen “lang”, $_POST[“loginpw”] 2 - das hast du gerade zur Kontrolle ausgegeben.

Anschliessend fragst du ab, ob einer der beiden Werte vielleicht kürzer als 1 Zeichen ist - das ist aber laut Kontrollausgabe gar nicht der Fall, also sollte die zweite Zeile doch wohl nicht erscheinen …?

[quote]Aber wisst ihr was erscheint?
4 . 2 1

Mehr nicht.[/quote]
Und was ausser “works as designed” soll man dazu jetzt sagen? :slight_smile:

Nö, hier ziehst du jetzt definitiv falsche Schlüsse, möchte ich meinen.

Obiger Code tut offenbar genau das, was er soll - wieso du etwas anderes von ihm erwartest, ist mir unklar.

[edit] Aha, OK - ahnte ich doch, das “Rätsel” musste irgendeine “Lösung” haben, die im bisher gezeigten Code noch nicht ersichtlich war. [/edit]

Okay irgendwie besteht das Problem immernoch.
Wie kann das sein?

public static function goNext($goto){ header("Status: 301"); header("Location: http://example.com/".ltrim($goto,"/")); exit(); }

if(strlen($_POST["loginname"])<1 || strlen($_POST["loginpw"])<1){ tools::goNext("/Auth/show/Check/Login/missingData"); }

Wenn ich vor der If-Abfrage strlen ausgeben lasse, werden beide ausgegeben.
wenn ich es in die If-Abfrage packe, dann nicht.

Er redirected, obwohl die $POST daten übertragen werden.

Ich bin echt verzweifelt.