_POST-Daten werden nicht übernommen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • _POST-Daten werden nicht übernommen

    Hab ein kleines script geschrieben.

    account.php

    Quellcode

    1. <?PHP
    2. if ($_REQUEST['anzeige'] == "konto") {
    3. include_once ('../templates/account/account_kontostart.php');
    4. } else {
    5. include_once ('../templates/account/account_startpage.php');
    6. }
    7. ?>


    account_startpage.php:

    Quellcode

    1. <?PHP
    2. if (!isset ($_REQUEST['action'])) {
    3. include_once ('../templates/account/mailbox.php');
    4. }
    5. if($_REQUEST['action'] == "adress") {
    6. include_once ('../templates/account/adress.php');
    7. }
    8. ?>


    adress.php:

    Quellcode

    1. <?PHP
    2. if(($_REQUEST['updated'] == "firma") || ($_REQUEST['updated'] == "privat")) {
    3. echo '
    4. <table width="100%" border="0" cellspacing="0" cellpadding="5">
    5. <tr>
    6. <td class="accountpage" scope="col"><div align="left">Ihre Adressdaten wurden wie folgt ge&auml;ndert.</div></td>
    7. </tr>
    8. </table>';
    9. } elseif ($_REQUEST['update'] == "privat") {
    10. $adresse_update = 'UPDATE '.$dbpref.'user Set vorname="'.$_POST['vorname'].'" WHERE `username` = "'.$_SESSION["mtd_user"].'"';
    11. $update = mysql_query($adresse_update);
    12. header ("Location: account.php?action=adress&updated=privat");
    13. } else {
    14. echo '
    15. <table width="100%" border="0" cellspacing="0" cellpadding="0">
    16. <form name="form1" method="post" action="account.php">
    17. <tr>
    18. <th width="20%" valign="top" class="accountpage" scope="col"><div align="left">Vorname</div></th>
    19. <th height="30" valign="top" scope="col"><div align="left">
    20. <input name="vorname" type="text" id="vorname" value="<? echo $user[vorname]; ?>">
    21. </div></th>
    22. </tr>
    23. <tr>
    24. <th valign="top" class="accountpage" scope="col">&nbsp;</th>
    25. <th valign="top" scope="col"><div align="left">
    26. <label>
    27. <input name="action" type="hidden" id="action" value="adress">
    28. <input name="update" type="hidden" id="update" value="privat">
    29. <input type="submit" name="Submit" value="&Auml;ndern">
    30. </label>
    31. </div></th>
    32. </tr>
    33. </form>
    34. </table>';
    35. }
    Alles anzeigen


    Das Script ist natürlich entwas verkürzt und spiegelt nur die wichtigsten Passagen wieder. Im Grunde funktioniert alles ganz gut. Die Daten werden aktualisiert. Nur wenn die Daten aktualisieret werden sollen, dann soll ja

    Quellcode

    1. header ("Location: account.php?action=adress&updated=privat");

    ausgeführt werden. Aber der Link spring nur bis zur Datei account_startpage.php. Er filtert dann nicht weiter. Da ja der Post "action=adress" mitgegeben wurde müsste der jetzt doch weitergehen zur adress.php. Aber das tut er nicht. Er interpretiert die account_startpage.php. In der Datei ankommen tut der Link, aber wertet nichts mehr aus. Das habe ich festgestellt. Aber woran liegt das. Ich habe doch die Variable "action" korrekt mitgegeben. Wenn ich "account.php?action=adress&updated=privat" direkt aufrufe funktioniert das include_once wunderbar. Die Variablen existieren alle und die Datenbank wird auch korrekt ausgewertet. Die Daten werden auch upgedatet. Nur der Header funktioniert halt nicht so wie er soll.

    Ich hoffe, dass das ganze jetzt einigermaßen durchsichtig ist. Habe versucht alles so gut es geht zu erklären. Ist kompliziert ich weiß. Aber vielleicht weiß ja jemand einen Rat.
  • Du springst zur Datei account.php, soweit ist es jedenfalls zu erkennen.

    In dieser Datei machst du aber nur die Abfrage '$_REQUEST['anzeige'] == "konto"'. Kein Wunder, dass er dann '../templates/account/account_startpage.php' lädt, wenn du es dort mit 'else' als Ziel angiebst.

    Wenn ich das richtig verstehe, würde es schon reichen, die URL zu der gesprungen werden soll, wie folgt umzunennen:

    Quellcode

    1. header ("Location: account_startpage.php?action=adress&updated=privat");


    Oder aber du änderst die Abfrage in account.php wie folgt:

    Quellcode

    1. <?PHP
    2. if (!isset ($_REQUEST['action'])) {
    3. include_once ('../templates/account/mailbox.php');
    4. }
    5. if($_REQUEST['action'] == "adress") {
    6. include_once ('../templates/account/adress.php');
    7. }
    8. ?>
  • Das ist richtig. Er soll ja in der account.php zu account_startpage.php wechseln. Das ist Absicht. Das macht er ja auch. Das habe ich rausgefunden. Aber der Link interpretiert die Daten in der account_startpage.php nicht richtig. Die Daten werden ja per $_GET mit übergeben. Normalerweise sollte er ja jetzt die entsprechenden Dateien (jeweilig durch if geprüft) einbinden. Aber eben das macht er nicht. Er stoppt hier.
  • Mach mal hinter das:

    Quellcode

    1. header ("Location: account.php?action=adress&updated=privat");


    ein:

    Quellcode

    1. exit();


    also dann sollte es folgendermaßen aussehen:

    Quellcode

    1. header ("Location: account.php?action=adress&updated=privat"); exit();


    Ich weiß nicht ob es damit zusammenhängt, aber ein exit(); sollte man eigentlich jedes mal machen.

    Und solltest auch sicherheitshalber mal auf SQL_Injections achten. Also alle $_POST, $_GET und $_REQUEST vor dem eintragen in die Datenbank mit addslashes(); bearbeiten.
  • Nein es gibt keine Fehlermeldung, leider. Das Update wird durchgeführt. Nur der Link in der adress.php

    header ("Location: account.php?action=adress&updated=privat");"

    funktioniert nicht. Er leitet nur weiter bis in die account_startpage.php und hört dann auf. Wenn ich die Zeile "print_r($_GET);" an den Anfang der account_startpage.php setze, erscheint halt "Array()". Daher weiß ich, dass der Link bis in die account_startpage.php hineinspring, aber dann entsprechend der ifs nicht die richtige include_once einfügt. Die Pfade sind richtig. Wenn den Link "account.php?action=adress&updated=privat" manuell eingebe funktioniert alles bestens. Also am Link kann das nicht liegen. Es muss also irgenwas mit der Variablenübergabe nicht stimmen, aber was?
  • Ich hab gerade mal auf php.net geschaut, was da so zu finden ist.

    Folgendes fand ich:

    Anmerkung: HTTP/1.1 verlangt einen absoluten URI inklusive dem Schema, Hostnamen und absoluten Pfad als Argument von Location:, aber manche Clients akzeptieren auch relative URIs. Gewöhnlich können Sie mittels $_SERVER['HTTP_HOST'], $_SERVER['PHP_SELF'] und dirname() aus einem relativen Link einen absoluten URI selbst erstellen:

    Quellcode

    1. <?php
    2. /* Redirect auf eine andere Seite im aktuell angeforderten Verzeichnis */
    3. $host = $_SERVER['HTTP_HOST'];
    4. $uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
    5. $extra = 'mypage.php';
    6. header("Location: http://$host$uri/$extra");
    7. exit;
    8. ?>


    Ich würds mal probieren. Vielleicht löst das das Problem.
  • Was macht man, wenn das Problem scheinbar zu groß ist? Erstmal kapseln..
    also am Formular liegt es nicht.

    Wenn sich die URL in der Adresszeile des Browser liegt, dann liegt es auch nicht an der Weiterleitung.

    Du kannst also account.php?action=adress&updated=privat direkt im Browser eintippen. Sollte den selben Effekt haben, oder? Also leeres Array.
  • Wenn ich den Link direkt im Browser eintippe habe ich das gewünschte Ergebnis. Die Ausgabe erfolgt. Halt nur über die Weiterleitungen klappt´s nicht.

    Hab eine Teillösung für das Problem gefunden. Die account_startpage.php sind im Grunde etwas anders aus. Ich habe gedacht, dass sich der Fehler nur auf die php-Komponente befindet. Deshalb habe ich den Rest hier weggelassen.

    So sie sieht so aus:

    Quellcode

    1. <table width="100%" border="0" cellpadding="5" cellspacing="0" class="account_daten">
    2. <tr>
    3. <th width="33%" scope="col"><form name="fr1" method="post" action="account.php">
    4. <input value="daten" type="hidden" name="anzeige">
    5. <input value="adress" type="hidden" name="action">
    6. <a href="#" target="_parent" onclick="javascript:document.fr1.submit();">Adressdaten</a></form></th>
    7. <th width="34%" scope="col"><form name="fr2" method="post" action="account.php">
    8. <input value="daten" type="hidden" name="anzeige">
    9. <input value="news" type="hidden" name="action">
    10. <a href="#" target="_parent" onclick="javascript:document.fr2.submit();">News</a></form>
    11. </th>
    12. <th width="33%" scope="col"><form name="fr3" method="post" action="account.php">
    13. <input value="daten" type="hidden" name="anzeige">
    14. <input value="newsletter" type="hidden" name="action">
    15. <a href="#" target="_parent" onclick="javascript:document.fr3.submit();">Newsletter-Einstellungen</a></form></th>
    16. </tr>
    17. <tr>
    18. <th width="33%" scope="col"><form name="fr4" method="post" action="account.php">
    19. <input value="daten" type="hidden" name="anzeige">
    20. <input value="mailbox" type="hidden" name="action">
    21. <a href="#" target="_parent" onclick="javascript:document.fr4.submit();">Meine Nachrichten</a></form></th>
    22. <th width="34%" scope="col"><form name="fr5" method="post" action="account.php">
    23. <input value="daten" type="hidden" name="anzeige">
    24. <input value="password" type="hidden" name="action">
    25. <a href="#" target="_parent" onclick="javascript:document.fr5.submit();">Passwort</a></form>
    26. </th>
    27. <th width="33%" scope="col"><form name="fr6" method="post" action="account.php">
    28. <input value="daten" type="hidden" name="anzeige">
    29. <input value="bank" type="hidden" name="action">
    30. <a href="#" target="_parent" onclick="javascript:document.fr6.submit();">Bankverbindung</a></form></th>
    31. </tr>
    32. </table>
    33. <br>
    34. <?php
    35. if (!isset ($_REQUEST['action'])) {
    36. include_once ('../templates/account/mailbox.php');
    37. }
    38. if($_REQUEST['action'] == "news") {
    39. include_once ('../templates/account/news.php');
    40. }
    41. if($_REQUEST['action'] == "newsletter") {
    42. include_once ('../templates/account/newsletter.php');
    43. }
    44. if($_REQUEST['action'] == "bank") {
    45. include_once ('../templates/account/bank.php');
    46. }
    47. if($_REQUEST['action'] == "mailbox") {
    48. include_once ('../templates/account/mailbox.php');
    49. }
    50. if($_REQUEST['action'] == "adress") {
    51. include_once ('../templates/account/adress.php');
    52. }
    53. if($_REQUEST['action'] == "password") {
    54. include_once ('../templates/account/password.php');
    55. }
    56. ?>
    Alles anzeigen


    Wenn ich jetzt den HTML-Code weglassen (also alles was nicht im php-code steht), dann funktioniert das ganze. Aber warum. Ich habe doch lediglich Inputfelder zur Javascript-Verliinkung eingefügt. Beide haben doch eigentlich nichts miteinander zu tun, oder? Warum stört das jetzt? Die Links funktionieren auch alle wunderbar. Auch mit dem Header-Location-Link --> header ("Location: account.php?action=adress&updated=privat"); <-- erscheinen die Links aus dem HTML-Code. Sie werden normal angezeigt und man kann Si enormal anzeigen lassen. Aber direkt vor der ersten if-Anweisung stoppt der Link.