Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Sprawdzanie poprawności numeru telefonu PHP MYSQL HTML
xandersky
post 24.06.2013, 21:09:44
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 12.11.2011

Ostrzeżenie: (0%)
-----


Witajcie..

Utknąłem na kolejnym problemie.. sad.gif

Mianowicie potrzebuję sprawdzić czy podany przez klienta numer telefonu jest numerem komórkowym w formacie 9 cyfrowym. jak łatwo się domyśleć ludzie wpisują najróżniejsze formy swoich telefonów czy to stacjonarnych czy to komórkowych..

Generalnie potrzubuję z tego bałaganu:

1) Wydobyć numer telefonu z zapytania mysql -> z komórce "telefon" mam pole textowe z dokładnie czymś takim
Kod
Telefon: 515-894-894


lub

Kod
Telefon: (48)515894894


lub

Kod
Telefon: 48515894894


Do komórki "telefon" skrypt zapisuje wartości zmiennych $a='Telefon: '; + $b=$_REQUEST['numer_telefonu'];

Niestety tego elementu nie mogę już zmienić tak więc trzeba "wyciąć" w $row['telefon'] zmienną $a tak aby otrzymać sam numer telefonu.

2) Sprawdzić czy podany numer jest numerem stacjonarnym czy komórkowym w między czasie powywalać z numeru wszelkie '-','(',')', i inne badziewia tak by został czysty numer..

3) czyli całość widzę mniej więcej tak:

  1. <a href=\"skrypt.php?go=sms&amp;id={$id}\">SMS</a>


  1. <?
  2. $id = trim($_GET['id']);
  3.  
  4. $wyniki_tel = mysql_query("SELECT `telefon` FROM klient WHERE id='$id'")
  5. or die('Błąd');
  6. $rrr = mysql_fetch_assoc($wyniki_tel);
  7.  
  8. $numer_telefon = $rrr['telefon']; //ok tutaj otrzymujemy 'Telefon: (48)515-894-894'
  9.  
  10.  
  11. $numer_telefon_czysty = costam($numertelefon); //teraz wywalamy niepotrzebne badziestwo w postaci nawiasów i innych głupot
  12.  
  13. if($numer_telefon_czysty = 'komorka')
  14. {
  15. echo 'to jest numer komorkowy mozesz przejsc dalej';
  16.  
  17. }
  18. elseif
  19. {
  20. echo 'to nie jest numer komorkowy';
  21. }
  22. ?>


Oczywiscie nie będzie to wygladac na zasadzie if = 'komorka' podałem to dla zobrazowania zasady działania.

Generalnie potrzebuje otrzymać czysty numer telefonu komórkowego w postaci 9 cyfrowej tak by przekazać go dalej do SOAPa..

Za wszelkie podpowiedzi serdecznie dziękuję.



Ten post edytował xandersky 24.06.2013, 21:11:06
Go to the top of the page
+Quote Post
pedro84
post 24.06.2013, 21:20:26
Post #2





Grupa: Nieautoryzowani
Postów: 2 249
Pomógł: 305
Dołączył: 2.10.2006

Ostrzeżenie: (0%)
-----


A problem masz z...?


--------------------
Google knows the answer...
Go to the top of the page
+Quote Post
xandersky
post 24.06.2013, 21:31:21
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 12.11.2011

Ostrzeżenie: (0%)
-----


Cytat(pedro84 @ 24.06.2013, 22:20:26 ) *
A problem masz z...?



yyyy? Wydawało mi sie że dość dobrze opisałem z czym smile.gif ze sformułowaniem kodu php który będzie odpowiedzialny za "obrobienie" numeru telefonu czyli usunięcie z niego niepotrzebnych znaczków oraz sprawdzenie czy numer telefonu to komórka czy stacjonarny..

Generalnie można by w tablicy wypisać wszystkie początki numerów telefonów komórkowych i potem sprawdzić czy początek już obrobionego numeru znajduje się w tablicy

  1. $tab[0] = array( 725, 726 );
  2. $tab[1] = array( 7805, 7806 );
  3. $tab[2] = array( 7870, 7871, 7872, 7873, 7874, 7875, 7878, 7879, 788, 880, 8841, 8842, 886, 888, 889 );
  4. $tab[3] = array( 887 );
  5. $tab[4] = array( 50, 51, 7890, 7891, 7892, 7893, 7894, 797, 798 );
  6. $tab[5] = array( 530, 531, 533, 534, 535, 5360, 5361, 5362, 5363, 5364, 5365, 5367, 5368, 5369, 5370, 5371, 5372, 5373, 5374, 6900, 6908, 6909, 7290, 729, 790, 791, 792, 793, 794, 7950, 7956, 7957, 7958, 7959, 7991, 7992, 7993, 7994, 7995, 8812, 8813, 8814, 8815, 8816, 8817, 8830, 8831, 8832, 8834, 8835, 8836, 8837, 8839, 8840, 8843, 8846, 8847, 8848, 8849 );
  7. $tab[6] = array( 601, 603, 605, 607, 609, 661, 663, 665, 667, 669, 691, 693, 695, 697, 721, 7220, 7221, 7222, 7223, 7226, 7227, 723, 724, 781, 782, 7830, 7831, 7832, 7834, 7835, 7836, 7837, 7838, 7839, 785, 885 );
  8. $tab[7] = array( 6666 );
  9. $tab[8] = array( 532, 538, 539, 600, 602, 604, 606, 608, 660, 662, 664, 6660, 6661, 6662, 6663, 6664, 6665, 6667, 6668, 6669, 668, 692, 694, 696, 698, 7281, 7282, 7283, 7284, 7285, 7286, 7287, 7288, 7289, 784, 7876, 7877, 7951, 7952, 7953, 7954, 7955, 8810, 8818, 8819, 8833 );
  10. $tab[9] = array( 7272, 7273, 8822 );


Generalnie jakoś to widzę jak ma to funkcjonować niestety nie wiem jakimi funkcjami i w jaki sposób się posługiwać by osiągnąć zamierzony cel..

Doczytałem już że na samym wstępie pobrany z bazy "Telefon: (+48)515-894-894" utnę za pomocą $num_telefon_step1 = substr($num_telefon, 9); otrzymam wtedy -> (+48)515-894-894

Teraz zostaje tylko powywalać niepotrzebne znaczki i sprawdzić numer pod kątem powyższym..

I w tym właśnie mam problem smile.gif
Go to the top of the page
+Quote Post
pedro84
post 24.06.2013, 21:40:38
Post #4





Grupa: Nieautoryzowani
Postów: 2 249
Pomógł: 305
Dołączył: 2.10.2006

Ostrzeżenie: (0%)
-----


Gotowego kodu nie dostaniesz, na to nie licz wink.gif

Jedziemy:
- usunięcie niepotrzebnych znaków w ciągu, np. str_replace (jako argument podajesz tablice), ew. preg_replace
- w kwestii formatu numeru telefonu, znowu wyrażenia regularne i funkcja preg_match_all. Wydaje mi się jednak, że jakiś format numery przyjąć powinieneś, bo zezwalanie na sieczkę to jak proszenie się o kłopoty.


--------------------
Google knows the answer...
Go to the top of the page
+Quote Post
xandersky
post 24.06.2013, 21:47:17
Post #5





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 12.11.2011

Ostrzeżenie: (0%)
-----


Cytat(pedro84 @ 24.06.2013, 22:40:38 ) *
Gotowego kodu nie dostaniesz, na to nie licz wink.gif

Jedziemy:
- usunięcie niepotrzebnych znaków w ciągu, np. str_replace (jako argument podajesz tablice), ew. preg_replace
- w kwestii formatu numeru telefonu, znowu wyrażenia regularne i funkcja preg_match_all. Wydaje mi się jednak, że jakiś format numery przyjąć powinieneś, bo zezwalanie na sieczkę to jak proszenie się o kłopoty.


Dziękuję o to właśnie mi chodziło smile.gif Nie potrzebuje gotowego kodu tylko jakiś punkt zaczepienia żeby nie latać po wszystkich funkcjach i doczytywać co daje mi str a co strlen co preg a co str_replace

Co do proszenia się o kłopoty - niestety - podzielam Twoją opinię jednakże dane pobierane są z allegro tak więc nijak nie mam wpływu na to co ludzie wpisują w numerach telefonu.. Chcę to możliwie maksymalnie obrobić tak by sam numer przekazać do SOAP'a wysyłającego sms z potwierdzeniem wpłaty bądź wysyłki..


Ok w zasadzie jakoś to wyszło smile.gif

Poniżej kod (może komuś następnemu się przyda..)

  1. $sms_telefon = 'Telefon: (+48)516-33-33-22'; //najbardziej hardkorowa wersja jaką znalazłem w bazie :)
  2.  
  3. $sms_telefon_step1 = substr($sms_telefon, 9); //ucinamy pierwszych 9 znaków tak by został sam numer
  4.  
  5. function strReplaceAssoc(array $replace, $subject)
  6. {
  7. return str_replace(array_keys($replace), array_values($replace), $subject);
  8. }
  9.  
  10. $replace = array(
  11. ' ' => '',
  12. '+48' => '',
  13. '-' => '',
  14. '(' => '',
  15. ')' => '',
  16. );
  17.  
  18. $sms_telefon_step2 = strReplaceAssoc($replace, $sms_telefon_step1); //podmieniamy za pomocą funkcji "niepotrzebne śmieci" z numeru telefonu
  19.  
  20. if(strlen((int)$sms_telefon_step2) != 9) //sprawdzamy czy numer ma 9 znaków
  21. {
  22. $popraw = "podany numer ma wiecej niz 9 znaków i prawdopodobnie nie jest polskim numerem komorkowym"; // error jeżeli nie ma
  23. }
  24. else //dalej jeżeli ma
  25. {
  26. /*tablice z początkami numerów komórkowych poszczególnych operatorów*/
  27. $tab[0] = array( 725, 726 );
  28. $tab[1] = array( 7805, 7806 );
  29. $tab[2] = array( 7870, 7871, 7872, 7873, 7874, 7875, 7878, 7879, 788, 880, 8841, 8842, 886, 888, 889 );
  30. $tab[3] = array( 887 );
  31. $tab[4] = array( 50, 51, 7890, 7891, 7892, 7893, 7894, 797, 798 );
  32. $tab[5] = array( 530, 531, 533, 534, 535, 5360, 5361, 5362, 5363, 5364, 5365, 5367, 5368, 5369, 5370, 5371, 5372, 5373, 5374, 6900, 6908, 6909, 7290, 729, 790, 791, 792, 793, 794, 7950, 7956, 7957, 7958, 7959, 7991, 7992, 7993, 7994, 7995, 8812, 8813, 8814, 8815, 8816, 8817, 8830, 8831, 8832, 8834, 8835, 8836, 8837, 8839, 8840, 8843, 8846, 8847, 8848, 8849 );
  33. $tab[6] = array( 601, 603, 605, 607, 609, 661, 663, 665, 667, 669, 691, 693, 695, 697, 721, 7220, 7221, 7222, 7223, 7226, 7227, 723, 724, 781, 782, 7830, 7831, 7832, 7834, 7835, 7836, 7837, 7838, 7839, 785, 885 );
  34. $tab[7] = array( 6666 );
  35. $tab[8] = array( 532, 538, 539, 600, 602, 604, 606, 608, 660, 662, 664, 6660, 6661, 6662, 6663, 6664, 6665, 6667, 6668, 6669, 668, 692, 694, 696, 698, 7281, 7282, 7283, 7284, 7285, 7286, 7287, 7288, 7289, 784, 7876, 7877, 7951, 7952, 7953, 7954, 7955, 8810, 8818, 8819, 8833 );
  36. $tab[9] = array( 7272, 7273, 8822 );
  37.  
  38. $poprawne = 0;
  39. for($i=0;$i<10;$i++) //sprawdzamy czy numer znajduje sie w tabliach
  40. {
  41. $ilosc = count($tab[$i]);
  42. for($j=0;$j<$ilosc;$j++)
  43. {
  44. $ile = strlen($tab[$i][$j]);
  45. $wynik = substr($sms_telefon_step2, 0, $ile);
  46. if($wynik==$tab[$i][$j]) // jeżeli znajduje się
  47. {
  48. echo "<strong>Podany numer to numer komórkowy </strong>";
  49. $poprawne = 1;
  50. }
  51. }
  52. }
  53. if($poprawne !=1) //jeżeli nie znajduje się
  54. {
  55. echo "<strong>Podanego numeru nie ma w tablicy!</strong>";
  56. }
  57. }
  58.  
  59. //echo($sms_telefon_step2);


Generalnie kod to zlepek kilku różnych przykładów z manuali podanych w postach wyżej + klika wygooglowanych porad - wszystko połączyłem razem i.. Generalnie u mnie działa poprawnie i jak najbardziej sie sprawdza - jeżeli gdzieś widzicie błąd albo coś jest źle to chętnie poćwiczę inne metody smile.gif)

Ten post edytował xandersky 24.06.2013, 22:35:15
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 30.04.2025 - 04:36