Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyrażenia regularne
Forum PHP.pl > Forum > PHP
akurczyk
Utworzyłem formularz rejestracyjny który sprawdza czy podane dane pasują do wzorca, jednak pomimo podania poprawnych danych pierwszy preg_match() zwraca FALSE.

  1. <?php
  2. mysql_connect("localhost", "root", "vertrigo");
  3. mysql_select_db("porady");
  4. mysql_query("SET NAMES 'utf8'");
  5. $wykonaj_zapytanie_login = mysql_query("SELECT * FROM uzytkownicy WHERE login='".addslashes(trim($_POST['login']))."'");
  6. $wykonaj_zapytanie_email = mysql_query("SELECT * FROM uzytkownicy WHERE email='".addslashes(trim($_POST['email']))."'");
  7. if(!isset($_POST['rejestruj'])) {
  8.    echo "<form method=\"post\">";
  9.    echo "<table align=\"center\">";
  10.    echo "<tr>";
  11.    echo "<td align=\"right\">";
  12.    echo "Logi:";
  13.    echo "</td>";
  14.    echo "<td>";
  15.    echo "<input type=\"text\" name=\"login\" maxlenght=\"30\" size=\"30\">";
  16.    echo "</td>";
  17.    echo "</tr>";
  18.    echo "<tr>";
  19.    echo "<td align=\"right\">";
  20.    echo "Hasło:";
  21.    echo "</td>";
  22.    echo "<td>";
  23.    echo "<input type=\"password\" name=\"haslo\" maxlenght=\"30\" size=\"30\">";
  24.    echo "</td>";
  25.    echo "</tr>";
  26.    echo "<tr>";
  27.    echo "<td align=\"right\">";
  28.    echo "Powtórz hasło:";
  29.    echo "</td>";
  30.    echo "<td>";
  31.    echo "<input type=\"password\" name=\"powtorz_haslo\" maxlenght=\"30\" size=\"30\">";
  32.    echo "</td>";
  33.    echo "</tr>";
  34.    echo "<tr>";
  35.    echo "<td align=\"right\">";
  36.    echo "E-mail:";
  37.    echo "</td>";
  38.    echo "<td>";
  39.    echo "<input type=\"text\" name=\"email\" maxlenght=\"50\" size=\"50\">";
  40.    echo "</td>";
  41.    echo "</tr>";
  42.    echo "<tr>";
  43.    echo "<td>";
  44.    echo "</td>";
  45.    echo "<td>";
  46.    echo "<input type=\"submit\" name=\"rejestruj\" value=\"Rejestruj\">";
  47.    echo "</td>";
  48.    echo "</tr>";
  49.    echo "</table>";
  50.    echo "</form>";
  51. } elseif(empty($_POST['login']) || empty($_POST['haslo']) || empty($_POST['powtorz_haslo']) || empty($_POST['email'])) {
  52.    echo "Wszystkie pola muszę być wypełnione!";
  53. } elseif(strlen($_POST['login']) < 3) {
  54.    echo "Podany login jest za krótki!";
  55. } elseif(!preg_match("/^[a-z0-9]$/D", $_POST['login'])) {
  56.    echo "Podany login zawiera niedozwolone znaki!";
  57. } elseif(mysql_num_rows($wykonaj_zapytanie_login) !== 0) {
  58.    echo "Podany login jest już używany!";
  59. } elseif(!preg_match("/^[a-z0-9]$/D", $_POST['haslo'])) {
  60.    echo "Podane hasło zawiera niedozwolone znaki!";
  61. } elseif($_POST['haslo'] !== $_POST['powtorz_haslo']) {
  62.    echo "Pola hasło i powtórz hasło różnią się!";
  63. } elseif(!preg_match("/^[a-zA-Z0-9.-_]+@[a-zA-Z0-9.-_]+.[a-z]{2,4}$/D", $_POST['email'])) {
  64.    echo "Podany adres e-mail jest w nieprawidłowy!";
  65. } elseif(mysql_num_rows($wykonaj_zapytanie_email) !== 0) {
  66.    echo "Podany adres e-mail jest już używany!";
  67. } else {
  68.    mysql_query("INSERT INTO uzytkownicy (id, administrator, login, haslo, email) VALUE (NULL, 'nie',  '".addslashes(trim($_POST['login']))."', '".addslashes(trim($_POST['haslo']))."', '".addslashes(trim($_POST['email']))."')");
  69.    echo "Rejestracja została zakończona powodzeniem!";
  70. }
  71.  
  72. ?>


Proszę o pomoc
delfinium
Podaj jaki login podajesz bo tak to ciężko cokolwiek powiedzieć, z wyrażenia wynika, że dozwolone są jedynie małe litery + cyfry.
akurczyk
akurczyk
delfinium
Taki login powinien przejść. To spróbujmy inną drogą:
1. sprawdź co naprawdę zawiera zmienna $_POST['login'], nóż widelec jest tam coś jeszcze innego, jakaś spacja albo biały znak
2. zamień wyrażenie na
  1. <?php
  2. preg_match("/^[a-z0-9]$/is", $_POST['login'])
  3. ?>
, może to pomoże
akurczyk
dalej nie działa
delfinium
ok, moja wina, pominąłem fakt, że mają być tylko małe litery

spróbuj

  1. <?php
  2. preg_match("/^[0-9a-z]*$/s", $_POST['login'] );
  3. ?>


Ja wpisałem kilka testowych wartości i zdaje się działać.
VGT
we wcześniejszych wersjach błąd polegał na tym, ze pattern pasował tylko do jednoznakowego loginu.
W ostatniej wersji jedynie, zamiast "*", dałbym "+", ewentualnie np {3,}, aby okreslic minimalna ilość znaków dla loginu

***EDIT
Widze, ze dlugosc sprawdzasz osobno, wiec druga linijka mojego postu jest niewazna winksmiley.jpg
akurczyk
to co mam zrobić?questionmark.gifquestionmark.gif?
zimi
Cytat
Ja wpisałem kilka testowych wartości i zdaje się działać.

Cytat
we wcześniejszych wersjach błąd polegał na tym, ze pattern pasował tylko do jednoznakowego loginu.

dopisz ten + lub * tak jak pokazał @delfinum i nie ma prawa nie działać...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.