Fehler bei Formularübergabe

philishake

javascript enthusiast
Hi liebe Community,

ich habe ein recht witziges Problem. Ich habe ein Formular für die Registrierung eines Browsergames. Da muss man Nickname, Passwort+Kontrolle, E-Mail+Kontrolle und Häuptlingsgeschlecht angeben. Nur Leider gibt er wenn ich es überliefere a) immer aus das keine E-Mailadresse angegeben wurde und b) meckert er nicht, dass das Häuptlingsgeschlecht nicht gewählt wurde.

Das Formular:
HTML:
<form action="anmelden2.php" method="POST">
<table border=0>
<tr> <td> <input type="text" name="nick" size="20"> 			 </td> <td> Username*             </td> </tr>
<tr> <td> <input type="text" name="email" size="20"> 			 </td> <td> E-Mail Adresse        </td> </tr>
<tr> <td> <input type="text" name="email2" size="20"> 		 </td> <td> E-Mail Wiederholung   </td> </tr>
<tr> <td> <input type="password" name="password" size="20"> 	 </td> <td> Passwort              </td> </tr>
<tr> <td> <input type="password" name="password2" size="20"> </td> <td> Passwort Wiederholung </td> </tr>
<tr> <td> H&auml;uptling: </td> <td> <input type="radio" name="gender" value="male"> m&auml;nnlich  </td> </tr>
<tr> <td> <input type="submit" value="Anmelden" /> </td> <td> <input type="radio" name="gender" value="female"> weiblich     </td> </tr>
</table>

Das PHP-Skript:
PHP:
$error = array();
$e = 0;

if($_REQUEST['nick'] == "")                                    { $error[1] = "Nickname wurde nicht angegeben<br>";     $e = 1; }

if($_REQUEST['email'] == "" OR $_REQUEST['email2'] == "") { $error[2] = "E-Mail wurde nicht angegeben<br>";       $e = 1; }
if($_REQUEST['email'] != $_REQUEST['email2'])              { $error[3] = "E-Mails stimmen nicht &uuml;berein<br>"; $e = 1; }

if($_REQUEST['passowrd'] == "" OR $_REQUEST['passowrd2'] == "") { $error[4] = "Passwort wurde nicht angegeben<br>"; $e = 1; }
if($_REQUEST['password'] != $_REQUEST['password2'])              { $error[5] = "Passw&ouml;rter stimmen nicht &uuml;berein<br>"; $e = 1; }


if(isset($_REQUEST['gender'])) { $error[4] = "Kein H&auml;uptlingsgeschlecht gewählt<br>"; $e = 1; } 
					
// Prüfe Nickname Länge
$check_nick_lenght = strlen($_REQUEST['nick']);
if($check_nick_lenght > 21) { $error[6] = "Nickname ist zu lang<br>"; $e = 1; }
if($check_nick_lenght < 4)  { $error[7] = "Nickname ist zu kurz<br>"; $e = 1; }
// Prüfe Nickname auf Leerzeichen
$check_nick = strrpos($_REQUEST['nick']," ");
if($check_nick == "") { $check_nick = 0; }
if($check_nick >= 1)  { $error[8] = "Nickname enth&auml;lt Leerzeichen<br>"; $e = 1;  }
// Prüfe Mail auf @
$check_mail_at = strrpos($_REQUEST['email'],"@");
if($check_mail_at == 1) { $check_mail_at = 0; }
if($check_mail_at == "")  { $error[9] = "E-Mail enth&auml;lt kein \"@\"<br>"; $e = 1;  }
// Prüfe Mail auf .
$check_mail_dot = strrpos($_REQUEST['email'],".");
if($check_mail_dot == 1) { $check_mail_dot = 0; }
if($check_mail_dot == "")  { $error[10] = "E-Mail enth&auml;lt kein \".\"<br>"; $e = 1;  }


if($e == 1)
{
	print("<font color=yellow>");
	if($error[1] != "") { print($error[1]."<br>"); }
	if($error[2] != "") { print($error[2]."<br>"); }
	if($error[3] != "") { print($error[3]."<br>"); }
	if($error[4] != "") { print($error[4]."<br>"); }
	if($error[5] != "") { print($error[5]."<br>"); }
	if($error[6] != "") { print($error[6]."<br>"); }
	if($error[7] != "") { print($error[7]."<br>"); }
	if($error[8] != "") { print($error[8]."<br>"); }
	if($error[9] != "") { print($error[9]."<br>"); }
	if($error[10] != "") { print($error[10]."<br>"); }
	print("</font><br>");

Danke schon mal im vorraus, für alle Antworten.

MfG philishake
 
Mittlerweile gibt er alle Fehler richtig aus. Aber er sagt mir immer, dass kein 2tes PW oder MAIL angegeben wurde und das die nicht übereinstimmen. Und er meckert nun auch, wenn kein Häuptlingsgeschlecht gewählt wurde. Aber wie geasgt, der Rest stimmt nicht.
 
Zuletzt bearbeitet:
Hallo,
erst einmal solltest Du das Formular schließen,
dann von (Geschlecht)
Code:
if(isset($_REQUEST['gender'])) { $error[4] = "Kein H&auml;uptlingsgeschlecht gewählt<br>"; $e = 1; }
nach
Code:
if(!isset($_REQUEST['gender'])) { $error[4] = "Kein H&auml;uptlingsgeschlecht gewählt<br>"; $e = 1; }
und von (Password)
Code:
if($_REQUEST['passowrd'] == "" OR $_REQUEST['passowrd2'] == "") { $error[4] = "Passwort wurde nicht angegeben<br>"; $e = 1; }
nach
Code:
if($_REQUEST['password'] == "" OR $_REQUEST['password2'] == "") { $error[4] = "Passwort wurde nicht angegeben<br>"; $e = 1; }
Die email läuft bei mir.
 
Okay, ich bin wieder einen Schritt weiter. Nun werden nurnoch diese Fehler ausgegen, trotz(!) korrekter Ausfüllung des Formulars:

HTML:
E-Mail enthält kein "@"
E-Mailcheck enthält kein "@"
Passwort wurde nicht angegeben

Hier der aktuelle PHP-Code:

PHP:
<?
$error = array();
$e = 0;

if($_REQUEST['nick'] == "")                                    { $error[1] = "Nickname wurde nicht angegeben<br>";     $e = 1; }

if($_REQUEST['email'] == "" OR $_REQUEST['email2'] == "") { $error[2] = "E-Mail wurde nicht angegeben<br>";       $e = 1; }
if($_REQUEST['email'] != $_REQUEST['email2'])              { $error[3] = "E-Mails stimmen nicht &uuml;berein<br>"; $e = 1; }

if($_REQUEST['passowrd'] == "" OR $_REQUEST['passowrd2'] == "") { $error[4] = "Passwort wurde nicht angegeben<br>"; $e = 1; }
if($_REQUEST['password'] != $_REQUEST['password2'])              { $error[5] = "Passw&ouml;rter stimmen nicht &uuml;berein<br>"; $e = 1; }


if(isset($_REQUEST['gender'])) {  } 
else { $error[11] = "Kein H&auml;uptlingsgeschlecht gew&auml;hlt<br>"; $e = 1; }
					
// Prüfe Nickname Länge
$check_nick_lenght = strlen($_REQUEST['nick']);
if($check_nick_lenght > 21) { $error[6] = "Nickname ist zu lang<br>"; $e = 1; }
if($check_nick_lenght < 4)  { $error[7] = "Nickname ist zu kurz<br>"; $e = 1; }
// Prüfe Nickname auf Leerzeichen
$check_nick = strrpos($_REQUEST['nick']," ");
if($check_nick == "") { $check_nick = 0; }
if($check_nick >= 1)  { $error[8] = "Nickname enth&auml;lt Leerzeichen<br>"; $e = 1;  }
// Prüfe Mail auf @
$check_mail_at = strrpos($_REQUEST['email'],"&");
if($check_mail_at == 1) { $check_mail_at = 0; }
elseif($check_mail_at == "")  { $error[9] = "E-Mail enth&auml;lt kein \"@\"<br>"; $e = 1;  }
// Prüfe Mail auf .
$check_mail_dot = strrpos($_REQUEST['email'],".");
if($check_mail_dot == 1) { $check_mail_dot = 0; }
elseif($check_mail_dot == "")  { $error[10] = "E-Mail enth&auml;lt kein \".\"<br>"; $e = 1;  }
// Prüfe Mail2 auf @
$check_mail_at = strrpos($_REQUEST['email2'],"&");
if($check_mail_at == 1) { $check_mail_at = 0; }
elseif($check_mail_at == "")  { $error[12] = "E-Mailcheck enth&auml;lt kein \"@\"<br>"; $e = 1;  }
// Prüfe Mai2l auf .
$check_mail_dot = strrpos($_REQUEST['email2'],".");
if($check_mail_dot == 1) { $check_mail_dot = 0; }
elseif($check_mail_dot == "")  { $error[13] = "E-Mailcheck enth&auml;lt kein \".\"<br>"; $e = 1;  }



if($e == 1)
{
	print("<font color=yellow>");
	print($error[1]);
	print($error[6]);
	print($error[7]);
	print($error[8]);
	print($error[2]);
	print($error[3]);
	print($error[9]);
	print($error[10]);
	print($error[12]);
	print($error[13]);
	print($error[4]);
	print($error[5]);
	print($error[11]);
	print("</font><br>");

	?>
	<form action="anmelden2.php" method="post">
	<table border=0>
    <tr> <td> <input type="text" name="nick" size="20" value=<?=$_REQUEST['nick']?>> 	</td> <td> Username*             </td> </tr>
    <tr> <td> <input type="text" name="email" size="20" value=<?=$_REQUEST['email']?>> </td> <td> E-Mail Adresse        </td> </tr>
    <tr> <td> <input type="text" name="email2" size="20" value=<?=$_REQUEST['email2']?>> 		 </td> <td> E-Mail Wiederholung   </td> </tr>
    <tr> <td> <input type="password" name="password" size="20" value=<?=$_REQUEST['password']?>> 	 </td> <td> Passwort              </td> </tr>
    <tr> <td> <input type="password" name="password2" size="20" value=<?=$_REQUEST['password2']?>> </td> <td> Passwort Wiederholung </td> </tr>
    <tr> <td> H&auml;uptling: </td> <td> <input type=radio name=gender value=male> m&auml;nnlich  </td> </tr>
    <tr> <td> <input type="submit" value="Anmelden" /> </td> <td> <input type=radio name=gender value=female> weiblich     </td> </tr>
    </table>
    <br>
    *Maximal 4-21 Zeichen <br>
    *Erlaubt sind folgende Zeichen: a-z | A-Z | 0-1 | - und _<br>
    *Der Nickname darf <b>keine</b> Leerzeichen enthalten <br>
    </form>   
    <?php

}
else
{
	//include ("anmelden_inc.php"); 
	print("ALLES OK");
}
 
Ok, habs nun selbst hinbekomment. Hatte bei strpos() anstatt @ ein & eingesetzt. Das Password wurde nicht übergeben weil ich nach "passowrd" und nicht nach "password" fragt. Danke an BladeRunner :)
 
Zuletzt bearbeitet:
Du kannst es dir auch etwas bequemer machen, in dem du die Überprüfung der Werte automatisiert, beispielsweise:
PHP:
<?php

	$errors = array();
	$required = array(
		'_POST' => array(
			'nick'      => 'Nickname wurde nicht angegeben!',
			'email'     => 'E-Mail wurde nicht angegeben!',
			'email2'    => 'Wiederholung der E-Mail-Adresse wurde nicht angegeben!',
			'password'  => 'Passwort wurde nicht angegeben!',
			'password2' => 'Wiederholung des Passworts wurde nicht angegeben!',
			'gender'    => 'Kein Häuptlingsgeschlecht ausgewählt!',
		),
	);

	if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
		foreach( $required as $method => $args ) {
			if( isset($GLOBALS[$method]) {
				foreach( $args as $key => $val ) {
					if( !isset($GLOBALS[$method][$key]) || trim($GLOBALS[$method][$key]) == '' ) {
						$errors[] = $val;
					}
				}
			}
		}

		if( empty($errors) ) {
			if( $_POST['email'] != $_POST['email2'] ) {
				$errors[] = 'Die angegebene E-Mail-Adresse und die Bestätigung dieser stimmen nicht überein!';
			}
			if( $_POST['password'] != $_POST['password2'] ) {
				$errors[] = 'Das angegebene Passwort und die Bestätigung dieses stimmen nicht überein!';
			}
			// Prüfe Nickname-Länge
			$check_nick_lenght = strlen($_POST['nick']);
			if( $check_nick_lenght > 21 ) {
				$errors[] = "Nickname darf höchstens 21 Zeichen lang sein!";
			}
			if( $check_nick_lenght < 4 ) {
				$errors[] = "Nickname muss mindestens 4 Zeichen lang sein!";
			}
			// Prüfe Nickname auf Leerzeichen
			if( preg_match('/\s/', $_POST['nick']) ) {
				$errors[] = "Nickname darf keine Leerzeichen enthalten!";
			}
			// Prüfe E-Mail-Syntax
			if( !preg_match('/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,5}$/', $_POST['email']) ) {
				$errors[] = 'E-Mail-Adresse muss das Muster <code>user@example.net</code> haben!";
			}
		}
	}

	if( !empty($errors) ) {
		echo '<div class="note error"><ul>';
		echo '<li>'.explode('</li><li>', $errors).'</li>';
		echo '</ul></div>';
?>
    <form action="anmelden2.php" method="post"> 
    <table border=0> 
    <tr> <td> <input type="text" name="nick" size="20" value="<?php echo isset($_POST['nick']) ? htmlspecialchars($_POST['nick']) : ''; ?>">     </td> <td> Username*             </td> </tr> 
    <tr> <td> <input type="text" name="email" size="20" value="<?php echo isset($_POST['email']) ? htmlspecialchars($_POST['email']); ?>"> </td> <td> E-Mail-Adresse        </td> </tr> 
    <tr> <td> <input type="text" name="email2" size="20" value="">          </td> <td>Bestätigung der E-Mail-Adresse   </td> </tr>
    <tr> <td> <input type="password" name="password" size="20" value="">      </td> <td> Passwort              </td> </tr> 
    <tr> <td> <input type="password" name="password2" size="20" value=""> </td> <td> Bestätigung des Passworts </td> </tr> 
    <tr> <td> Häuptling: </td> <td> <input type="radio" name="gender" value="male"> männlich  </td> </tr> 
    <tr> <td> <input type="submit" value="Anmelden" /> </td> <td> <input type="radio" name="gender" value="female"> weiblich     </td> </tr>
    </table> 
    <br> 
    *Maximal 4-21 Zeichen <br> 
    *Erlaubt sind folgende Zeichen: a-z | A-Z | 0-1 | - und _<br> 
    *Der Nickname darf <b>keine</b> Leerzeichen enthalten <br> 
    </form>    
<?php

	} else {

		// include ("anmelden_inc.php");
		print("ALLES OK"); 
	}

?>
Ich hoffe es klappt.
 

Neue Beiträge

Zurück