PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problemchen mit PHP Weiterleitung


Unfug
2006-04-18, 22:12:59
Hallöchen,

vielleicht mag mir jemand weiterhelfen.
Ich lasse mittels:

include("form.php");

Ein Formular an einer bestimmten Stelle auf der Seite anzeigen.
Das Form. wird erst included wenn man
index.php?action=form
aufruft.
Das Formular sieht in etwa so aus:

<form action=$PHP_SELF>
(...)
</form>


Ruft sich also selbst auf, wenn es abgeschickt wurde.
Das blöde ist ja nun, dass die Datei (FORM.PHP) selbst aufgerufen wird. Also quasi aus dem "DESIGN" rausgerissen wird. Wie kann ich es bewerkstelligen, daß weiterhin die index.php?action=form aufgerufen wird aber die DATEN trotzdem an die FORM.PHP übergeben werden?



Danke

astanoth
2006-04-18, 22:18:24
<form action="index.php?action=form">

Marscel
2006-04-18, 22:19:43
Strukturiere den Code mal vernünftig.

Bau irgendwo ins Formular sowas wie
<input type="hidden" name="abgeschickt" value="1" />
ein.

Und dann im PHP irgendwie sowas:
if($_POST['abgeschickt']) // Formular-POST-Daten wurden gesendet
{
// Mache irgendwas, wenn Formular abgeschickt ist
}
else if($_GET['action'] == 'form') // Wenn nicht, aber $_GET['action'] == 'form' ist
{
include('form.php');
}
else // Seitenaufruf, keine zusätzliche Parameter
{
// ...
}

EDIT: Ja, die Alternative, die ich allerdings unhübsch finde, wäre einfach noch "?action=form" hinter dem $PHP_SELF hinzuzufügen.

Unfug
2006-04-18, 22:25:15
Dankt euch beiden...Funktioniert wunderbar.

Al-CAlifAX
2006-04-19, 09:09:34
Ich helf auch mal aus. Sind nochn paar kleinere Fehler die immer mit beachtet werden sollten.

Zuerst mal zu deiner $phpself variable.

Am besten sollte die folgendermaßen lauten:
$phpself = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']

Wenn du nämlich mal den Get-String von $_GET['action'] ändert bzw. auch den GET selber ruft sich das Forumular trotzdem noch auf.

Desweiteren ist es richtig das man nen hiddentype nehmen sollte.
<input type="hidden" name="abgeschickt" value="1" />

Nur sollte die Abfrage etwas mehr also nur:
if($_POST['abgeschickt']) // Formular-POST-Daten wurden gesendet

sein. Sondern sollte so aussehen.
if(isset($_POST['abgeschickt']) && $_POST['abgeschickt'] == "1") // Das Hiddenfield wurde gesendet und ist im Wert auch 1.

Dies solltest Du im übrigen mit jedem $_POST und $_GET Befehl machen. Also in Abfragen ob er gesetzt ist und ob den Wert. Wenn der Wert net 1 ist, sondern einfach nur nen Wert haben soll dann natürlich so:
if(isset($_POST['poststring']) && $_POST['poststring'] != "") // als Zahl und Buchstaben
if(isset($_POST['poststring']) && $_POST['poststring'] > 0) // Wert soll mindestens 1 betragen


Das ist nur nen kleiner Auszug für nen sauberen Code. Desweiteren solltest Du bei Eingabefeldern die Daten in die Datenbank beschreiben sollen, darauf achten das jeder HTML-CHAR umgewandelt wird in denselbigen. also Sonderzeichen wie ", ' usw. Denn sonst kann man leicht einen Query String in dein Eingabefeld basteln und so deine Datenbank mainpulieren. Der Befehl dazu lautet htmlspecialchars. Er verhindert auch das Dein SQL-Query Fehler aufweist wenn jemand nur mal das Zeichen ' verwendet. Sind so Kleinigkeiten und gibts noch ne Menge mehr die Du im Laufe der Jahre der Programmierung (ist keinesfalls PHP spezifisch) erlernst.

Ach ja und ich empfehle jedme weg von HTML/PHP Code geschnippel. Trennt sauber HTML/CSS/JAVA Dateien und PHP-Dateien. Baue Dir für wiederholende Sachen wie eigene Gästebücher, Galerien, Upload-Scripte, Mail Scripte, uvm. Classes. Eine Klasse zu schreiben ist net sonderlich schwer, wenn man PHP versteht. Classes zu bewerben dann scho. Aber man sollte kein anfangen mit wiederholenden Funktionen in extra funtion.inc.php dateien. Und dann auf classes umspringen. Der Vorteil is ganz klar. benötigst Du als beispiel oft ne uploadfunktion. dann includes einfacht die class und übergibts deine parameter die du selber der class definiert hast. das ist meist nur ne arbeit von 10 sekunden und erpart lästiges code rum geschnippel und rumkopiere, wovon der code nur unsauber wird. oder gar neu geschreibe.

Wenn Dich interessiert wie man classes schreibt schau mal im PHP5 Handbuch da stehen viele Regeln dazu drinne. Grundlegende Sachen sind sehr einfach. Aber gehen jetzt hier zu weit. Im übrigen Schreibe ich keine Formular mehr neu. Hbe dafür mir Classes geschrieben wo select Felder, eingabefelder uvm. per Übergaben geparst werden und diese in verschiedensten variationen der ausführungen. Erleichtern sehr die Arbeit. ;) Denn Formulare brauch man immer, wenn man PHP programmiert :P

Unfug
2006-04-19, 10:05:54
dank dir. sehr gute tips