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

Funktion

Status
Für weitere Antworten geschlossen.

Mad Dog

Mitglied
hey leute,

ich habe eine funktion geschrieben, die eingaben von usern kontrolliert auf bestimmt kriterien.

Code:
    function checkFormDate($Username, $Password0, $Password1, $Email0, $Email1)
    {
        if (isset($Username))
        {
            if (!preg_match('/^[\w()[\]_.]+$/', $Username))
            {
                echo 'Username: Only a-z,A-Z,0-9, 3 - 30 letters, (), [] und .!<br>';
            }
        }
        else
        {
            echo 'We need at least a Username!<br>';
        }


        if (isset($Password0) AND isset($Password1))
        {
            if (preg_match('/^\w{3,30}$/', $Password1) AND preg_match('/[a-zA-Z]/', $Password1) AND preg_match('/[0-9]/', $Password1))
            {
                if (!($Password0 === $Password1))
                {
                    echo 'Passwords arent the same!<br>';
                }
            }
            else
            {
                echo 'Password: Only a-z,A-Z,0-9, min 3  max 30 letters!<br>
                      At least one letter and one number!<br>';
            }
        }
        else
        {
            echo 'We need at least the passwords!<br>';
        }


        if(isset($Email0) AND isset($Email1))
        {
            if(!($Email0 === $Email1))
            {
                echo 'Emails arent the same!<br>';
            }
        }
        else
        {
            echo 'We need at least the Emails!<br>';
        }
    }
der code check die eingaben, die gemacht wurden. klappt auch alles.
nur jetzt suche ich nach einem weg wie ich kontrollieren kann ob alles true ergeben hat.
weil wenn dies so ist soll das script die eingaben in eine datenbank einfuegen.

also mit kontrolieren meine ich so was in der art:
if(function checkFormDate($Username, $Password0, $Password1, $Email0, $Email1) == true)
{
blablabla
}

koennt ihr mir da helfen??/



danke
 
Zuletzt bearbeitet:
Werbung:
Du könntest bei jedem positiven check ja eine Variable=true setzen und dann diese Variablen abfragen.
If ($pw_richtig==true AND $email_richtig==true AND...)
{bla}

Aber ich bin blutiger Anfänger
 
Werbung:
so das hier scheint zu funktionieren!

Code:
<?php

if ('POST' == $_SERVER['REQUEST_METHOD'])
{
    $Username = trim($_POST['Username']);
    $Password[0]= trim($_POST['Password0']);
    $Password[1] = trim($_POST['Password1']);
    $Email[0] = trim($_POST['Email0']);
    $Email[1] = trim($_POST['Email1']);


    function checkFormDate($Username, $Password0, $Password1, $Email0, $Email1)
    {
        if (isset($Username))
        {
            if (!preg_match('/^[\w()[\]_.]+$/', $Username))
            {
                echo 'Username: Only a-z,A-Z,0-9, 3 - 30 letters, (), [] und .!<br>';
            }
            else
            {
                $CheckUsername = TRUE;
            }
        }
        else
        {
            echo 'We need at least a Username!<br>';
        }


        if (isset($Password0) AND isset($Password1))
        {
            if (preg_match('/^\w{3,30}$/', $Password1) AND preg_match('/[a-zA-Z]/', $Password1) AND preg_match('/[0-9]/', $Password1))
            {
                if (!($Password0 === $Password1))
                {
                    echo 'Passwords arent the same!<br>';
                }
                else
                {
                    $CheckPassword = TRUE;
                }
            }
            else
            {
                echo 'Password: Only a-z,A-Z,0-9, min 3  max 30 letters!<br>
                      At least one letter and one number!<br>';
            }
        }
        else
        {
            echo 'We need at least the passwords!<br>';
        }


        if(isset($Email0) AND isset($Email1))
        {
            if(!($Email0 === $Email1))
            {
                echo 'Emails arent the same!<br>';
            }
            else
            {
                $CheckEmail = TRUE;
            }
        }
        else
        {
            echo 'We need at least the Emails!<br>';
        }
        
        if ($CheckEmail === TRUE AND $CheckUsername === TRUE AND $CheckPassword === TRUE)
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
    
    if (checkFormDate($Username, $Password[0], $Password[1], $Email[0], $Email[1]) === 1)
    {
        echo 'es funktioniert';
    }
    else
    {
        echo 'es geht nicht';
    }
    
}

?>

wenn Username, password email stimmen gibt es "es funktioniert" aus, wenn nicht dann "es geht nicht". und wenn es funktioniert kann ich ja weitermachen mit dem eintragen in die datenbank.

was meinst ihr? saubere oder unsaubere loesung>?
 
Hallo,

man kommt auch mit einer einzigen Variable für die Kontrolle aus.

PHP:
$error = false;

if (...) {
   // passwort ok
} else {
  // passwort stimmt nicht
  $error = true;
}

Also $error auf true setzen, sobald ein Fehler festgestellt wurde.

N43
 
Werbung:
Um noch einen Schritt weiter zu gehen, würde ich der Funktion einen Rückgabewert geben, damit auch eventuelle Aufrufer ausserhalb der Klasse erkennen können, ob alles in Ordnung ist, oder nicht.

PHP:
public function xyz() {
  if(...){
    //OK
    return true;
  } else {
    // Not OK
    return false;
  }
}
 
Werbung:
hihi
ich habe es erst mit return TRUE und return FALSE versucht.
wenn ich aber echo angewandt habe, hat der mir 1 und 0 ausgegeben. habe es dann mit return 1 und return 0 versucht um zu schauen ob des kontrollieren etc ueberhaupt geht.

hab aber was falsch gemacht etc jetzt funzt es aber. mit TRUE und FALSE! xD

trotzdem danke alle zusammen

Mad Dog
 
Du könntest auch ne Klasse validation schreiben und dann jediglich mit

if (!$validation -> error)

arbeiten, so habe ich das gelößt

könnte evtl so aussehen:

PHP:
<?php
class validation {
	var $error_style = array ();
	var $error = false;
	function email ($adresse) {
		if (preg_match ('/^[_a-zA-Z0-9-](.{0,1}[_a-zA-Z0-9-])*@([a-zA-Z0-9-]{2,}.){0,}[a-zA-Z0-9-]{3,}(.[a-zA-Z]{2,4}){1,2}$/', $adresse)) {
			return true;
		} else {
			$this -> add_error ('email');
			return false;
		}
	}
	function username ($name) {
		if (preg_match ('/^[a-zA-Z0-9_\-]{4,15}$/', $name)) {
			return true;
		} else {
			$this -> add_error ('username');
			return false;
		}
	}
	function password ($password, $password2) {
		if (strlen ($password) >= 5 && strlen ($password) <= 30 && $password == $password2) {
			return true;
		} else {
			$this -> add_error ('password');
			return false;
		}
	}
	function add_error ($type) {
		$this -> error = true;
		$this -> error_style[$type] = ' class="error"';
	}
	function return_error_style () {
		return $this -> error_style;
	}
}
?>
Ist natürlich noch erweiterungsfähig. error_style[] könntest du dann jedem input verpassen, und eine CSS klasse .error definieren, die dem input dann roten border etc. gibt
 
hier das ganze nochmal in PHP5 und ohne diese komischen error variablen ^^ sowas gehört nicht in die logik dieser klasse... :p

PHP:
<?php

class isValid {
    public static function Email($adresse) {
        if (!preg_match('/^[_a-zA-Z0-9-](.{0,1}[_a-zA-Z0-9-])*@([a-zA-Z0-9-]{2,}.){0,}[a-zA-Z0-9-]{3,}(.[a-zA-Z]{2,4}){1,2}$/', $adresse)) {
            return false;
        }
        return true;
    }
    
    public static function Username($name) {
        if (!preg_match ('/^[a-zA-Z0-9_\-]{4,15}$/', $name)) {
            return false;
        }
        return true;
    }
    
    public static function Password($password, $password2) {
        if (!(strlen ($password) >= 5 && $password == $password2)) {
            return false;
        }
        return true;
    }
}

// aufruf
if(isValid::Email($email)) {
    echo 'email is ok ;)';
} else {
    echo 'email is nicht ok... :-D';
}

?>

das ganze könnte man natürlich auch weiter treiben... z.b. ne abstrakte validator klasse schreiben und dann für jeden typ ne eigenne klasse oder einfach nur ein interface erstellen und drum herum dann klassen die das prüfen übernehmen so bleibt man immer flexibel und muss fertige klassen nicht nochmal anfassen. ;)


//Edit: ne begränzung der maximalen länge des passworts?... böser junge ;) wenn sich jemand ein 60 zeichen passwort machen will wird er dafür schon seine gründe haben ;) :-D
 
Werbung:
Eine als "static" deklarierte funktion kann immer aufgerufen werden, wenn die klasse geladen ist.

PHP:
require_once('SomeClass.php');
$result = SomeClass::SomeMethod();

dieses wird z.b. in einem Singleton pattern gemacht, durch dieses wird die klasse mit einem bestimmten wert initialisiert der dann ein neues class object zurückgibt oder einfach ein schon bestehendes. sieses sieht so aus

PHP:
<?php

class SomeClass {
    private static $instances = array();
    private $someID = 0;
    
    public function getInstance($someID) {
        if(!array_key_exists($someID, self::$instances)) {
            self::$instances[$someID] = new self;
        }
        return self::$instances[$someID];
    }
    
    private function __construct($someID) {
        $this->someID = $someID;
        $this->doOtherStuff();
    }
    
    private function __copy() {};
    
    /**
     * ...
     */
}

$Some = SomeClass::getInstance(1);
/**
 * do something
 * ...
 */
 
 ?>

hoffe das man mich verstehen kann ^^
 
ja das habe ich verstanden xD
kann man zb. mit der klasse blabla eine funktion aufrufen die in einer anderen klasse (zb blublu) definiert etc ist?

EDIT: oder ist so eine funktion nur dann aufrufbar wenn sie public irgendeinefunktion heisst?
und mit private ist sie nur von der klasse aufrufbar?

das var vor der variablen definitiot sagt der klasse das dies eine variable ist denk ich mal?

was genau ist der vorteil von klassen gegenueber funktionen??
 
Werbung:
du kannst,
private methoden nur aus der klasse aufrufen in der sie stehen,
protected methoden nur aus der klasse in der sie stehen und allen parrent klassen
und public von überall ^^

dazu gibts noch die schlüsselwörter abstract und final welche angeben ob man die klasse überschreiben darf (abstract) oder ob sie nicht angefasst werden darf (final).
 
heutzutage bringt es eigentlich nur vorteile für die entwicklung und nicht für die geschwindigkeit.

anstadt z.b. jedesmal wenn man etwas aus der datenbank auslesen will einen query über mysql_query zu senden kannst du die ganzen querys genausogut in methoden einer klasse packen.

die erweiterung von in OOP gehaltenen projekten ist z.b. sehr einfach, usw...
 
Werbung:
Status
Für weitere Antworten geschlossen.
Zurück
Oben