| 

.NET C# Java Javascript Exception

2
Arbeite mich seit paar Tagen in PHP ein.... suche eine Möglichkeit Fehler abzufragen ob diese nicht leer sind und ob diese gültige Symbole verwenden. Dies ist natürlich bei Usernamen, Emails, Passwärtern immer verschieden. Besser bekam ich es nicht hin :/

if(isset($_POST["gesendet"]))
{
$fehler = 0;
$fehlertext = "";
if (!isset($_POST['vorname']) Or Trim($_POST['vorname']) == "")
{
$fehler = 1;
$fehlertext = "Bitte geben Sie Ihren Vornamen an.<br />";
echo $fehlertext;
}
else
{
if (ValidField($_POST["vorname"], 'Username_Valid'))
{
echo "Vorname ok <br />";
}
else
{
echo "Vorname ungueltig <br />";
$fehler = 1;
}
}

if (!isset($_POST['nachname']) Or Trim($_POST['nachname']) == "")
{
$fehler = 1;
$fehlertext = "Bitte geben Sie Ihren Nachnamen an.<br />";
echo $fehlertext;
}
else
{
if (ValidField($_POST["nachname"], 'Username_Valid'))
{
echo "Nnachname ok <br />";
}
else
{
echo "Nachname ungueltig <br />";
$fehler = 1;
}
}

if (!isset($_POST['email']) Or Trim($_POST['email']) == "")
{
$fehler = 1;
$fehlertext = "Bitte geben Sie Ihren Email an.<br />";
echo $fehlertext;
}
else
{
if (ValidField($_POST["email"], 'Email_Valid'))
{
echo "Email ok <br />";
}
else
{
echo "Falsches E-Mail-Format <br />";
$fehler = 1;
}
}

if (!isset($_POST['password']) Or Trim($_POST['password']) == "")
{
$fehler = 1;
$fehlertext = "Bitte geben Sie Ihren Password an.<br />";
echo $fehlertext;
}
else
{
if (ValidField($_POST["password"], 'Password_Valid'))
{
echo "Password ok <br />";
}
else
{
echo "Password muss 4 bis 12 Stellen haben. 1 Nummer 1 Buchstaben und darf alle Nummern, Buchstaben und !@#$% besitzen <br />";
$fehler = 1;
}
}


If ($fehler == 0)
{
echo "Vielen Dank für die Registrierung. Wir melden uns in kürze";
//mail("thomas.theis@t-online.de", $_POST["betreff"], $_POST["nachricht"], "From: " . $_POST["absender"]);
}
}

function ValidField($data, $option)
{
switch($option)
{
case 'Email_Valid':
if (preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/', $data))
{
//echo 'Die E-Mail ist OK.';
return 1;
}
else
{
//echo 'Falsches E-Mail-Format';
return 0;
}
break;
case 'Username_Valid':
if ( preg_match('/^[a-z\d_]{5,20}$/i', $data))
{
//echo 'Username ist OK.';
return 1;
}
else
{
//echo 'Username-Format ist nicht OK.';
return 0;
}
break;
case 'Domain_Valid':
if (preg_match('/^(http|https|ftp):\/\/([A-Z0-9][A-Z0-9_-]*(?:\.[A-Z0-9][A-Z0-9_-]*)+):?(\d+)?\/?/i', $data))
{
//echo 'Deine URL ist OK.';
return 1;
}
else
{
//echo 'Falsche URL.';
return 0;
}
case 'Password_Valid':
if (preg_match('/^(?=.*\d)(?=.*[A-Za-z])[0-9A-Za-z!@#$%]{4,12}$/', $data))
{
//echo "Password okay";
return 1;
}
else
{
//echo 'Password muss mindestens ...';
return 0;
}
}
}
15.07.2013
Blackstore 113 5
2 Antworten
1
Hi,
ich habe mir jetzt nicht den Sinn deines Codes angeschaut, ich gehe mal davon aus dass du hier entsprechende Vorgaben hast.

Grundsätzlich kannst du aber gleiche Codezeilen einsparen. Das macht das ganze schon deutlich kürzer und wartbarer.

Ich persönlich würde hier aber entweder eine Klasse draus machen, oder schauen ob es in Frameworks wie z.B. Zend oder PEAR (http://pear.php.net/packages.php) nicht schon was fertiges gibt.

Gruß Jens

if(isset($_POST["gesendet"])) {
$fehler = 0;
$fehlertext = "";
$tmpArrayCheck = array('vorname' => 'Username_Valid',
'nachname' => 'Username_Valid',
'email' => 'Email_Valid',
'password' => 'Password_Valid');
$tmpArrayError1 = array('vorname' => 'Bitte geben Sie Ihren Vornamen an.<br />',
'nachname' => 'Bitte geben Sie Ihren Nachnamen an.<br />',
'email' => 'Bitte geben Sie Ihren Email an.<br />',
'password' => 'Bitte geben Sie Ihren Password an.<br />');
$tmpArrayError2 = array('vorname' => 'Vorname ungueltig <br />',
'nachname' => 'Nachname ungueltig <br />',
'email' => 'Falsches E-Mail-Format <br />',
'password' => 'Password muss 4 bis 12 Stellen haben. 1 Nummer 1 Buchstaben und darf alle Nummern, Buchstaben und !@#$% besitzen <br />');
$tmpArrayOk = array('vorname' => 'Vorname ok <br />',
'nachname' => 'Nachname ok <br />',
'email' => 'Email ok <br />',
'password' => 'Password ok<br />');

foreach ($tmpArrayCheck AS $field => $checkField) {
if (!isset($_POST[$field]) Or Trim($_POST[$field]) == "") {
$fehler = 1;
echo $tmpArrayError1[$field];
}
else {
if (ValidField($_POST[$field], $checkField)){
echo $tmpArrayOk[$field];
}
else {
$fehler = 1;
echo $tmpArrayError2[$field];
}
}
}
if ($fehler == 0) {
echo "Vielen Dank für die Registrierung. Wir melden uns in kürze";
//mail("thomas.theis@t-online.de", $_POST["betreff"], $_POST["nachricht"], "From: " . $_POST["absender"]);
}
}

function ValidField($data, $option) {
switch($option) {
case 'Email_Valid':
$suchmuster = '/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/';
break;
case 'Username_Valid':
$suchmuster = '/^[a-z\d_]{5,20}$/i';
break;
case 'Domain_Valid':
$suchmuster = '/^(http|https|ftp):\/\/([A-Z0-9][A-Z0-9_-]*(?:\.[A-Z0-9][A-Z0-9_-]*)+):?(\d+)?\/?/i';
break;
case 'Password_Valid':
$suchmuster = '/^(?=.*\d)(?=.*[A-Za-z])[0-9A-Za-z!@#$%]{4,12}$/';
break;
}
if ( preg_match($suchmuster, $data)) {
// Suchergebniss okay
return TRUE;
}
// Suchergebniss nicht okay
return FALSE;
}
15.07.2013
XJenso 322 7
Danke schön. Es dient zur Zeit nur meinem Verständnis da ich mich gerade erst einarbeite. Mir ist klar das man dies wesentlich besser lösen kann, erst recht mit externen Frameworks aber dabei lerne ich nicht das " basteln " :)
Blackstore 15.07.2013
0
Wie bereits erwähnt, DRY-Prinzip verwenden.
Die Funktion isset() liefert false, wenn das Array-Element existiert und mit NULL gefüllt ist.
Nicht immer das, was man erwartet. Dafür scheint isset() schneller zu sein.

class Model {
private $attributes = array(
'vorname' => array(
'pre' => '/^[a-z\d_]{5,20}$/i',
'msg' => 'Bitte geben Sie Ihren Vornamen an.'
),
'nachname' => array(
'pre' => '/^[a-z\d_]{5,20}$/i',
'msg' => 'Bitte geben Sie Ihren Nachnamen an.'
),
'email' => array(
'pre' => '/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/',
'msg' => 'Bitte geben Sie Ihre E-Mail Adresse an.'
),
'password' => array(
'pre' => '/^(?=.*\d)(?=.*[A-Za-z])[0-9A-Za-z!@#$%]{4,12}$/',
'msg' => 'Bitte geben Sie Ihren Kennwort an.'
)
);

public function &validate ( $attribute, $value ) {
if ( false === array_key_exists($attribute, $this->attribute) )
throw new Exception('Das Attribut ' . $attribute . ' ist nicht definiert.');

if ( preg_match($this->attributes[$attribute]['pre'], $value) )
return $this;

throw new Exception($this->attributes[$attribute]['msg']);
}
}

if ( true === array_key_exists('gesendet', $_POST) ) {
$fehler = 0;
$model = new Model();

foreach ( array('vorname', 'nachname', 'email', 'password') as $attribute ) {
try {
if ( true === array_key_exists($attribute, $_POST) )
$model->validate($attribute, $_POST[$attribute]);
} catch ( Exception $e ) {
$fehler++;
echo $e->getMessage() . '<br>';
}
}

if ( 0 === $fehler ) {
// ...
}
}


Als kleines Bonbon erlaubt die validate-Methode folgendes:
try {
$model->validate('vorname', $_POST['vorname'])
->validate('nachname', $_POST['nachname'])
->validate('email', $_POST['email'])
->validate('password', $_POST['password']);
} catch ( Exception $e ) {
echo $e->getMessage() . '<br>';
}


... wenn man es braucht ;-)
15.07.2013
Patrick-Oliver 81 1 1

Stelle deine Php-Frage jetzt!