Formularwerte übergeben

tinella

Erfahrenes Mitglied
Morgen Leute

Ich bin relativ neu in PHP und habe folgendes Problem:

Habe ein Registrationsformular (wird mit PHP überprüft):
Code:
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" name="registrationFormular" onsubmit="return checkFormular()">
	Nickname: <br />
	<input type="text" name="nickname" /><br /><br />
	Passwort: <br />
	<input type="password" name="password" /><br />
	Passwort erneut eingeben:<br />
	<input type="password" name="passwordconfirm"  /><br /><br />
	eMail:<br />
	<input type="text" name="email" /><br />
	eMail erneut eingeben:<br />
	<input type="text" name="emailconfirm" /><br /><br />

	<input type="submit" value="Registrierung abschicken" />
	<input type="hidden" value="1" name="registration" />
</form>

Der user muss zB das Passwort zweimal eingeben. Wenn die zwei Passwörter nicht übereinstimmen, wird nochmals das Formular eingeblendet.
Jetzt ist es so, dass die Felder danach wieder leer sind und der User alles nochmals eingeben muss.

Ich möchte, dass die Felder, die richtig ausgefüllt worden sind, die Feldinhalte behalten (zB der Nickname, etc.) und nicht nochmals durch den User eingefüllt werden müssen!

Hier werden die Felder überprüft:
Code:
$registrationErrors = array();
if ($_REQUEST['registration']) {
	if(trim($nickname) != "" && trim($password) != "" && trim($passwordconfirm) != "" && trim($email) != "" && trim($emailconfirm) != ""){			
		if ($password != $passwordconfirm) {
			$registrationErrors[] = 'Es wurden zwei verschiedene Passw&ouml;rter eingegeben!';
		} else {
			if (preg_match("%^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$%", $email)) {
				
				if ($email != $emailconfirm) {
					$registrationErrors[] = 'Es wurden zwei verschiedene eMail Adressen eingegeben!';
				} else {
					// Save User-Registration Datas!
					$saveRegistration = $DB->Execute("INSERT INTO fdw_users (user_nickname, user_password, user_email) 
					VALUES ('".$nickname."', '".md5($password)."', '".$email."')");
					
					// Say user that Registration is resolved!
					$_SESSION['sessionLeftDivContent'] = "registrationResolved";
					}
			} else {
				$registrationErrors[] = 'Bitte geben Sie eine g&uuml;ltige eMailadresse ein!';
				}
		}
	} else {
	$registrationErrors[] = 'Sie m&uuml;ssen alle Felder ausf&uuml;llen!'; 
		}

Wie mache ich das? Hätte mir jemand einen Ansatz?
 
Session Funktion Ist das richtige was du suchst ;):)

http://de.php.net/manual/de/function.session-start.php
Und dan im forumlar value="$_SESSION[name]" u.s.w eingeben dan wirds schon funktionieren
Code:
form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" name="registrationFormular" onsubmit="return checkFormular()">
	Nickname: <br />
	<input type="text" name="nickname" value="$_SESSION[nickname]" /><br /><br />
	Passwort: <br />
	<input type="password" name="password" /><br />
	Passwort erneut eingeben:<br />
	<input type="password" name="passwordconfirm"  /><br /><br />
	eMail:<br />
	<input type="text" name="email" value="$_SESSION[email]" /><br />
	eMail erneut eingeben:<br />
	<input type="text" name="emailconfirm" value="$_SESSION[emailconfirm]" /><br /><br />

	<input type="submit" value="Registrierung abschicken" />
	<input type="hidden" value="1" name="registration" />
</form>
 
Zuletzt bearbeitet:
Okay... soweit so gut! Trotzdem ist mir noch einiges unklar, wäre toll wenn mir jemand kurz helfen könnte.

Sagen wir ich habe für den Nicknamen die Variable:
Code:
$_SESSION['nicknamevalue']

Ich will zuerst ja, das das Nicknameeingabefeld leer ist!
Code:
<input type="text" name="nickname" value="$_SESSION['nicknamevalue']" /><br /><br />

Dann zeigt es mir im Eingabefeld die Sessionvariable (Sourcecode) an! Wie mache ich das, dass es mir einfach nichts anzeigt?
 
Zuletzt bearbeitet:
Darf er nicht!
Wenn das session nicht gesetzt ist dürfte er nicht die code anzeigen.
Du mußt es ja auch in php einbauen also mußt du es trennen von html code halt z.B
Code:
<input type="text" name="email" value="".$_SESSION[email]."">
 
Hey danke!!

Im Php-Überprüfungsform, muss ich auch auf diese Variablem gehen, oder? Zum Beispiel so? ->

Code:
if(trim( $_SESSION['nickname']) != "" && trim($_SESSION['password']) != "" && trim($_SESSION['passwordconfirm']) != "" && trim($_SESSION['email']) != "" && trim($_SESSION['emailconfirm']) != ""){

Es geht nicht und ich frag mich grad wieso!
 
nein warum... Du willst ja das formular überprüfen und nicht die sessions :)
Also $_POST anweißung benutzen..
PHP:
if(trim( $_POST['nickname']) != "" && trim($_POST['password']) != "" && trim($_POST['passwordconfirm']) != "" && trim($_POST['email']) != "" && trim($_POST['emailconfirm']) != ""){

Edit // ich hab mir das script genau angesehen ist eigentlich schon richtig so wie du machst.
Nur hast du keine $_POST benutzt
Hier mal dein code in $_POST version
PHP:
$registrationErrors = array();
if ($_REQUEST['registration']) {
	if(trim($_POST[nickname]) != "" && trim($_POST[password]) != "" && trim($_POST[passwordconfirm]) != "" && trim($_POST[email]) != "" && trim($_POST[emailconfirm]) != ""){			
		if ($_POST[password] != $_POST[passwordconfirm]) {
			$registrationErrors[] = 'Es wurden zwei verschiedene Passw&ouml;rter eingegeben!';
		} else {
			if (preg_match("%^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$%", $_POST[email])) {
				
				if ($_POST[email] != $_POST[emailconfirm]) {
					$registrationErrors[] = 'Es wurden zwei verschiedene eMail Adressen eingegeben!';
				} else {
					// Save User-Registration Datas!
					$saveRegistration = $DB->Execute("INSERT INTO fdw_users (user_nickname, user_password, user_email) 
					VALUES ('".$_POST[nickname]."', '".md5($_POST[password])."', '".$_POST[email]."')");
					
					// Say user that Registration is resolved!
					$_SESSION['sessionLeftDivContent'] = "registrationResolved";
					}
			} else {
				$registrationErrors[] = 'Bitte geben Sie eine g&uuml;ltige eMailadresse ein!';
				}
		}
	} else {
	$registrationErrors[] = 'Sie m&uuml;ssen alle Felder ausf&uuml;llen!'; 
		}

Ein Tipp von mir:
Ich würd die felder lieber mit JavaScript überprüfen, ob die gesetzt sind oder nicht. Dann hast du auch weniger php code und nicht so ein durcheinander.
 
Zuletzt bearbeitet:
Ja genau richtig, das ist dann auch kompatibel wenn register_globals = OFF ist.
Und wenn die Angaben stimmen einfach die Session setzen z.B.
PHP:
$_SESSION['nick'] = $_POST['nickname'];

session_start() im Formular und in der Überprüfungsdatei ganz oben nicht vergessen !

mfg
 
Ooh das kann doch nicht so schwer sein!!

Also, ich habe mein Skript jetzt wie weiter oben empfohlen angepasst.

Alles was ich jetzt machen will, ist das, dass ich wenn zB zwei verschiedene Passwörter eingegeben wurden, das Registrationsformular nochmals angezeigt wird (funktioniert bereits), ABER mit den entsprechenden Werten welche der User davor in die Felder geschrieben hat! So dass der User nicht nochmals von vorne mit dem Ausfüllen beginnen muss!

Was muss ich tun?

Das ist das Formular:
Code:
 <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" name="registrationFormular" onsubmit="return checkFormular()">
	Nickname: <br />
	<input type="text" name="nickname" value="<?php $_REQUEST['nickname'] ?>" /><br /><br />
	Passwort: <br />
	<input type="password" name="password" value="<?php $_REQUEST['password'] ?>" /><br />
	Passwort erneut eingeben:<br />
	<input type="password" name="passwordconfirm" value="<?php $_REQUEST['passwordconfirm'] ?>" /><br /><br />
	eMail:<br />
	<input type="text" name="email" value="<?php $_REQUEST['email'] ?>" /><br />
	eMail erneut eingeben:<br />
	<input type="text" name="emailconfirm" value="<?php $_REQUEST['emailconfirm'] ?>" /><br /><br />

	<input type="submit" value="Registrierung abschicken" />
	<input type="hidden" value="1" name="registration" />
</form>

Das der Check:
Code:
if ($_REQUEST['registration']) {
	if(trim($_REQUEST['nickname']) != "" && trim($_REQUEST['password']) != "" && trim($_REQUEST['passwordconfirm']) != "" && trim($_REQUEST[email]) != "" && trim($_REQUEST['emailconfirm']) != ""){

		if ($_REQUEST['password'] != $_REQUEST['passwordconfirm']) {
			$registrationErrors[] = 'Es wurden zwei verschiedene Passw&ouml;rter eingegeben!';
			
		} else {
		
			if (preg_match("%^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$%", $email)) {
				
				if ($_REQUEST['email'] != $_REQUEST['emailconfirm']) {
					$registrationErrors[] = 'Es wurden zwei verschiedene eMail Adressen eingegeben!';
				} else {
					// Save User-Registration Datas!
					$saveRegistration = $DB->Execute("INSERT INTO fdw_users (user_nickname, user_password, user_email) 
					VALUES ('".$nickname."', '".md5($password)."', '".$email."')");
					
					// Say user that Registration is resolved!
					$_SESSION['sessionLeftDivContent'] = "registrationResolved";
					}
			} else {
				$registrationErrors[] = 'Bitte geben Sie eine g&uuml;ltige eMailadresse ein!';
				}
		}
	}	
}

Erwarte auf keinen Fall eine fertige Lösung aber im Moment bin ich echt am Anschlag :-/
 
Zuletzt bearbeitet:
Schau mal hier.
Ich hab dir das jetzt komplett fertig gemacht.
PHP:
<?php
session_start();
include("datenbank.php");
echo '<script type="text/javascript">
function checkFormular() {
    if (document.registrationFormular.nickname.value == "") {
    alert("Bitte füllen sie das Feld Nickname aus!");
    document.registrationFormular.nickname.focus();
    return false;  }

    if (document.registrationFormular.password.value == "") {
    alert("Bitte füllen sie das Feld Password aus!!");
    document.registrationFormular.password.focus();
    return false;  }

    if (document.registrationFormular.passwordconfirm.value == "") {
    alert("Bitte füllen sie das Feld PasswordConfirm aus!!");
    document.registrationFormular.passwordconfirm.focus();
    return false;  }

    if (document.registrationFormular.email.value == "") {
    alert("Bitte füllen sie das Feld EMail aus!!");
    document.registrationFormular.email.focus();
    return false;  }

    if (document.registrationFormular.emailconfirm.value == "") {
    alert("Bitte füllen sie das Feld EMailConfirm aus!!");
    document.registrationFormular.emailconfirm.focus();
    return false;  }}
  </script>';
echo '<form action="'.$_SERVER[PHP_SELF].'" method="post" name="registrationFormular" onsubmit="return checkFormular()">
	Nickname: <br />
	<input type="text" name="nickname" value="'.$_SESSION[nickname].'" /><br /><br />
	Passwort: <br />
	<input type="password" name="password" /><br />
	Passwort erneut eingeben:<br />
	<input type="password" name="passwordconfirm"  /><br /><br />
	eMail:<br />
	<input type="text" name="email" value="'.$_SESSION[email].'" /><br />
	eMail erneut eingeben:<br />
	<input type="text" name="emailconfirm" value="'.$_SESSION[emailconfirm].'" /><br /><br />

	<input type="submit" value="Registrierung abschicken" />
	<input type="hidden" value="1" name="registration" />
</form>';

if(isset($_POST[registration])){
$_SESSION[nickname] = $_POST[nickname];
$_SESSION[email] = $_POST[email];
$_SESSION[emailconfirm] = $_POST[emailconfirm];
if($_POST[password]==$_POST[passwordconfirm]){
$ppassword = true;
}else{
$ppassword = false;
}
if($_POST[email]==$_POST[emailconfirm]){
$eemail = true;
}else{
$eemail = false;
}
if($ppassword==false){
echo "Es wurden zwei verschiedene Passw&ouml;rter eingegeben!";
}elseif($eemail==false){
echo "Es wurden zwei verschiedene eMail Adressen eingegeben!";
}elseif($ppassword==true && $eemail==true){
// Überprüfen ob email gültig ist
if (preg_match("%^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$%", $_POST[email])){
                   // Abspeichern in Datenbank
		   $saveRegistration = $DB->Execute("INSERT INTO fdw_users (user_nickname, user_password, user_email)
                    VALUES ('".$_POST[nickname]."', '".md5($_POST[password])."', '".$_POST[email]."')");
echo " Danke für die Registrierung";
//Hiermit Werden Alle Session Gelöscht.
session_unset();
}else{
echo "Bitte geben Sie eine g&uuml;ltige eMailadresse ein!";
}
}
}
?>
schau dir das code gut an. Es wird dir beim nächsen mal sicher weiterhelfen. ;)
Grüße
 
Zuletzt bearbeitet:
Zurück