• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Inhalt von Inputfeldern nach Formularabsendung anzeigen

Tobi44

Mitglied
Moin,

hab mir hier was programmieren lassen (warum wohl - weil ich es selber nicht kann) - nun hat er die Hälfte vergessen und ich sitze hier wie vor einer schwarzen Mauer.

Bisher habe ich es so gemacht - und das hat bisweilen auch funktioniert - dass ich die Formularfelder definiert habe und in gleicher Datei beim Absenden vom User dann die von ihm eingegebenen Inhalte wieder in den Feldern angezeigt wurde.

Das funktioniert nun nicht mehr, da das Formular an eine andere php-Datei geschickt wird.
Habe das nun also so gemacht:
$reg_1 = $_POST['reg_feld1'];
$reg_2 = $_POST['reg_feld2'];
$reg_3 = $_POST['reg_feld2'];
und in den Inputs ein value="<?php echo "".$reg_1.""; ?>" usw. - das alles natürlich in der php-datei in der die Felder sind. Der andere Kram liegt in einer anderen php-Datei.

Hab auch schon diese $reg_1 = ... -Dinger in der anderen Datei definiert.

Aber zum Verrücktwerden ist es einfach nicht möglich, dass die Daten nach dem Absenden wieder in den Feldern stehen. Wie mache ich das in dem Fall?

Danke & Gruß
 
Die 1. registrieren.php:

Code:
<?php

// Variable initialisieren
$ausgabe = "";

// Meldungen
if(isset($_GET['badname']) && $_GET['badname'] == 1)
{
	$ausgabe .= "Bitte &uuml;berpr&uuml;fe deinen Namen.<br />";
}

if(isset($_GET['badpassword']) && $_GET['badpassword'] == 1)
{
	$ausgabe .= "Die Passw&ouml;rter stimmen nicht &uuml;berein.<br />";
}

if(isset($_GET['badmail']) && $_GET['badmail'] == 1)
{
	$ausgabe .= "Diese E-Mail-Adresse ist schon in Verwendung oder ist ung&uuml;ltig.<br />";
}

if(isset($_GET['badnumber']) && $_GET['badnumber'] == 1)
{
	$ausgabe .= "Diese Handy-Nr. ist schon in Verwendung oder ist nicht korrekt.<br />";
}

if(isset($_GET['badconfirmpassword']) && $_GET['badconfirmpassword'] == 1)
{
	$ausgabe .= "Die Passw&ouml;rter stimmen nicht &uuml;berein.<br />";
}

// Meldung ausgeben
echo "<span style=\"color:red\">$ausgabe</span>";
$reg_n = $_POST['reg_name'];
$reg_e = $_POST['reg_email'];
$reg_h = $_POST['reg_handy'];
?>

<p>Registriere dir <strong>kostenlos</strong> einen Account auf FreeSMS.so um FreeSMS versenden zu k&ouml;nnen.</p>

<div id="box" style="width:315px;"><form method="post" action="proc/registrieren.php">
  <p>
  	<label><b>Name:</b><br />
  	  <input type="text" name="reg_name" id="reg_name" value="<?php echo "".$reg_n.""; ?>" />
	  </label>
  </p>
  <p>
  	<label><b>E-Mail Adresse:</b><br />
	<small>Muss best&auml;tigt werden und wird zum Login verwendet</small><br />
  	  <input type="text" name="reg_email" id="reg_email" value="<?php echo "".$reg_e.""; ?>" />
	  </label>
  </p>
  <p>
  	<label><b>Handy-Nummer:</b><br />
	<small>Im Format 0170... - muss verifiziert werden</small><br />
  	  <input type="text" name="reg_handy" id="reg_handy" value="<?php echo "".$reg_h.""; ?>" />
	  </label>
  </p>
  <p>
		<label><b>Passwort:</b><br />
		  <input type="password" name="reg_passwort" id="reg_passwort" />
	  </label>
  </p>
  <p>
		<label><b>Passwort wiederholen:</b><br />
		  <input type="password" name="reg_passwort_confirm" id="reg_passwort_confirm" />
	  </label>
  </p>
  <p>
  	<input type="submit" name="reg_submit" id="reg_submit" value="Registrieren" />
  </p>
</form></div>

Und die 2. registrieren.php:

Code:
<?php

// Session starten
session_start();
// Datenbank einbinden
require_once '../include/db.php';
// Funktionen einbinden
require_once '../include/functions.php';
// Config einbinden
require_once '../include/config.php';

// Autload Klassen
function __autoload($klassenname)
{
	$klasse = strtolower($klassenname);
	require_once '../class/' . $klasse . ".class.php";
}

// Registrierungsprozess
if(isset($_POST['reg_submit']))
{
	// POST Variablen einlesen und filtern
	$reg_name = trim($dbcon->real_escape_string(htmlspecialchars($_POST['reg_name'])));
	$reg_email = trim($dbcon->real_escape_string(htmlspecialchars($_POST['reg_email'])));
	$reg_handy = trim($dbcon->real_escape_string(htmlspecialchars($_POST['reg_handy'])));
	$reg_passwort = md5(trim($dbcon->real_escape_string(htmlspecialchars($_POST['reg_passwort']))));
	$reg_passwort_confirm = md5(trim($dbcon->real_escape_string(htmlspecialchars($_POST['reg_passwort_confirm']))));
	
	// Prüfen ob bereits ein Benutzer unter selben Mail oder Nummer registriert ist
	$query = "SELECT id_benutzer FROM benutzer WHERE email = '$reg_email'";
	$result = $dbcon->query($query) or die($dbcon->error);
	$affected_email = $result->num_rows;
	$query = "SELECT id_benutzer FROM benutzer WHERE handy = '$reg_handy'";
	$result = $dbcon->query($query) or die($dbcon->error);
	$affected_handy = $result->num_rows;
	
	// Überprüfung der Eingaben durchführen
	$target = "../index.php?page=registrieren&";
	$regerror = "0";
	if(empty($reg_name))
	{
		$target .= "badname=1&";
		$regerror++;
	}
	if(empty($reg_email) || check_email_address($reg_email) == FALSE || $affected_email == TRUE)
	{
		$target .= "badmail=1&";
		$regerror++;
	}
	if(empty($reg_handy) || !is_numeric($reg_handy) || $affected_handy == TRUE)
	{
		$target .= "badnumber=1&";
		$regerror++;
	}
	if(empty($reg_passwort))
	{
		$target .= "badpassword=1&";
		$regerror++;
	}
	if(empty($reg_passwort_confirm) || $reg_passwort != $reg_passwort_confirm)
	{
		$target .= "badconfirmpassword=1&";
		$regerror++;
	}
	
	if($regerror != 0)
	{
		redirect($target);
	}
	else
	{
		// Benutzer in Datenbank eintragen
		$query = "INSERT INTO benutzer (name, email, handy, passwort, emailaktiv, smsaktiv, gesperrt) VALUES ('$reg_name', '$reg_email', '$reg_handy', '$reg_passwort', '0', '0', '0')";
		$result = $dbcon->query($query) or die($dbcon->error);
		
		// Aktivierungskeys anlegen
		$query = "SELECT id_benutzer FROM benutzer WHERE handy = $reg_handy LIMIT 1";
		$result = $dbcon->query($query) or die($dbcon->error);
		$value = $result->fetch_row();
		
		$id_benutzer = $value[0];
		$emailkey = rand(5198143,9999999);
		$smskey = rand(5198143,9999999);
		
		$query = "INSERT INTO aktivierung (benutzer, smskey, emailkey) VALUES ('$id_benutzer', '$smskey', '$emailkey')";
		$result = $dbcon->query($query) or die($dbcon->error);
		
		// Link für Aktiverungsmail zusammenbauen
		$host = htmlspecialchars($_SERVER['HTTP_HOST']);
		$url = rtrim(dirname(htmlspecialchars($_SERVER['PHP_SELF'])), "/\\");
		$aktivierungslink = "http://" . $host . $url . "/aktivieren.php?emailkey=$emailkey";
		
		// Aktivierungskeys versenden
		$emailtext = "Danke fuer deine Registrierung auf www.FreeSms.so. Bitte rufe folgenden Link auf, um deinen Account zu aktivieren.\n\n Dein E-Mail-Aktivierungslink:\n";
		$emailtext .= $aktivierungslink;
		$bestaetigungsmail = mail($reg_email, "Aktivierung Deines Accounts bei FreeSMS.so", $emailtext, "From: FreeSMS.so  <[email protected]>");
		$bestaetigungssms = new SMSTrade($smstrade_key, $smstrade_route, $smstrade_debug);
		$bestaetigungssms->NachrichtSenden("FreeSMS", $reg_handy,"Vielen Dank fuer deine Registrierung auf FreeSMS.so. Dein SMS-Verifizierungscode: $smskey");
		
		// SMS Kontigent bereitstellen
		$query = "INSERT INTO kontigent (benutzer, credits) VALUES ('$id_benutzer', '$start_credits')";
		$result = $dbcon->query($query) or die($dbcon->error);
		
		// Logeintrag schreiben
		$query = "SELECT id_benutzer FROM benutzer WHERE handy = '$reg_handy'";
		$result = $dbcon->query($query) or die($dbcon->error);
		$row = $result->fetch_row();
		
		$log_benutzer = $row[0];
		$log_ip = $_SERVER['REMOTE_ADDR'];
		$log_host = gethostbyaddr($log_ip);
		$log_timestamp = getTimestamp();
		
		$query = "INSERT INTO reglog (benutzer, ip, host, timestamp) VALUES ('$log_benutzer', '$log_ip', '$log_host', '$log_timestamp')";
		$result = $dbcon->query($query) or die($dbcon->error);
		
		// Umleiten
		redirect("../index.php?page=registrierung-erfolgreich");
	}
}
else
{
	// Umleiten bei Aufruf ohne Werte
	redirect("../index.php?page=startseite");
}

?>
 
Eine Funktion redirect() gibt es nicht. Ersetze

PHP:
// Umleiten
		redirect("../index.php?page=registrierung-erfolgreich");

durch

PHP:
// Umleiten
                $page = "registrierung-erfolgreich";
		include("../index.php");

und

PHP:
	// Umleiten bei Aufruf ohne Werte
	redirect("../index.php?page=startseite");

durch

PHP:
	// Umleiten bei Aufruf ohne Werte
        $page = "startseite";
	redirect("../index.php");
 
Es funktioniert ja alles. Das Formular klappt einwandfrei. Nur werden die Werte in den Inputfeldern nicht nach der Fehlerausgabe übernommen. Z.B. für den SMS-Versand ist das wichtig. Schreibt ein User die SMS, vergisst aber die Nummer einzugeben, ist beim Absenden und Ausgabe der Fehlermeldung der Text weg. Der sollte dann aber nach wie vor im Feld stehen. Das wäre ja auch normalerweise möglich, wenn der PHP-Kram des Formulares nicht in einer anderen php-Datei wäre. Weiß nicht, wie ich das nun da reinwurschteln muss.

Gruß
 
Wie gesagt wird das nicht einer nicht existierenden oder von dir für uns nicht dokumentierte Funktion namens "redirect" nicht funktionieren.
 
function redirect($target = "../index.php")
{
$host = htmlspecialchars($_SERVER['HTTP_HOST']);
$url = rtrim(dirname(htmlspecialchars($_SERVER['PHP_SELF'])), "/\\");
header("Location: http://$host$url/$target");
}
 
Die POST-Felder überleben den Redirect nicht. Du könntest sie in einer Session zwischenspeichern, aber das wäre „Fehler mit Fehler beheben“. Es wäre einfacher, das Formular an dasjenige Script zu schicken, das das Formular auch generiert hat.

htmlspecialchars dient zum Escaping von Variablen zur Ausgabe in HTML-Code. Die Verwendungen im gezeigten Code sind glaube ich alle falsch.
 
Das einfachste wäre weiterhin include() zu verwenden. Die nötigen Code-Änderungen habe ich oben beschrieben.
 
Hallo,

ich verstehe nicht, wie ich das machen soll.

Habe auch wohl falsches Beispiel gepostet - hier nochmal für den SMS Versand.

1. php-Datei:
PHP:
<h1>Neue SMS verfassen</h1>
<?php

// Umleiten bei Aufruf ohne eingeloggt zu sein
if(!isset($_SESSION['loggedin']))
{
	redirect("index.php?page=startseite");
}

?>

<?php

// Variable initialisieren
$ausgabe = "";

// Meldungen
if(isset($_GET['badnumber']) && $_GET['badnumber'] == 1)
{
	$ausgabe .= "Die Handy-Nummer stimmt nicht.<br />";
}

if(isset($_GET['nonumber']) && $_GET['nonumber'] == 1)
{
	$ausgabe .= "Keine Handy-Nummer angegeben.<br />";
}

if(isset($_GET['notext']) && $_GET['notext'] == 1)
{
	$ausgabe .= "Keine Nachricht angegeben.<br />";
}

if(isset($_GET['badtext']) && $_GET['badtext'] == 1)
{
	$ausgabe .= "Zu viele Zeichen. Maximal erlaubt sind $max_zeichen.<br />";
}

if(isset($_GET['nocredits']) && $_GET['nocredits'] == 1)
{
	$ausgabe .= "Nicht gen&uuml;gend Credits verf&uuml;gbar. <a href='index.php?page=credits-aufladen'>SMS-Credits aufladen</a><br />";
}

if(isset($_GET['notconfirmed']) && $_GET['notconfirmed'] == 1)
{
	$ausgabe .= "Deine Handy-Nummer wurde noch nicht verifiziert. <a href='index.php?page=handynummer-verifizieren'>Jetzt verifizieren</a><br />";
}

// Meldung ausgeben
echo "<span style=\"color:red;\">$ausgabe</span>";

?>


<?php
if($env_handynrbestaetigt == 0)
	{
?>

<h1>Fehler!</h1>
<p>Deine Handy-Nummer wurde noch nicht verifiziert. <a href="index.php?page=handynummer-verifizieren">Jetzt verifizieren!</a></p>

<?php
	}
	else
	{
?>

<?php
if($env_taegliche_credits != 0)
{
	echo "<hr><b>Es wird dein FreeSMS-Guthaben benutzt!</b><hr>";
}
else
{
	echo "<hr><b>Keine FreeSMS mehr verf&uuml;gar. Es werden SMS-Credits verwendet.</b><hr>";
}
?>

<div id="box" style="width:370px;"><form id="form_neuesms" method="post" action="proc/neue-sms.php">
	<p>
    <label><b>Empf&auml;nger:</b><br />
      <input type="text" name="neuesms_empfaenger" id="neuesms_empfaenger"/>
    </label>
    <select name="tel_kontakte" id="tel_kontakte" onChange="document.getElementById('neuesms_empfaenger').value = this.value">
      <option value="">Empf&auml;nger aus Telefonbuch</option>
      <?php
				// Telefonbucheinträge auslesen
				$query = "SELECT name, nummer FROM telefonbuch WHERE benutzer = '$env_benutzerid'";
				$result = $dbcon->query($query) or die($dbcon->error);
				// Einträge für Liste ausgeben
				while($row = $result->fetch_row())
				{
					echo "<option value='$row[1]'>&raquo; $row[0]</option>";
				}
			?>
    </select>
  </p>
	<p>
	<b>Absender:</b><br />
	<?php echo $env_handynummer ?> (<?php echo $env_benutzername ?>)
	</p>
  <p>
    <label><b>Nachricht:</b><br />
	<small>(max <?php echo $max_zeichen ?> Zeichen)</small><br />
      <textarea name="neuesms_nachricht" id="neuesms_nachricht" cols="45" rows="5"></textarea>
    </label>
  </p>
  <p>
  	<input type="submit" name="neuesms_submit" id="neuesms_submit" value="SMS abschicken" />
  </p>
</form></div>

<?php
}
?>

2. php-Datei:
PHP:
<?php

// Session starten
session_start();
// Datenbank einbinden
require_once '../include/db.php';
// Funktionen einbinden
require_once '../include/functions.php';
// Config einbinden
require_once '../include/config.php';

// Autload Klassen
function __autoload($klassenname)
{
	$klasse = strtolower($klassenname);
	require_once '../class/' . $klasse . ".class.php";
}

// NEUE SMS
if(isset($_POST['neuesms_submit']) && isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == 1)
{
	// POST Variablen einlesen und filtern
	$empfaenger = trim($dbcon->real_escape_string(htmlspecialchars($_POST['neuesms_empfaenger'])));
	$nachricht = str_replace('\r\n', ' ', trim($dbcon->real_escape_string(htmlspecialchars($_POST['neuesms_nachricht']))));
	$id_benutzer = $_SESSION['id_benutzer'];
	
	// Zeilenumbrücke aus Nachricht filtern ### FUNKTIONIERT NOCH NICHT!
	$nachricht =  $text = str_replace("\r\n", " ", $nachricht);  
	
	// Verfügbare Credits aus Datenbank auslesen
	$query = "SELECT credits FROM kontigent WHERE benutzer = '$id_benutzer' LIMIT 1";
	$result = $dbcon->query($query) or die($dbcon->error);
	$row = $result->fetch_row();
	$verfuegbare_credits = $row[0];
	
	// Noch tägliche Frei-SMS auslesen
	$query = "SELECT id_smslog FROM smslog WHERE benutzer = '$id_benutzer'";
	$result = $dbcon->query($query) or die($dbcon->error);
	$free_gesendete_sms = 0;
	while($row = $result->fetch_row())
	{
		$free_gesendete_sms++;
	}
	$verfuegbare_free_credits = $taegliche_credits - $free_gesendete_sms;	
	
	// Prüfen ob Handy-Nummer bestätigt ist
	$query = "SELECT id_benutzer FROM benutzer WHERE id_benutzer = '$id_benutzer' AND smsaktiv = '0' LIMIT 1";
	$result = $dbcon->query($query) or die($dbcon->error);
	$row = $result->fetch_row();
	$nicht_freigeschaltet = $row[0];
	
	// Überprüfung der Eingaben durchführen
	$target = "../index.php?page=neue-sms&";
	$regerror = "0";
	if(empty($empfaenger))
	{
		$target .= "nonumber=1&";
		$regerror++;
	}
	elseif(!is_numeric($empfaenger))
	{
		$target .= "badnumber=1&";
		$regerror++;
	}
	
	if(empty($nachricht))
	{
		$target .= "notext=1&";
		$regerror++;
	}	
	elseif(strlen($nachricht) > $max_zeichen)
	{
		$target .= "badtext=1&";
		$regerror++;
	}
	
	if($verfuegbare_credits <= 0 && $verfuegbare_free_credits <= 0)
	{
		$target .= "nocredits=1&";
		$regerror++;
	}
	
	if($nicht_freigeschaltet == 1)
	{
		$target .= "notconfirmed=1&";
		$regerror++;
	}
	
	if($regerror != 0)
	{
		redirect($target);
	}
	else
	{
		// Alles okay, Klasse erstellen
		$neuesms = new SMSTrade($smstrade_key, $smstrade_route, $smstrade_debug);
		
		// Absender aus Datenbank auslesen
		$query = "SELECT handy FROM benutzer WHERE id_benutzer = '$id_benutzer'";
		$result = $dbcon->query($query) or die($dbcon->error);
		$row = $result->fetch_row();
		$absender = $row[0];
		
		// Nachricht Versenden
		if($neuesms->NachrichtSenden($absender, $empfaenger, $nachricht))
		{
			// Bereits gesendete Free-SMS auslesen
			$timestamp_heute1 = date("Y-m-d") . " " . "00:00:00";
			$timestamp_heute2 = date("Y-m-d") . " " . "23:59:59";
			$query = "SELECT benutzer FROM smslog WHERE timestamp BETWEEN '$timestamp_heute1' And '$timestamp_heute2' AND benutzer = '$id_benutzer'";
			$result = $dbcon->query($query) or die($dbcon->error);
			$gesendetefreesms = $result->num_rows;
			
			// Prüfen ob free kontigent genutzt wird
			if($gesendetefreesms >= $taegliche_credits)
			{
				$verfuegbare_credits = $verfuegbare_credits - 1;	
			}
			
			// Daten wieder in Datenbank schreiben
			$query = "UPDATE kontigent SET credits = '$verfuegbare_credits' WHERE benutzer = '$id_benutzer' LIMIT 1";
			$result = $dbcon->query($query) or die($dbcon->error);
			
			// SMS in SMSLOG schreiben
			$timestamp = getTimestamp();
			$query = "INSERT INTO smslog (benutzer, empfaenger, nachricht, timestamp) VALUES ('$id_benutzer', '$empfaenger', '$nachricht', '$timestamp')";
			$result = $dbcon->query($query) or die($dbcon->error);
		}
		else
		{
			redirect("../index.php?page=smsversand-fehlgeschlagen");
			break;
		}
		
		// Redirect - Versand erfolgreich
		redirect("../index.php?page=smsversand-erfolgreich");
		break;
	}
	
}
else
{
	// Umleiten bei Aufruf ohne Werte
	redirect("../index.php?page=startseite");
}

?>

Wo muss ich da was ändern?

Danke & Gruß
 
Das einfachste wäre weiterhin include() zu verwenden. Die nötigen Code-Änderungen habe ich oben beschrieben.

Ja, das wäre vielleicht die einfachste Lösung, aber sie ist in meinen Augen wirklich nicht besonders schön. Code, der so aufgebaut ist, möchte ich nicht anrühren müssen. Das wird enorm undurchsichtig und schwer wartbar.

Was für das Script in der gegenwärtigen Form leider auch gilt… Da sollten dringend Dinge in Methoden/Funktionen gekapselt werden.
 

Neueste Beiträge

Zurück
Oben