preg-match gibt immer "0" zurück, auch wenn es "1" sein müsste

alexbot

Mitglied
Hallo,
ich habe folgendes Problem, bei folgendem Codeauszug, aus einem Regestrierungsprozess,
bekomme ich von Preg_Match immer eine Null zurück, egal ob die 0 berechtigt ist, oder ich eine
1 bekommen müsste und die IF-Abfrage folglich nicht ausgeführt würde. Wird der Script nicht weiter ausgeführt,
da die VAR $status einen Wert erhält.
Ich habe alles ausprobiert, die Zeichen die den Begin und das Ende des Suchmusters anzeigen entfernt und hinzugefügt.
Es Ändert sich gar nichts. Immer ist der Back-Wert von Prag_Match =0
Auch wenn Man die Eingaben im Formular richtig Richtig oder absichtlich falsch macht immer Null.

Hat jemand eine Idee voran das liegen kann.

Danke für eure Hilfe
Gruß Alex

PHP:
if (!empty($_POST['coname'])) {
		$coname = trim ($_POST['coname']);
		$pass = trim ($_POST['pass']);
		$pass1 = trim ($_POST['pass1']);
		$vorname = trim ($_POST['vorname']);
		$nachname = trim ($_POST['nachname']);
		$email = trim ($_POST['email']);
		$tag = trim ($_POST['tag']);
		$monat = trim ($_POST['monat']);
		$jahr = trim ($_POST['jahr']);
		$muster = "/^[a-zA-Z0-9-_.]{4.15}$/";
		$musteremail = "/^[a-zA-Z0-9-_.]+@[a-zA-Z0-9-_.]+\.[a-zA-Z]{2.4}$/"; 
		$musterdate = "/^[0-9]{2.2}$/";
		// Gültigkeit der Eingaben Prüfen
		if (preg_match($muster, $coname) == 0) {
			$status .= "bN";//Benutzername nicht gültig. Mindestens 4, maximal 15 Zeichen A-Z, a-z, 0-9 und -_. zugelassen!";
			echo preg_match($muster, $coname);
		}
		if (preg_match($muster, $pass) == 0) {
			$status .= "PASS"; //Passwort nicht gültig. Es sind nur die Zeichen A-Z, a-z, 0-9 und -_. zugelassen!";
		}
		if (preg_match($muster, $pass1) == 0) {
			$status .= "PASS1"; //Passwortwiederholung nicht gültig. Es sind nur die Zeichen A-Z, a-z, 0-9 und -_. zugelassen!";
		}
		if (preg_match($muster, $vorname) == 0) {
			$status .= "VN"; //Vorname nicht gültig. Es sind nur die Zeichen A-Z, a-z, 0-9 und -_. zugelassen!";
		}
		if (preg_match($muster, $Nachname) == 0) {
			$status .= "NN"; //Nachname nicht gültig. Es sind nur die Zeichen A-Z, a-z, 0-9 und -_. zugelassen!";
		}
		if (preg_match($musteremail, $email) == 0) {
			$status .= "EMail"; //E-Mail Adresse ist ungültig. Es sind nur die Zeichen A-Z, a-z, 0-9 und -_. zugelassen!";
                }

... danch kommen noch weitere Codezeilen. Aber die haben mit dem Problem ja nicht zu tun. Vorgehensweise: Werte aus dem Formular übernehmen, Trimmen, und mit Preg_Match testen.
 
Setz mal in die If-Clauses anstatt 2 ->3<- Gleichheitszeichen.

http://www.strassenprogrammierer.de/php-drei-gleichheitszeichen-f%fcr-mehr-sicherheit_tipp_397.html
PHP:
//Oder lass gleich den Vergleich mit etwas weg
//zB
if(preg_match($pattern,$string))
  {echo "Gefunden";}
else
  {echo "Nicht gefunden";}

// bzw

if(!preg_match($pattern,$string))
  {echo "Nicht gefunden";}
else
  {echo "Gefunden";}


Und: Müsste es nicht ein Komma sein?
PHP:
//anstatt
$muster = "/^[a-zA-Z0-9-_.]{4.15}$/";
//lieber
$muster = "/^[a-zA-Z0-9-_.]{4,15}$/";

mfg chmee
 
Danke, so einfach, natürlich der Punkt statt dem Komma das war der Große Fehler.

Also jetzt gehts hab vor lauter Bäumen den Wald nicht gesehen ;-)

Gruß aleX
 
Setz mal in die If-Clauses anstatt 2 ->3<- Gleichheitszeichen.

Warum sollte er das tun? Ist das Return etwa identisch und gleichen Types wie 1 oder 0?

preg_match gibt auch keine 0/1 zurück, sondern einen Boolischen Wert (True/False)

Was du machen könntest wäre folgendes:

$var = preg_match (............);
if ($var == false)
{
[...]
}

Deine Syntax habe ich jetzt nicht geprüft, sollte die falsch sein, kann dein falsches Ergebniss auch daran liegen
 
Schön, dass Du dann weitergelesen hast und ich auch darauf verwiesen habe, die If-Clause direkt auf True/False anzuwenden. Damit ist auch das Zwischenspeichern in einer var unnötig. Abgesehen davon war der Fehler woanders.. Nun denn..

mfg chmee

p.s.: Es heisst boole'sch.
 
Dennoch gibt preg_match im Normalfall eben KEINEN boole'schen Wert, sondern eben 1 bzw. 0 zurück, und nur dann false, wenn ein Fehler auftritt.

so, </klugermode>
 
es sollte </klugschei*ermode> heißen -.- blöder schimpfwortfilter ^^

sry für doppelpost
 
Meine Güte, wie wichtig es manchen wohl ist, Recht zu bekommen.. Bofh1337 hat Recht, weil die 3 Gleichheitszeichen Hier nix bringen. Ich hab eben nicht gleich mal im php-manual nachgeschaut, sondern erst nach dem Threadschreiben. Aber dass ich in einem Thread gleich 3 Hilfen anbiete (von der lediglich eine fürn Eimer ist), dass wollt Ihr übersehen?!

mfg chmee
 
Zurück