Walidacja w PHP

0

Taki problem...

Skrypt pomimo funkcji:

elseif(preg_match('/^[a-zA-Z]$/D', $_POST['name']) === false)
		{
			echo '<div class="content">Użyj tylko liter</div>';
		}
 

Nadal rejestruje użytkowników ze wszystkimi znakami w loginie, a nie tylko z literami :( Czy to wina tej funkcji?

0

Wrzuć więcej kodu, to jest trochę za mało.

0

funkcja register:

static public function register()
	{
		require_once 'config.php';
		db_connect();
 
		// sprawdzamy czy user nie jest przypadkiem zalogowany
		if(!$_SESSION['logged']) {
		// jeśli zostanie naciśnięty przycisk "Zarejestruj"
		if(isset($_POST['name'])) {
        // filtrujemy dane...
        $_POST['name'] = clear($_POST['name']);
        $_POST['password'] = clear($_POST['password']);
        $_POST['password2'] = clear($_POST['password2']);
        $_POST['email'] = clear($_POST['email']);
 
        // sprawdzamy czy wszystkie pola zostały wypełnione
        if(empty($_POST['name']) || empty($_POST['password']) || empty($_POST['password2']) || empty($_POST['email'])) {
            echo '<div class="content">Musisz wypełnić wszystkie pola.</div>';
        // sprawdzamy czy podane dwa hasła są takie same
        } elseif($_POST['password'] != $_POST['password2']) {
            echo '<div class="content">Podane hasła różnią się od siebie.</div>';
        // sprawdzamy poprawność emaila
        } elseif(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false) {
            echo '<div class="content">Podany email jest nieprawidłowy.</div>';
        } 
			elseif(preg_match('/^[a-zA-Z]$/D', $_POST['name']) === false)
		{
			echo '<div class="content">Użyj tylko liter</div>';
		}
			else {
            // sprawdzamy czy są jacyś uzytkownicy z takim loginem lub adresem email
            $result = mysql_query("SELECT Count(user_id) FROM `users` WHERE `user_name` = '{$_POST['name']}' OR `user_email` =  '{$_POST['email']}'");
            $row = mysql_fetch_row($result);
            if($row[0] > 0) {
                echo '<div class="content">Już istnieje użytkownik z takim loginem lub adresem e-mail.</div>';
            } else {
                // jeśli nie istnieje to kodujemy haslo...
                $_POST['password'] = codepass($_POST['password']);
                // i wykonujemy zapytanie na dodanie usera
                mysql_query("INSERT INTO `users` (`user_name`, `user_password`, `user_email`, `user_regdate`) VALUES ('{$_POST['name']}', '{$_POST['password']}', '{$_POST['email']}', '".time()."')");
                echo '<div class="content">Zostałeś poprawnie zarejestrowany! Możesz się teraz <a href="login.php"><h2>Zalogować</h2></a></div>';
            }
        }
    }
 
   
} 
 
db_close();
		
	}
 
0

Sprawdź co zwraca funkcja preg_match http://php.net/manual/en/function.preg-match.php

A dlaczego mało, @Panicz74 ?

0

Poradziłem sobie funkcją ereg(). Dlaczego preg_match nie działał?

0

preg_match() returns 1 if the pattern matches given subject, 0 if it does not, or FALSE if an error occurred.

elseif(preg_match('/^[a-zA-Z]$/D', $_POST['name']) === false)

Ty sprawdzasz false, czyli wystapienie błędu. Błąd występuje, gdy wyrażenie regularne jest niepoprawnie skonstruowane.

0

Coś o funkcji ereg, prosto z dokumentacji:

This function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged.

Swoją drogą to Twój kod jest kod dziurawy, radzę go zabezpieczyć przed SQL Injection.
http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php

1 użytkowników online, w tym zalogowanych: 0, gości: 1