reset geht nicht

wal

Erfahrenes Mitglied
Hallo,

hier mal etwas Kniffeliges (jedenfalls für mich :-( ), aber vielleicht weiss jemand von euch Rat.

Folgendes Szenario:
Ich würde gerne ein Datenbankgestützes Glossar bauen, mittels PHP und MySQL. Dementsprechend habe ich eine PHP Seite (test.php) und eine HTML Seite (test.html) erstellt.

Das Problem was ich momentan habe ist, das wenn ich die Eingabe überprüfen lassen vom php-script ich die Eingabe nicht mehr mit dem "Zurücksetzen" Button löschen kann. Das heisst, immer wenn zuerst der Button "Abschicken" gedrückt wurde, kann ich das ganze Formular nicht mehr in den Ursprungszustand bringen.

Anbei habe ich mal die beiden Seiten angehängt:

HTML Seite:
PHP:
<html>
	<HEAD>
		<TITLE>Test - Eingabeformular</TITLE>
		<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
	</HEAD>

	<body bgColor="#ffffff">
		<form name="glossar" action="test.php" method="post">
          <table cellspacing=1 cellpadding=0 width="100%" border=0>
          	<tr>
            	<td class=font_owner>Eingabe eines neuen Begriffs:  <!--incomplete data--></td>
            </tr>
            <tr>
            	<td class=t_content> <table cellspacing=5 cellpadding=0 width="100%" border=0>
            <tr>
               <td width="30%" class=blue_bold> Begriff (deutsch): <!-- beg_deufehler --></td>
               <td width="70%" class=blue_bold><input type="text" name="beg_deu" size="100"></td>
            </tr>
            <tr>
               <td width="30%" class=blue_bold> Begriff (englisch): <!-- beg_engfehler --></td>
               <td width="70%" class=blue_bold><input type="text" name="beg_eng" size="100"></td>
            </tr>
            <tr>
               <td width="30%" class=blue_bold> Datum:</td>
               <td width="70%" class=blue_bold><input type="text" name="datum" value="Wird vom System vergeben" size="100"></td>
            </tr>
     		</table>
         <input type="submit" value="Abschicken" name="anlegen">&nbsp;
         <input type="reset" value="Zurücksetzen" name="loeschen">
		</form>
	</body>
</html>

Und hier nun die dazugehörige PHP Seite:
PHP:
<?php

	session_start();

	session_register('refresh');

	$textinputs=Array("beg_deu","beg_eng","datum");
	
	$pflichtfelder=Array("beg_deu","beg_eng");
	$pflichtfehler=Array();

	//print_r($_POST); // Testausgabe der Forumlareingabe (Array wird ausgegeben)

	$done=false;

	//könnte im Formular mit reset behandelt werden
	if (isset($_POST["loeschen"])) {
		displayStart();
		$done=true;
	}

	// Eingaben werden überprüft
	if (!$done) {
		if (isset($_POST["anlegen"])) {
			if (!checkFields()) {
				displayStartAgain();
			}
			else {
				if ($_SESSION['refresh']==implode(";",$_POST)) {
					displayEnd(true);
					$done=true;
				}
				else {
					displayEnd($ok);
				}
			}
			$done=true;
		}
	}
	$_SESSION['refresh']=implode(";",$_POST);

	// erster Ausruf
	if (!$done) {
		displayStart();
		$done=true;
	}

	// Start-HTML ausgeben (1:1 - Wiedergabe der HTML-Datei mit fpassthru)
	function displayStart() {	
		$fileName="test.htm";
		$fp=fopen($fileName,"rb");
		fpassthru($fp);
		fclose($fp);
	}
	
	// Ende-HTML ausgeben
	function displayEnd($ok) {	
		// HTML lesen
		$fileName="ende.htm";
		$fp=fopen($fileName,"rb");
		$s_Inhalt=fread($fp, filesize($fileName));
		fclose($fp);
		
		// Text für Erfolg/Misserfolg festlegen
		if ($ok) 
         	$message="Deine Ergebnisse wurden erfolgreich gespeichert!";
		else
         	$message="Deine Ergebnisse konnten nicht gespeichert werden!";

		// Message im HTML ersetzen
		$muster="<!-- message -->";
		$replace=$message;
		$s_Inhalt=str_replace($muster,$replace,$s_Inhalt);
		
		// HTML ausgeben
		echo $s_Inhalt;
		
	}
	
	// Function unvollst. Eingabe
	function displayStartAgain() {	
			global $options;
			global $textinputs;
			global $pflichtfehler;
			
			$fileName="test.htm";
			$fp=fopen($fileName,"rb");
			$s_Inhalt=fread($fp, filesize($fileName));
			fclose($fp);

			$muster="<!--incomplete data-->";
			$replace="<font color='red'>Bitte Eingabe kontrollieren!</font><br>";
			$s_Inhalt=str_replace($muster,$replace,$s_Inhalt);

			$muster="<body bgColor=\"#ffffff\">";
			$replace="<body bgColor=\"#ffffff\" onload=\"document.glossar.".$pflichtfehler[0][2].".focus()\">";
			$s_Inhalt=str_replace($muster,$replace,$s_Inhalt);

			// Inhalte bearbeiten
			$muster="checked value="; 
			$replace="value=";
			$s_Inhalt=str_replace($muster,$replace,$s_Inhalt);
			
			for ($i=0; $i<sizeof($pflichtfehler); $i++) {
				$muster=$pflichtfehler[$i][0]; 
				$replace=$pflichtfehler[$i][1]; 
				$s_Inhalt=str_replace($muster,$replace,$s_Inhalt);
			}

			//<input type="text" name="abk_deu" value="Abkürzung auf deutsch eingeben" size="100">
			for ($i=0; $i<sizeof($textinputs); $i++) {
				if (isset($_REQUEST[$textinputs[$i]])){
					$muster="/<input type=\"text\" name=\"".$textinputs[$i]."\"(.*)>/U";
					$replace="<input type=\"text\" name=\"".$textinputs[$i]."\" value=\"".$_POST[$textinputs[$i]]."\">";
					$s_Inhalt=preg_replace($muster,$replace,$s_Inhalt);
				}
			}
			echo $s_Inhalt;
	}

	// Felder checken ob korrekt gefüllt
	function checkFields() {
		
		global $pflichtfelder;
		global $pflichtfehler;

		$allok=true;
		for ($i=0; $i<sizeof($pflichtfelder); $i++) {
			$ok=false;
			if (isset($_POST[$pflichtfelder[$i]])) {
				if ($_POST[$pflichtfelder[$i]]!="" && ($_POST[$pflichtfelder[$i]]!="Begriff auf deutsch eingeben" || $_POST[$pflichtfelder[$i]]!="Begriff auf englisch eingeben")) {
					$ok=true;
				}
			}
			if (!$ok) {
				$allok=false;
				array_push($pflichtfehler,Array("<!-- ".$pflichtfelder[$i]."fehler -->","<font color='red'>Bitte ausfüllen!</font>",$pflichtfelder[$i]));
			}
		}
		return $allok;
	}
?>

Wenn Fragen zum Coding bestehen, Frage mich bitte einfach.

Wenn jemand von euch Profis mir einen Tipp oder Hilfe geben kann wäre das super. :)

Vielen Dank für eure Bemühungen schon mal vorab.
 
Ich bin zwar nicht der Megaprofi, aber ich tippe mal auf Deine Funktion 'function displayStart()'.
Du bleibst ja quasi nach dem abschicken des HTML-Formulars in der 'test.php' und in oben genannter Funktion stellst Du einfach nochmal die HTML Datei dar, wodurch die vorher eingegebenen Werte erhalten bleiben.

Ist sowas überhaupt machbar ? Wenn ja würde mich interessieren wie das funktioniert :confused:
 
Zuletzt bearbeitet:
Hi RayMatrix,

vielen Dank für die Antwort!

Ja dieses Script läuft ohne "murren" :p

Einziger Wehrmutstropfen ist eben das ich die Formulare nicht mehr in den Ursprungszustand bringen kann. :mad:

Solange ich nicht auf den "Abschicken"-Button drücke, funktioniert der "reset" auch. Auch kann ich zum Beispiel das erste Feld ausfüllen -> Abschicken -> das zweite Feld füllen -> gleich "reset", also "Zurücksetzen" drücken und das zweite feld wird zurückgesetzt. Das Zurücksetzen klappt also nur nach dem Abschicken nicht mehr.

Ist das ein Cach-Problem? :(
 
Zurück