Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [PHP]Sprawdzanie nr telefonu poprawienie (poprawnie kodu)

Napisany przez: szczabik 13.06.2008, 12:41:05

Mam taki kod i nie chce działać wie ktoś czemu chce by użytkownik mógł wpisać w formularzu tylko 9 liczb ( nr komórki )

  1. <?php
  2. if ($nr == "" || !http://www.php.net/preg_match('/^[1-9][0-9]{,9}$/', $nr)) {
  3. $error .= "<span style="color: #FF0000; text-align: center;">Musisz podać nr telefonu</span><br>";
  4. }
  5. ?>

Napisany przez: radex_p 13.06.2008, 12:45:01

Ja bym po prostu sprawdził długość za pomocą strlen

Napisany przez: nitro18 13.06.2008, 13:25:59

a oprócz tego nie możesz ustawić w polu tam gdzie ma user wpisać nr komórycoś typu: <input type="text" maxlength=9 name="nr_komory">

a w PHP sprawdź za pomocą strlen -> strlen($_POST[nr_komory])

Napisany przez: radex_p 13.06.2008, 13:29:32

nitro18 - jak podpowiadasz, to z głową

nie

<input type="text" maxlength=9 name="nr_komory">

tylko

<input type="text" maxlength="9" name="nr_komory">

nie

strlen($_POST[nr_komory])

tylko

strlen($_POST['nr_komory'])

Napisany przez: nitro18 13.06.2008, 13:51:11

oj przepraszam radex, od 9 miesięcy nie miałem styczności z PHP i HTML sad.gif

Napisany przez: szczabik 13.06.2008, 13:52:04

Zrobiłem taki cos i działa ale teraz chce dodać by sprawdzać czy ciąg składa się tylko z cyfr

  1. <?php
  2. $nr =43133345600;
  3.  
  4. if (http://www.php.net/strlen($nr)>9) {
  5. $error .= "<span style=\"color: #FF0000; text-align: center;\">Musisz podać nr telefonu</span><br>";
  6. }
  7.  
  8. http://www.php.net/echo "$error";
  9. ?>

Napisany przez: nithajasz 13.06.2008, 13:54:31

http://pl.php.net/is_int

Napisany przez: szczabik 13.06.2008, 14:24:14

Zrobiłem tak i teraz wyskakuje błąd

  1. <?php
  2. $nr =43133345600aa;
  3.  
  4. if (http://www.php.net/is_int(http://www.php.net/strlen($nr))>9) {
  5. $error .= "<span style=\"color: #FF0000; text-align: center;\">Musisz podać nr telefonu</span><br>";
  6. }
  7.  
  8. http://www.php.net/echo "$error";
  9. ?>


Gdy zamiast is_int dam is_numeric też jest błąd

Napisany przez: nithajasz 13.06.2008, 14:34:20

  1. <?php
  2. if (http://www.php.net/is_int(http://www.php.net/strlen($nr))>9) {
  3. ?>


Bo to zwraca TRUE or FALSE a nie długość ciągu smile.gif

daj to tak :

  1. <?php
  2. if(http://www.php.net/strlen($nr)==&& http://www.php.net/is_int($nr)) http://www.php.net/echo "ok"; else http://www.php.net/echo "blad";
  3. ?>

Napisany przez: szczabik 13.06.2008, 14:52:47

I dalej jest błąd
chodzi to ze gdy użytkownik wpisze takie cos jako nr 13adaD839 to warunek zwróci mi prawdę że nr jest zły bo musi składać się z samych 9 cyfr np. 123873894 i jak warunek zwróci prawdę że nr jest zły to potem
Wyświetlam komunikat o błędzie ze nr jest zły
I mam taki kod cały

  1. <?php
  2. // Sprawdzam poprawność nr telefonu
  3.  
  4. if(http://www.php.net/strlen($nr)==&& http://www.php.net/is_int($nr)) {
  5. $error .= "<span style=\"color: #FF0000; text-align: center;\">Musisz podać nr telefonu</span><br>";
  6. }
  7.  
  8. //Sprawdzam poprawność email
  9. if ($email == "" || !http://www.php.net/preg_match("/^[-0-9A-Z_.]{1,50}@([-0-9A-Z_.]+.){1,50}([0-9A-Z]){2,4}$/i", $email)) {
  10. $error .= "<span style=\"color: #FF0000; text-align: center;\">Musisz podać swój adres e-mail</span><br>";
  11. }
  12.  
  13. //Jeśli nr telefonu jest dobry i emial dodaje to do bazy
  14. if (!$error) {
  15.  
  16. if($tekst and $email and $przebieg) {
  17.  
  18. dbquery("INSERT INTO ".$db_prefix."intencja SET tekst='$tekst', email='$email', typ='$typ', user_id='".$userdata['user_id']."', modlitwa_datestamp='".http://www.php.net/time()."'");
  19.  
  20. }
  21.  
  22. http://www.php.net/echo "<center><strong>Twoja Wiadomość została wysłana!</strong></center>";
  23.  
  24. //Jeśli nr telefonu się nie zgadza lub emial wyświetlam komunikat 
  25. } else {
  26.  
  27. http://www.php.net/echo "<center><br><b>Twoja Wiadomość nie została wysłana z następujących powodów:!<b><br>
  28. <br>$error<br>Spróbuj ponownie.</center><br>"; 
  29.  
  30. }
  31. ?>

I dalej nie działa mi ten kod na sprawdzanie nr telefonu
  1. <?php
  2. if(http://www.php.net/strlen($nr)==&& http://www.php.net/is_int($nr)) {
  3. $error .= "<span style=\"color: #FF0000; text-align: center;\">Musisz podać nr telefonu</span><br>";
  4. }
  5. ?>

Napisany przez: mike 13.06.2008, 14:57:47

Moim zdaniem powinieneś filtrować tylko pozwalając na cyfry i znaki (, ), + i spację.
Możliwości wpisania numeru masz sporo a pomysłów użytkowników jeszcze więcej.

523489659
523 489 659
523 48 96 59
+48523489659
+48 523 489 659
+48 523 48 96 59

523489659
(52)3489659
(052)3489659
52 3489659
+48 52 3489659
052 3489659
(52) 3489659
(052) 3489659
+48 (052) 3489659

Który numer jest zły? Pisać wyrażenia na wszystkie możliwości? Zły pomysł.

Napisany przez: szczabik 13.06.2008, 15:10:43

A jaka funkcaj odpowiada za sprawdzenie czy w ciągu występuje jakaś litera ?


Np. mam takie cos 43432a9 to funkcja to jaka funkcja zwróci mi prawdę ?


Napisany przez: hiszpanespaniol 13.06.2008, 16:02:46

przecież w if'ie masz źle wpisane, a skrypt działa dobrze, powinno być tak:

  1. <?php
  2. if(http://www.php.net/strlen($nr)==&& http://www.php.net/is_int($nr)) {
  3. $error .= "<span style=\"color: #00ff00; text-align: center;\">To jest prawidłowy numer</span><br>";
  4. }
  5. else
  6. {
  7. $error .= "<span style=\"color: #FF0000; text-align: center;\">Musisz podać nr telefonu</span><br>";
  8. }
  9. ?>

Napisany przez: szczabik 13.06.2008, 16:21:54

Tak tylko musi mi zwracać prawdę gdy nr jest nie dobry a fasle gdy dobry

Czyli jak mam 3218a99321 to zwraca mi prawdę a jak mam 777321987 to false

Napisany przez: hiszpanespaniol 13.06.2008, 16:48:45

w takim razie wystarczy krzyknąć na skrypt i działa poprawnie smile.gif

  1. <?php
  2. if(http://www.php.net/strlen($nr)!==|| !http://www.php.net/is_int($nr)) {
  3. http://www.php.net/echo '<span style="color: #ff0000; text-align: center;">To nie jest prawidłowy numer</span><br>';
  4. }
  5. else
  6. {
  7. http://www.php.net/echo '<span style="color: #00ff00; text-align: center;">numer jest 9 cyfrowy</span><br>';
  8. }
  9. ?>


edit:
wybacz, dałem echo, zamiast error, bo testowałem u siebie. no i zamiast && jest ||, ale to logiczne

Napisany przez: pyro 13.06.2008, 16:57:58

Ja odwołując się do postu mike'a -> numer telefonu można sprawdzić tak:

  1. <?php
  2.  
  3. $nr = http://www.php.net/str_replace(' ', '', $nr);
  4. // w nawiasach chyba nikt juz nie bedzie pisal numeru wiec pomine to...
  5. // jeśli domowy to musi być z kierunkowym
  6. if(http://www.php.net/ereg('^+?[0-9]{9,11}$', $nr))
  7. {
  8. // numer poprawny
  9. }
  10. else
  11. {
  12. // numer niepoprawny
  13. }
  14.  
  15. ?>

Napisany przez: szczabik 13.06.2008, 17:10:06

No teraz wywala mi błąd jak zrobię tak

  1. <?php
  2. $nr =431333456aa;
  3.  
  4. if(http://www.php.net/strlen($nr)!==|| !http://www.php.net/is_int($nr)) {
  5. $error .= "<span style=\"color: #00ff00; text-align: center;\">To nie jest prawidłowy numer</span><br>";
  6. }
  7.  
  8. http://www.php.net/echo "$error";
  9. ?>




I dalej jest błąd po za tym jeśli to ma działać z moim formularzem to musi mi if zwracać prawdę gdy nr jest nie poprawy bo inaczej nie wyświetli mi komunikatu

Zrobiłem tak nie działa
  1. <?php
  2. $nr =431333456aa;
  3.  
  4. $nr = http://www.php.net/str_replace(' ', '', $nr);
  5. if(http://www.php.net/ereg('^+?[0-9]{9,11}$', $nr)){
  6. $error .= "<span style=\"color: #00ff00; text-align: center;\">To nie jest prawidłowy numer</span><br>";
  7. }
  8.  
  9. http://www.php.net/echo "$error";
  10. ?>

A to kod z moim formularzem
  1. <?php
  2. //Sprawdzam adres emial czy jest poprawny
  3. if ($email == "" || !http://www.php.net/preg_match("/^[-0-9A-Z_.]{1,50}@([-0-9A-Z_.]+.){1,50}([0-9A-Z]){2,4}$/i", $email)) {
  4. $error .= "<span style=\"color: #FF0000; text-align: center;\">Musisz podać swój adres e-mail</span><br>";
  5. }
  6. //Sprawdzam nr telefonu czy jest poprawny
  7.  
  8. $nr = http://www.php.net/str_replace(' ', '', $nr);
  9. if(http://www.php.net/ereg('^+?[0-9]{9,11}$', $nr)){
  10. $error .= "<span style=\"color: #00ff00; text-align: center;\">To nie jest prawidłowy numer</span><br>";
  11. }
  12.  
  13. //Jeśli żadne z warunków nie zwrócił prawdy czyli ze zły nr to dodaje dane do bazy
  14. if (!$error) {
  15.  
  16. if($tekst and $email and $przebieg) {
  17.  
  18. dbquery("INSERT INTO ".$db_prefix."intencja SET tekst='$tekst', email='$email', typ='$typ', user_id='".$userdata['user_id']."', modlitwa_datestamp='".http://www.php.net/time()."'");
  19.  
  20. }
  21.  
  22. http://www.php.net/echo "<center><strong>Twoja Wiadomość została wysłana!</strong></center>";
  23.  
  24. } else {
  25.  
  26. //Jeśli nr telefonu jest nie poprawny lub email wyświetlam błąd
  27.  
  28. http://www.php.net/echo "<center><br><b>Twoja Wiadomość nie została wysłana z następujących powodów:!<b><br>
  29. <br>$error <br>Spróbuj ponownie.</center><br>"; 
  30. //Zmienna $error odpowiedzialna za wyświetlenie błędów jeśli nr teflonu i emial są
     nie prawne wyświetli dwie informacje
  31. }
  32. ?>

Napisany przez: pyro 13.06.2008, 17:28:08

Cytat(szczabik @ 13.06.2008, 18:10:06 ) *
Zrobiłem tak nie działa
  1. <?php
  2. $nr =431333456aa;
  3.  
  4. $nr = http://www.php.net/str_replace(' ', '', $nr);
  5. if(http://www.php.net/ereg(^+?[0-9]{9,11} , $nr)){
  6. $error .= &#092;"<span style=\"color: #00ff00; text-align: center;\">To nie jest prawidłowy numer
  7. &#092;";
  8. }
  9.  
  10. http://www.php.net/echo &#092;"$error\";
  11. ?>

[b][b]


Nie przeczytałeś tego co dałem w komentarzach... Z tego co wnioskuje (co próbowałeś zrobić) to powinno wyglądać tak:

  1. <?php
  2. $nr =431333456aa;
  3.  
  4. $nr = http://www.php.net/str_replace(' ', '', $nr);
  5. if(!http://www.php.net/ereg('^+?[0-9]{9,11}$', $nr)){
  6. $error .= "<span style=\"color: #00ff00; text-align: center;\">To nie jest prawidłowy numer</span><br>";
  7. }
  8.  
  9. http://www.php.net/echo "$error";
  10. ?>


Zobacz cyz teraz działa

Napisany przez: szczabik 13.06.2008, 17:57:54

Cytat
Zobacz cyz teraz działa



Wywala błąd

Napisany przez: Athlan 13.06.2008, 18:02:34

is_int dla stringa nigdy nie zwróci Wam true, int to typ danych. do takiego czegoś wykorzystujemy is_numeric(). Do is_numeric() wsadzamy stringa a nie wartość z strlen().

Napisany przez: pyro 13.06.2008, 18:03:00

Nie moge sie doczekać kiedy sie dowiem co to za błąd tongue.gif

Napisany przez: szczabik 13.06.2008, 18:09:22

Wywala taki bład
Parse error: syntax error, unexpected T_STRING in /home/accounts_a/aide/public_html/tel.php on line 8

Napisany przez: pyro 13.06.2008, 18:25:40

  1. <?php
  2. $nr ='431333456aa';
  3.  
  4. $nr = http://www.php.net/str_replace(' ', '', $nr);
  5. if(!http://www.php.net/ereg('^+?[0-9]{9,11}$', $nr)){
  6. $error = "<span style=\"color: #00ff00; text-align: center;\">To nie jest prawidłowy numer</span><br>";
  7. }
  8.  
  9. http://www.php.net/echo "$error";
  10. ?>


szczabik, spróbuj tak jak dałem wyżej, nie objales numeru telefonu w cudzyslowa, a jest to string, poza tym nie wiem dlaczego dałeś .= zamiast =, nie wiem czy coś doczepiasz do błędu ale w tym kawałku kodu tego nie widze więc usunąłem kropkę, teraz zobacz czy działa.

Napisany przez: szczabik 13.06.2008, 20:12:43

Nie działa ta kropka tam musi być po za tym daje cały kod i link gdzie można przetestować mój formularz ale daje nie działa sprawdzanie nr telefonu

  1. <?php
  2. require_once "maincore.php";
  3. require_once "subheader.php";
  4. require_once "side_left.php";
  5. if (iMEMBER) {
  6.  
  7. if (http://www.php.net/isset($_POST['submit'])) {
  8.  
  9. $email = http://www.php.net/strtolower(http://www.php.net/trim($_POST['email']));
  10. $email = http://www.php.net/strtolower(http://www.php.net/trim($_POST['nr']));
  11.  
  12. if ($email == "" || !http://www.php.net/preg_match("/^[-0-9A-Z_.]{1,50}@([-0-9A-Z_.]+.){1,50}([0-9A-Z]){2,4}$/i", $email)) {
  13. $error .= "<span style=\"color: #FF0000; text-align: center;\">Musisz podać swój adres e-mail</span><br>";
  14. }
  15.  
  16.  
  17. $nr = http://www.php.net/str_replace(' ', '', $nr);
  18. if(!http://www.php.net/ereg('^+?[0-9]{9,11}$', $nr)){
  19. $error .= "<span style=\"color: #00ff00; text-align: center;\">Musisz wpisac nr telefonu</span><br>";
  20. }
  21.  
  22.  
  23. if (!$error) {
  24.  
  25. if($tekst and $email and $przebieg) {
  26.  
  27. dbquery("INSERT INTO ".$db_prefix."intencja SET tekst='$tekst', email='$email', typ='$typ', user_id='".$userdata['user_id']."', modlitwa_datestamp='".http://www.php.net/time()."'");
  28.  
  29. }
  30. opentable('Dodaj ogłoszenie');
  31. http://www.php.net/echo "<center><strong>Twoja Wiadomość została wysłana!</strong></center>";
  32. closetable();
  33. } else {
  34. opentable('Dodaj ogłoszenie');
  35. http://www.php.net/echo "<center><br><b>Twoja Wiadomość nie została wysłana z następujących powodów:!<b><br>
  36. <br>$error<br>Spróbuj ponownie.</center><br>";
  37. closetable();
  38. }
  39. } else {
  40. opentable('Dodaj ogłoszenie');
  41. http://www.php.net/echo 
  42. <table align='center' cellpadding='0' cellspacing='1' class='tbl-border' width='100%'><form method=post> 
  43.  
  44. <tr> 
  45. <td align='right' width='1%' class='tbl2' style='white-space:nowrap'>Twój adres email:</td> 
  46. <td class='tbl1'><input type='text' name='email' style='width: 150px' class='textbox' maxlength='32'></td> 
  47. </tr>
  48.  
  49. <tr> 
  50. <td align='right' width='1%' class='tbl2' style='white-space:nowrap'>Telefon:</td> 
  51. <td class='tbl1'><input type='text' name='rok' style='width: 150px' class='textbox' maxlength='32'></td> 
  52. </tr>
  53.  
  54. <tr>
  55. <td align='right' class='tbl2' valign='top'></td>\n<td class='tbl1'>
  56. <input type='submit' name='submit' value='Wyślij' class='textbox'>
  57. <input type='reset' value='Wyszyść' class='textbox'>
  58. </td>
  59. </tr>"; 
  60.  
  61. http://www.php.net/echo "</table></form>";
  62.  
  63. closetable();
  64.  
  65. }
  66. } else {
  67.  
  68. opentable('Zarejestruj się');
  69. http://www.php.net/echo "<center><b>Dodawanie ogłoszeń możliwe jedynie dla zarejestrowanych użytkowników</b> <a href='".BASEDIR."register.php'>Link do rejestracji</a></center>";
  70. closetable();
  71. }
  72.  
  73. require_once "side_right.php";
  74. require_once "footer.php";
  75. ?>


link http://www.gc.boo.pl/dodaj.php



Dziękuje wszystkim którzy starami mi się pomóc i naprowadzić mnie jak to zrobić zrobiłem tak i działa

  1. <?php
  2. if ($tel == "" || !http://www.php.net/preg_match("/^[0-9]{9,11}$/i", $tel)) {
  3. $error .= "<span style=\"color: #FF0000; text-align: center;\">Musisz podać swój telefon</span><br>";
  4. }
  5. ?>

Napisany przez: hiszpanespaniol 19.06.2008, 00:17:44

wiem, że problem jest rozwiązany, ale znalazłem coś, co może pomóc Tobie albo innym.
ten sposób jest na pewno bezpieczny, bo znaleziony na stronie http://phpsec.org/projects/guide/1.html#1.2.
Skrypt ma za zadanie sprawdzić, czy zmienna jest liczbą całkowitą

  1. <?php
  2. $clean = http://www.php.net/array();
  3.  
  4. if ($_POST['num'] == http://www.php.net/strval(http://www.php.net/intval($_POST['num'])))
  5. {
  6. $clean['num'] = $_POST['num'];
  7. }
  8. ?>

można go przystosować do Twojego problemu (a właściwie zmienić znacznie) i też działa (chyba)prawidłowo:

  1. <?php
  2. $nr = '12345a783';
  3. if ($nr !== http://www.php.net/strval(http://www.php.net/intval($nr)) OR http://www.php.net/strlen($nr) !== 9)
  4. {
  5. $error = 'popraw numer';
  6. }
  7. else
  8. {
  9. $error = 'dobry numer';
  10. }
  11. http://www.php.net/echo $error;
  12. ?>


pozdrawiam

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)