Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Wyrażenia regularne - błąd w przypadku stosowania polskich znaków
Forum PHP.pl > Forum > Przedszkole
Mikele7
Witam. Robię właśnie panel rejestracyjny na stronę i chcę przy sprawdzaniu poprawnosci danych dodać wyrażenia regularne. Otóż udało się, jednak w przypadku gdy jako pierwsza litera występuje polski znak to wywala mi błąd. Natomiast gdy polski znak znajduje się dalej to nie ma problemu. Proszę o wyjaśnienie w czym jest problem?

  1. <?php
  2.  
  3. require_once('includes/config.inc.php');
  4. $page_title = 'Rejestracja';
  5. include ('includes/header.html');
  6.  
  7. if(isset($_POST['submitted'])){
  8. require_once(MYSQL);
  9.  
  10. $trimmed = array_map('trim', $_POST);
  11. $fn = $ln = $e = $p = FALSE;
  12.  
  13. if(preg_match('/^[A-ZŁŚ]{1}+[a-ząęółśćżźń\'.-]{1,19}$/i', $trimmed['first_name'])){
  14. $fn = mysqli_real_escape_string($dbc, $trimmed['first_name']);
  15. }else{
  16. echo '<p class="error">Proszę podać poprawne imię</p>';
  17. }
  18.  
  19. if(preg_match('/^[A-ZŁŚ]{1}+[a-ząęółśćżźń\'.-]{1,39}$/i', $trimmed['last_name'])){
  20. $ln = mysqli_real_escape_string($dbc, $trimmed['last_name']);
  21. }else{
  22. echo '<p class="error">Proszę podać poprawne nazwisko</p>';
  23. }
  24.  
  25. if(preg_match('/^[\w.-]+@[\w.-]+\.[A-Za-z]{2,6}$/',$trimmed['email'])){
  26. $e = mysqli_real_escape_string($dbc, $trimmed['email']);
  27. }else{
  28. echo '<p>Proszę wprowadzić adres email</p>';
  29. }
  30.  
  31. if(preg_match('/^\w{4,20}$/',$trimmed['password1'])){
  32. if($trimmed['password1'] == $trimmed['password2']){
  33. $p = mysqli_real_escape_string($dbc, $trimmed['password1']);
  34. }else{
  35. echo '<p class="error">Za drugim razem wpisałeś inne hasło</p>';
  36. }
  37. }else{
  38. echo '<p class="error">Proszę podać prawidłowe hasło!</p>';
  39. }
  40.  
  41. if($fn && $ln && $e && $p){
  42. $q = "SELECT user_id FROM user WHERE email='$e'";
  43. $r = mysqli_query($dbc, $q) or trigger_error("ZAPYTANIE: $q\n<br />Błąd MYSQL: ".mysqli_error($dbc));
  44.  
  45. if(mysqli_affected_rows($dbc) == 0){
  46. $a = md5(uniqid(rand(),true));
  47. $q = "INSERT INTO user (email, pass, first_name, last_name, active, registration_date) VALUES ('$e', SHA1($p),'$fn','$ln','$a',NOW() )";
  48. $r = mysqli_query($dbc, $q) or trigger_error("Zapytanie: $q\n<br />Błąd MySQL: ".mysqli_error($dbc));
  49.  
  50. if(mysqli_affected_rows($dbc) == 1){
  51. $body = "Dziękujemy za zarejstrowanie się na stronie. Aby uaktywnić konto kliknij poniższe łącze:\n\n";
  52. $body .= BASE_URL.'active.php?x='.urlencode($e)."&y=$a";
  53. mail($trimmed['email'], 'Potwierdzenie rejestracji',$body, 'From: admin@site.pl');
  54. echo '<h3>Dziękujemy za zarejstrowanie się! Pod Twój adres email został wysłana wiadomość z kodem aktywacyjnym. Kliknij w nigo by móc korzystać w pełni ze strony!</h3>';
  55. include('includes/footer.html');
  56. exit();
  57. }else{
  58. echo '<p class="error">Konto nie zostało zarejestrowane ze względu na błąd sytemu. Przepraszamy za niedogodność.</p>';
  59. }
  60. }else{
  61. echo '<p class="error">Ten adres e-mail jest już w bazie</p>';
  62. }
  63. }else{ //Jeżeli weryfikacja hasła nie powiodła się
  64. echo '<p class="error">Proszę ponowanie wprowadzić hasła i spróbować jeszcze raz.</p>';
  65. }
  66. mysqli_close($dbc);
  67. }//Koniec głównej instrukcji warunkowej
  68.  
  69. ?>
  70.  
  71. <h1>Rejestracja</h1>
  72. <form action="register.php" method="post">
  73. <fieldset>
  74. <p><b>Imię:</b><input type="text" name="first_name" size="20" maxlength="20" value="<?php if(isset($trimmed['first_name'])) echo $trimmed['first_name']; ?>"/></p>
  75. <p><b>Nazwisko:</b><input type="text" name="last_name" size="20" maxlength="40" value="<?php if(isset($trimmed['last_name'])) echo $trimmed['last_name']; ?>"/></p>
  76. <p><b>Adres e-mail:</b><input type="text" name="email" size="30" maxlength="80" value="<?php if(isset($trimmed['email'])) echo $trimmed['email']; ?>"/></p>
  77. <p><b>Hasło:</b><input type="password" name="password1" size="20" maxlength="20" /><small>Hasło musi zawierać od 4 do 20 znaków(tylko litery, cyfry i znak podkreślenia)</small></p>
  78. <p><b>Potwierdzenie hasła:</b><input type="password" name="password2" size="20" maxlength="20" /></p>
  79. </fieldset>
  80. <div align="center"><input type="submit" name="submit" value="Rejestracja"/></div>
  81. <input type="hidden" name="submitted" value="TRUE" />
  82. </form>
  83.  
  84. <?php
  85. include('includes/footer.html');
  86. ?>
nospor
No bo jak ktos podał pierwszą litere inną niż ś czy ł to wywalasz blad.

Swoja drogą nie kumam tego zapisu {1}+
No albo chcesz by cos bylo dokladnie jeden raz, albo wiele razy.
Powinno byc albo {1} albo +
Mikele7
Właśnie problem w tym, że wywala mi błąd jak pierwszą literą jest Ł lub Ś. A co do zapisu być może coś źle rozumuję, ale chciałem uzyskać coś takiego, że {1}czyli tylko pierwsza liter jest z przedziału[A-ZŁŚ], a reszta z tego drugiego. Coś nie tak jest z tym zapisem?
nospor
Cytat
ale chciałem uzyskać coś takiego, że {1}czyli tylko pierwsza liter jest z przedziału[A-ZŁŚ], a reszta z tego drugiego. Coś nie tak jest z tym zapisem?
No to pytam się, po co ci tam jeszcze ten plus? Napisalem wyraźnie, ze wystarczy samo {1} gdyż to wlasnie okresla liczbe.
Mikele7
No już czaję. Sorry za kłopot. Nie zrozumiałem tego z początku, ale zmieniłem i działa pięknie. Dziękuję. Temat zamknięty
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.