Seite kann POST und GET empfangen

schiese

Erfahrenes Mitglied
Hallo,
ich stehe vor einem Problem oder besser ich weiß nicht, ob man es besser lösen kann.
Ich habe eine Seite, auf der sämtliche DB-Einträge aufgelistet sind. Durch einen Link lassen sich diese Einträge ändern. Die ID des Eintrags wird per GET an die Datei aendern.php gesendet
Code:
aendern.php?id=12
In der Datei prüfe ich mit isset(), ob die GET-Variable gesetzt und nicht NULL ist.
Code:
if (isset($_GET['id'])){...}
Ist dies erfüllt (und einige Sicherheitsabfragen: ob Integer, ob der Eintrag existiert, ...) werden die Daten aus der DB in Textfelder geschrieben. Die ID wird in ein verstecktes Formularfeld geschrieben. Das Formular wird der POST an die selbe Datei geschickt. Dies mache ich, da einige Eingaben fehlen oder falsches Format besitzen könnten und so wieder in das Formular geschrieben werden können. Jetzt prüfe ich mit
Code:
if (isset($_GET['id']))
{
...
}
else if (isset($_POST['id']))
{
...
}
else
{
...
}
wie und ob die ID ankommt und schreibe somit entsprechend die Daten in die Textfelder oder ändere den DB-Eintrag.

Mein Problem ist jetzt, dass das ganze ziemlich unübersichtlich ist. Gibt es da eine bessere Methode?

Viele Grüße
schiese
 
Hi klar, ein GET Parameter würde ich nicht übergeben du kannst es einfacher machen


PHP:
if (isset($_POST['submit']) && $_POST['submit'] == 'deinFormButtonName') { 

// dein code

}

Gruß
 
Hi lockcat,
ich verstehe deine Antwort nicht ganz. Wenn ich folgenden Code-Schnipsel ausprobiere tut sich leider Nichts nach Senden des Formulars.
Code:
<?php
if (isset($_POST['submit']) && $_POST['submit'] == 'Senden') {
echo "&Uuml;bergebener Wert: ".$_POST['eingabe']."<p>";
}
?>

<html>
<head>
<title>Tutorials.de</title>
</head>
<body>

<form method="post" action="tutorials_post.php">
<input type="text" name="eingabe">
<br>
<input type="submit" value="Senden">
</form>
</body>
</html>
Was meinst du damit:
...ein GET Parameter würde ich nicht übergeben...

Viele Grüße
schiese
 
Hi,

ich habe in deinem Code etwas ersetzt "<input type="submit" value="Senden">" zu "<button type="input" name="submit" value="Senden"> Senden</button>" Sollte nun laufen, vorteil hier kann geprüft werden ob auf dem Button geklickt wurde - Wird die Bedingung erfüllt erscheint dein Code, Klassische "IF"

Warum ein GET Parameter nutzen wenn dein Formular via POST ausgewertet wird? Entweder das eine oder das andere aber beides zu vermischen ist nicht gut.

PHP:
<?php
if (isset($_POST['submit']) && $_POST['submit'] == 'Senden') {
echo "&Uuml;bergebener Wert: ".$_POST['eingabe']."<p>";
}
?>
<html>
<head>
<title>Tutorials.de</title>
</head>
<body>
<form method="post" action="tutorials_post.php">
<input type="text" name="eingabe">
<br>
<button type="input" name="submit" value="Senden"> Senden</button>
</form>
</body>
</html>
 
Hallo,
das funktioniert jetzt. Meine eigentliche Frage ist damit allerdings noch nicht wirklich beantwortet. Ich rufe die Datei aendern.php z. B. von der Datei uebersicht.php über den folgenden Link auf:
Code:
aendern.php?id=12
Auf dieser Seite werden sämtliche Daten in die Formularfelder geschrieben und das Formular per POST an die selbe Seite (aendern.php) geschickt. Jetzt sollen die geänderten Werte, falls sie Fehler aufweisen wieder angezeigt oder die Einträge in der DB geändert werden. So brauche ich ja die beiden Abfragen um zu prüfen, ob $_POST['id'] oder $_GET['id'] gesetzt ist. Abhängig vom Ergebnis muss ich ja unterschiedliche Werte in die Formularfelder schreiben. Das ist alles sehr unübersichtlich. GIbt es da vielleicht eine bessere Lösung?

Viele Grüße
schiese
 
Wobei soll ein Fehler entstehen? wenn die ID nicht gefunden wird beim Eintragen?

//Sorry da war ich zu schnell beim Lesen und habe dich etwas miss verstanden .... :D
 
Ne. Es entsteht kein Fehler. Es funktioniert auch alles einwandfrei. Aber ich finde das ganze nicht so elegant. Da die Daten an die Datei einmal per POST und einmal per GET übertragen werden. Ich daher die Abfrage brauche, wie die Daten übertragen werden. Also dieses Mischmasch aus POST und GET in der einen Datei habe.
 
Hi

$_REQUEST enthält die Einträge und $_GET und $_POST zusammen (und auch noch die Cookiewerte dazu)
 
Wobei man immer bedenken sollte, dass der Gebraucht von $_REQUEST auch gewissen Risiken birgt.

Es kann in diesen Fall auch sein, das ein Wert eingeschleust wird, der nicht gewünscht bzw. auch gefährlich ist.
Siehe der Frühere Umgang mit Register Globals.

Am besten wirklich wie schon von anderen geschrieben fest definieren, wo welche Daten anfallen und an dieser Stelle abrufen.
 
$_REQUEST ist hier vor allem keine Lösung, da zumindest ursprünglich die Unterscheidung zwischen $_GET['id'] und $_POST['id'] von entscheidender Bedeutung für die Funktionalität war.

(Ob es prinzipiell eine gute Idee ist, $_REQUEST zu verwenden, ist noch mal eine andere Frage. Grundsätzlich ist es schon ziemlich clever, die einzelnen HTTP-Verben (get, post, …) *nicht* zusammenzufassen, da mit ihnen eine unterschiedliche Semantik verknüpft ist. https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods Es ist – einfach gesagt – zum Beispiel nicht egal, ob für etwas GET oder POST verwendet wird, da GET-Requests als „sicher“ gelten, was die Veränderung bestehender Daten angeht und dergleichen. Bei GET-Requests wird vorausgesetzt, dass sie einfach so ausgeführt werden können, ohne irgendwas am Datenbestand zu verändern (Idempotenz). Das äußert sich zum Beispiel darin, dass Suchmaschinen oder Caching-Server oder ähnliche Infrastruktur teilweise beliebig Links folgt und GET-Requests durchführt, ohne dass die jemand nachgefragt hätte. Deshalb ist es unklug, etwa Löschfunktionen über GET auszulösen. Schlimmstenfalls muss man nur die Übersichtsseite der Datensätze aufrufen, die die Löschlinks enthält, und die Client-Software „pre-fetcht“ in vorauseilender Traffic-Optimierung alle Links auf der Seite und räumt damit unbeabsichtigt die Datenbank leer. Für Anwendungen bedeutet das umgekehrt, dass etwas, das von der Bedeutung her in den POST-Bereich fällt, auch nur auf POST-Requests ansprechen sollte.)

Hier im Thread geht es aber mehr um ein architektonisches Problem, das den übersichtlichen Aufbau derartiger Software betrifft. Das ist allerdings nicht so ganz leicht zu beantworten, weil es in den Bereich Templating und Actions und damit Frameworks und MVC und dergleichen geht.

Um so eine grundsätzliche Idee zu bekommen, könntest du mal das hier lesen/ausprobieren:

- http://akrabat.com/zend-framework-tutorial/
 

Neue Beiträge

Zurück