PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP: Formular eingabe prüfen


ooAlbert
2006-08-17, 12:27:31
Hi,

wie kann man es anstellen, das man bei der eingabe eines formulares die inhalte der textfelder auf gültigkeit prüft bevor die seite aufgerufen wird, welche die daten eigentlich auswerten soll?

Als beispiel:


<?php
echo"<form action=daten.php method=post>";

echo"Lehrgangs ID:<input type=text name=lehrgang_id size=10><br>";
echo"Lehrgangstitel:<input type=text name=lehrgang_titel size=10><br>";
echo"Ort:<input type=text name=ort size=10><br>";
echo"Hinweise :<input type=text name=hinweise size=25><br>";

echo"Termin ID:<input type=text name=termin_id size=10><br>";
echo"Anfangsdatum:<input type=text name=datum1 size=10><br>";
echo"Enddatum:<input type=text name=datum2 size=10><br>";

echo"Sicher? <br>";
echo "<input type=radio name=Sicher value=ja> Ja<br>";
echo "<input type=radio name=Sicher value=nein> Nein<br>";
echo"<input type=submit value=senden>";

echo"</form>";

echo"<form action=logout.php method=post>";
echo"<input type=submit value=Logout>";
echo"</form>";
?>


nun will ich das bestimmte felder aus diesem formulat erstens nicht leer sein dürfen und zweitens prüfen ob sie richtig formatiert sind, beispielsweise das datum oder die Lehrgangs_id.

Sobald ich senden drücke wird das ja in das POST-Array geschrieben und die daten.php geöffnet. somit ist das eingabe formular weg.

mfg

Trap
2006-08-17, 12:50:46
"Bei der Eingabe" => auf dem Client => kein PHP, höchstens Javascript, außerdem nicht vertrauenswürdig

Die Seiten, die Daten bekommen, müssen die Daten immer prüfen. Man kann ja immer ein Programm schreiben, das ungeprüfte Daten direkt per POST an den Webserver mit dem Datenscript als Ziel schickt.

ravage
2006-08-17, 12:54:26
Du packst halt sowas in die daten.php
Das ist wohl das, was Trap meint :)

<?php
$error = "";

if( $_POST[lehrgang_id] == "" ) $error .= "Lehrgangs ID nicht angegeben.<br>";
if( $_POST[lehrgang_titel] == "" ) $error .= "Lehrgangstitel nicht angegeben.<br>";
if( $_POST[ort] == "" ) $error .= "Ort nicht angegeben.<br>";
if( $_POST[hinweise] == "" ) $error .= "Hinweise nicht angegeben.<br>";
if( $_POST[termin_id] == "" ) $error .= "Termin ID nicht angegeben.<br>";
if( $_POST[datum1] == "" ) $error .= "Anfangsdatum nicht angegeben.<br>";
if( $_POST[datum2] == "" ) $error .= "Enddatum nicht angegeben.<br>";
if( $_POST[Sicher] == "Nein" ) $error .= "Nicht sicher.<br>";

if( $error != "" )
{
echo "<p>Es ist ein Fehler bei der Formulareingabe aufgetreten:<br>";
echo $error;
echo "<br><a href=\"javascript:history.back();\">Zurück zum Formular</a></p>"
}
else
{
// Das was er machen soll, wenn das Formular passt.
}
?>

Für die Richtige Eingabe des Datums und der Lehrlings ID musst du halt noch andere Abfragen einbauen.

ooAlbert
2006-08-17, 13:05:19
hm das leuchtet ein mit der serverseitigen prüfung ...

kann man diese zurück-funktion auch ohne javascript machen? Denn ich kann nicht immer sichersein das das aktiviert ist, bzw. gewünscht wird.

ich pass gerade die abfrage für das datum an und so weis scheint kennt PHP keine platzhalter, kann das sein?

zB.:

if(a=="??.??.????"){}

soll heißen wenn das format des Datums so aussieht wärs gut ansonten halt schlecht :) geht sowas oder muß man da den ganzen string zeichen für zeichen auslesen und irgendwie vergleichen?

Gast
2006-08-17, 13:58:37
http://at.php.net/manual/en/function.ereg.php


if (ereg ("([0-9]{1,2}).([0-9]{1,2}).([0-9]{4})", $date)) {
// "korrektes" Datumsformat
} else {
// halt net
}

Trap
2006-08-17, 14:19:13
Datumsüberprüfung ist ziemlich kompliziert wenn man es richtig machen will.

ooAlbert
2006-08-17, 14:40:22
ich hab das von oben so angepasst:

if (!ereg ("([0-9]{1,2}).([0-9]{1,2}).([0-9]{4})", "$_POST[datum2]")){
echo "Ungültiges Datumsformat für Enddatum: $_POST[datum2]";}

so sucht der mir den string ab und prüft auf richtigkeit. mein datum ist ja nicht als "date" formatiert sondern als ordinärer String.

Hardwaretoaster
2006-08-17, 14:51:02
Wenn du bei dem Datum nciht solange rumfackeln willst, kannst du vielelicht ein Dropdown-Menü nehmen, dass du dann einmal füllst udn der Anwnder kann nichts anderes auswählen

ooAlbert
2006-08-17, 14:53:39
ja hab ich mir auch schon überlegt vorher einfach eine lange "select feld" in die html anweisung zu zaubern aber sogesehen ist die jetzige lösung nicht so schlecht :)

Das andere ist ob man diese zurückfunktion auch ohne javascript machen kann?

Hardwaretoaster
2006-08-17, 15:37:22
Naja, du könntest die Datei nochmal aufrufen, finden die Leute aber meist nicht lustig, weilo man dann das ganze Formular nochmal füllen darf...

ooAlbert
2006-08-17, 15:41:04
ja genau :) aber wenn kein javascript angeschaktet ist, bzw. die das nicht wollen wirds irgendwie brühe...

Marscel
2006-08-17, 15:57:23
Speicher die so eingegebenen Daten im PHP, und sorg dafür, dass im Falle eines Fehlers, die zwischengelagerten POST-Daten in dasselbe Formular eingetragen werden und du dieses dann (mittels simpler Template-Technik oder eingebettet) ausgibst. Da brauchst du dann kein Javaskript oder so.

Hardwaretoaster
2006-08-17, 16:31:55
Da sind meine Kenntnisse noch nicht so weit, bin auch noch am Lernen, hast du mal 'nen Zaunpfahl, mit dem du winken kannst?

Gast
2006-08-17, 16:49:56
Da sind meine Kenntnisse noch nicht so weit, bin auch noch am Lernen, hast du mal 'nen Zaunpfahl, mit dem du winken kannst?


echo '<input id="fname" type="text" length="20" value="'.htmlentities($_POST['fname']).'" />';

Hardwaretoaster
2006-08-17, 16:51:56
oh ja, das ist 'ne Idee, das Ganze Quasi nochmal zu "kopieren" und da dann die Daten rein