ubuntuusers.de

Apache2-Server Problem: $_POST-Variable immer leer

Status: Gelöst | Ubuntu-Version: Ubuntu 10.04 (Lucid Lynx)
Antworten |

Bl4ckbyt3

Anmeldungsdatum:
17. Oktober 2009

Beiträge: 9

Hallo,

ich habe mir vor 2 Tagen Ubuntu installiert, gestern den Apache-Server sowie eine Mysql-Datenbank installiert. Jetzt wo ich mit der lokalen Entwicklung anfangen wollte fällt mir auf das generell die $_POST-Variable leer ist.

In dem Skript gibt es ein Formular, welches per POST versendet wird. Verschrieben sollte ich mich nicht haben - was die $_POST-Variable angeht. Das komische, was mich auch ziemlich wundert, ist dass das Skript unter Windoof wunderbar ging - was ja dann auf einen Konfigurations-Fehler schließen lässt.

Unten findet ihr 2 Links, einmal zu meiner aktuellen php.ini sowie zu dem PHP-Code:

php.ini - http://pastebin.com/04gtzucU PHP-Code - http://pastebin.com/RNPSdsRM

xabbuh Team-Icon

Anmeldungsdatum:
25. Mai 2006

Beiträge: 6411

Was sagt denn ein var_dump($_POST), wenn das Formular abgeschickt wurde?

Bl4ckbyt3

(Themenstarter)

Anmeldungsdatum:
17. Oktober 2009

Beiträge: 9

"array(0) { }" Gibt var_dump($_POST) aus ☹

Die $_GET-Variable kann ich mir mit var_dump() ausgeben lassen, da scheinen die Daten "anzukommen". Nur sobald es sich um die $_POST-Variable/Daten dreht geht irgendwie nichts.

Es wäre wirklich super wenn mir jemand weiterhelfen könnte.!

Solltet ihr irgendwelche Konfigurations-Dateien euch ansehen wollen so werde ich diese zur Verfügung stellen.

xabbuh Team-Icon

Anmeldungsdatum:
25. Mai 2006

Beiträge: 6411

Aber im Log des Apache steht die Anfrage als POST-Request?

Kryptychon

Anmeldungsdatum:
7. Juni 2009

Beiträge: 29

Wohnort: Freiburg

Hallo!

Dein Code sieht so aus:

<form action="<?php echo  cConfig::IntHost . (isset($_GET['ref'])  && !empty($_GET['ref']) ? htmlentities(str_replace("://","",$_GET['ref'])) :  "/");  ?>" method=POST>

Da muss bei method aber definitiv so aussehen:

<form action="<?php echo  cConfig::IntHost . (isset($_GET['ref'])  && !empty($_GET['ref']) ? htmlentities(str_replace("://","",$_GET['ref'])) :  "/");  ?>" method="POST">

sprich, ohne Anführungzeichen wird das Tag nicht korrekt erkannt, Browser fällt auf GET zurück und bei dir steht nichts im $_POST.

Gruß Ruben

Bl4ckbyt3

(Themenstarter)

Anmeldungsdatum:
17. Oktober 2009

Beiträge: 9

@xabbuh:

So sieht der Log-Eintrag im Access-Log aus:

127.0.0.1 - - [25/May/2010:23:49:15 +0200] "POST / HTTP/1.1" 302 537 "http://localhost/login/" "Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3"

Um auf Kryptychon's Aussage zurückzukommen: Ich habe das Formular so umgeschrieben wie du es vorgeschlagen hast - trotzdem bleibt das Ergebniss gleich.

Kryptychon

Anmeldungsdatum:
7. Juni 2009

Beiträge: 29

Wohnort: Freiburg

Hallo!

Bist Du sicher, dass der Webserver Code 302 "Moved Temporarily" zurückliefern soll? Was genau steht nachher im Tag bei action=" "?

Im Log sieht es so aus, als ob dein POST-Request direkt im Webserver-Root "/" landet, also bei einer index.php zB.

Deine php.ini habe ich mir angeschaut, das sieht gut aus.

Gruß Ruben

xabbuh Team-Icon

Anmeldungsdatum:
25. Mai 2006

Beiträge: 6411

Ich würde darauf tippen, dass das Formular an / geschickt wird, dort wären die Post-Daten auch vorhanden, du bekommst sie aber wegen des HTTP-Redirects an der Stelle nicht zu Gesicht. Kann das sein?

Gruß

Bl4ckbyt3

(Themenstarter)

Anmeldungsdatum:
17. Oktober 2009

Beiträge: 9

Nein, er sollte doch am besten 200 zurückliefern und nicht den 302'er-Code. Hier kannst du dir mal den HTML-Code ansehen, wie er später im Browser ankommt:

<form action="http://localhost/home/" method="POST">
<div id="loginbox">
<div id="inputlabel"><label for=userid>Personalnr.: </label></div><div><input type=text value="" name=userid ></div>
<div id="inputlabel"><input type=submit name=submit class=submit value="Anmelden" ></div></div>
</div>
</form>

Deine Aussage lässt mich immer mehr darauf schließen das mein ganzens include-"Konzept" für'n Hund ist.

Mein Projekt ist wiefolgt aufgebaut:

/intern/ (nur intern erreichbar)

/extern/ (nur extern erreichbar)

in /intern/index.php werden alle anderen "templates" in das Layout includet, welches per Get-Variable angegeben wird. Das zu includende "Template" soll aber für den User nicht sichtbar sein, weswegen ich mich diverser RewriteRules bediene (jeweils eine in jedem Unterordner).

Den PHP-Code den ich euch gezeigt hatte war im Unterordner /login/

Hier mal die .htaccess-Datei in diesem Unterordner(/login): http://pastebin.com/amdTcBFX

Hier der PHP-Code der Index.php im Hauptverzeichniss (/intern/ ): http://pastebin.com/kfa8S9pV

FAlls jetzt noch die Frage aufkommen sollte wie diese layout.html aussehehn sollte: http://pastebin.com/yMhExenz

Kryptychon

Anmeldungsdatum:
7. Juni 2009

Beiträge: 29

Wohnort: Freiburg

Hallo!

Args! Auch hier, alle Eigenschaften in HTML Tags gehören in Anführungszeichen:

<div id="inputlabel"><label for="userid">Personalnr.: </label></div><div><input type="text" value="" name="userid" ></div>
<div id="inputlabel"><input type="submit" name="submit" class="submit" value="Anmelden" ></div></div>

Das Include-Konzept ist gut. Ich denke nur, dass die das mod_rewrite einen Strich durch die Rechnung macht.

Die Templates kannst Du zB. in einem separaten Verzeichnis ablegen und mit einer .htaccess wie dieser vor Zugriffen durch den Webserver schützen:

Options -Indexes
Order allow,deny
deny from all

Per include/require einbinden kannst Du die templates dann trotzdem noch.

Gruß & Gute Nacht Ruben

Bl4ckbyt3

(Themenstarter)

Anmeldungsdatum:
17. Oktober 2009

Beiträge: 9

Danke für deine/eure Tipps und Lösungsvorschläge.

Ich muss aber zugeben das dieser Fehler auf meine eigene Blödheit zurückzuführen ist. Undzwar war die Ausgabe vom $_POST-Array deswegen immer leer da ich mit header("Location:...") eine Weiterleitung mache UND DANN erst das Array ausgeben lassen habe - logisch oder?

Trotzdem vielen vielen Dank!

Kryptychon

Anmeldungsdatum:
7. Juni 2009

Beiträge: 29

Wohnort: Freiburg

Sowas passiert 😉

Immerhin machst Du den Fehler jetzt nicht nochmal.

Gruß Ruben

Antworten |