Funktioniert <form action="index.php?site=admin" method="post"> genrell ni

O

offset

Hallo Tutorialaner,
um mein Problem mal kurz zu umschreiben (ich bin sicher ihr könnt mir helfen ;) ):
Ich habe eine Seite (aka index.php) ^^. Diese enthält Links, welche den Inhalt per "index.php?site=irgendwas" und "include("$irgendwas")" ändern (stark vereinfacht).
Jetzt habe ich auch einen Admin-Bereich, welcher ebenfalls eingebettet ist. Dort kann man Beiträge verfassen, welche dann per method="post" versand werden. Hier kommt jetzt mein Problem.
Ich möchte nämlich nach dem Eintragen wieder zur Admin Seite kommen. Ich habe es erst mit <form action="$PHP_SELF" ...> probiert. Da wird aber die admin.php nicht in die index.php includet sondern alleine (!) angeziegt (was ja logisch ist).
Dann habe ich action="index.php" ausprobiert und das Eintragen in die Datenbank der index.php überlassen. Dort wird dann aber wieder die erste Seite includet aber nicht die admin.php.

Nochmal kurz: Ich will nichts anderes, außer nach dem Abschicken des Formulars wieder auf meine index.php mit includeter admin.php kommen:

Das ganze nochmal als Bild:
(Siehe Anhang)
 

Anhänge

  • image2.gif
    image2.gif
    5,6 KB · Aufrufe: 2.886
Warum soll denn das mit <form action=datei.php?var=value ...> nicht gehen? Normal sollte das keine Probleme geben...

Aber.

Wo muss den dein Formular hin, damit die entsprechenden Eintragungen etc gemacht werden? Das sind ja zwei Paar Stiefel, oder nicht? Du musst das Formular ja an das Script schicken, dass die Eingaben verarbeitet, oder macht das deine admin.php?

Wenn ja, kein Problem - wenn nein, leite am Ende des entsprechenden Scriptes auf deine Admin Seite um. Wenn dein Script, das die Beiträge in die DB schreibt keine Ausgaben macht, kannst du am Ende einfach die header Funktion benutzen, um den Browser an die richtige Stelle zu schicken, z.B.
PHP:
// hier dein ganzer Code
header('location: index.php?site=admin.php') ## hier geht's zurück in den Admin Bereich
 
Danke dir erst einmal.

Am liebsten wäre es mir, wenn gleich die admin.php die Eintragungen in die Datenbank vornehmen könnte. Das klappt aber leider nicht. Ich hab schon alle möglichen Foren und PHP-Script-Seiten abgegrast.

Ich weiß einfach nicht, was ich in den <form action> schreiben soll. Wenn ich es an die admin.php, also an $PHP_SELF schicken will, wird es ja nicht mehr in der index.php includet, sondern extern angezigt.

Und ich weiß nicht, wie ich das ändern kann.

Falls du noch Lust hättest, mir zu helfen, aber selber nicht so recht weiter wissen solltest, würde ich dir per PM die Adresse zum Script schicken, dass du es selbst testen kannst.

Danke im Voraus.

(Sitze schon seit 2 Tagen und hab keine Ideen mehr) *heul* ^^


Um es noch konreter auszudrücken: Es liegt daran, dass die Seite per Browser oder Link mit index.php?site=admin aufgerufen wird. Wenn ich die admin.php _hart_ include, d.h. einfach nur include("admin.php") anstatt:
PHP:
    <?php
     $root = "http://www.meine-seite.de/design/";
     $site = $_GET["site"];
     if(!$site) include("home.php");
     else include("$root$site.php");
    ?>
schreibe, funktioniert es wunderbar und die admin.php bleibt auch includet.
Hab aber auch keine Ahnung, wie ich das ändern könnte.
 
Zuletzt bearbeitet von einem Moderator:
das Problem ist im Prinzip ganz einfach:

alles was hinter der URL mit ? an Variablen angegeben wird ist automatisch mit der Methode "GET", Dein FORM ist aber mit der Methode "POST" und die beiden können meines Wissens nicht gleichzeitig. ;)

Lösung: setze in die entsprechenden Forms einfach ein HIDDEN-Feld:
Code:
<INPUT TYPE="hidden" NAME="site" VALUE="admin">

Damit wird dann auch der Dateiname mit POST übergeben. ;)


Dunsti
 
Original geschrieben von Dunsti
Dein FORM ist aber mit der Methode "POST" und die beiden können meines Wissens nicht gleichzeitig. ;)
Dunsti

Doch, das geht tatsächlich. Wenn das Formular per POST verschickt wird, dann kannst du als action auch Parameter an die Datei anhängen. Diese finden sich dann in $_GET und die Werte aus dem Formular in $_POST. Andersherum geht es allerdings nicht (also dass das Formular per GET versendet wird und man trotzdem noch Parameter an die action anhängt). Okay, aber das nur nebenbei^^

Also wie Dunsti schon sagte - füge einfach ein hidden field mit entsprechendem wert ein oder mach es alternativ halt so:
PHP:
print('<form method="POST" action="index.php?site=' . $_GET['site'] . '>';
 
Hi,
sry, war im Urlaub...
Danke erst einmal an alle!
Hab jetzt mal alles ausprobiert, klappt immer noch nicht.

Es stimmt zwar, dass wenn ich <action="index.php?page=admin"> nehme, dann auch wieder die admin.php in die index.php includet wird, aber es werden die eigegebenen Daten nicht in die Datenbank geschrieben (keine Ahnung warum, vielleicht sind die Variablen ja leer. Immerhin werden sie ja von der admin.php zu index.php geschickt und dann wieder zu admin.php).

Um das ganze nochmal global zu betrachten, sieht es folgender maßen aus:
Eintrag ins Formular:
PHP:
<form action="index.php?page=admin" method="post" name="entry">
Dann wird das Formular an die index.php geschickt, welche die admin.php includet:
PHP:
     $page = $_GET["page"];
     if(!$page) include("home.php");
     else include("$page.php");

Danach fängt die admin.php das POST ab:
PHP:
 if ($_POST["entry_submit"])
 {
  $datetime = date("Y-d-m H:i:s");
  mysql_query("INSERT INTO [...] usw.");
 }

Warum wird dort jetzt nichts eingetraqen? Sind die Variablen wirklich leer? Was kann ich dagegen tun? Welche alternativen kennt ihr?
Irgendwie klapt alles nur bis zur Hälfte...;)

Danke im Voraus!

Edit: Im Endeffekt ist es ja nichts anderes, als wie dieses Forum. (Schreiben neuer Beiträge)
 
Zuletzt bearbeitet von einem Moderator:
Möglicherweise ist bei dir register_globals off und daher kannst du auf die per POST übermittelten Daten nicht nach dem muster $feldname zugreifen, sondern musst $_POST['feldname'] oder eben $_REQUEST['feldname'] in deinem Query verwenden.
 
@SynDrome: Nein, habe gerade nochmal nachgeschaut, mein Hoster hat es auf on gestellt. Ich werde es trotzdem mal probieren. Danke.

Da fällt mri noch was ein: daran aknn es nicht liegen, sonst würde er ja wenigstens die datetime eintragen:
PHP:
 if ($_POST["entry_submit"])
 {
  $datetime = date("Y-d-m H:i:s");
  mysql_query("INSERT INTO [...] usw.");
 }

D.h., er bekommt das entry_submit erst gar net. :(
 
Zuletzt bearbeitet von einem Moderator:
Argh! Ich hab den Fehler endlich nach einer Woche Suche gefunden...:mad: :mad: :mad:
Es lag daran, dass ich den Pfad hart eingegeben habe (per include("$pfad$datei$endung")).
Nunja, danke trotzdem an alle!
 

Neue Beiträge

Zurück