Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [AJAX][JavaScript][PHP] Tylko cyfry
@rtur
post
Post #1





Grupa: Zarejestrowani
Postów: 254
Pomógł: 3
Dołączył: 23.02.2006

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


Mam trzy pola w które należy wpisywać liczby:

  1. Liczba gier|input name=ile_gier
  2. wiek użytkownika|input name=wiek
  3. Liczba filmów|input name=ile_filmow

Sprawdzam czymś takim czy pola są numeryczne:
  1. if(is_numeric($_POST['wiek']))
  2. {echo 'pole wiek użytkownika się zgadza';}
  3. else{echo 'pole wiek użytkownika powinno zawierać tylko cyfry lub liczby';}
  4. if(is_numeric($_POST['ile_filmow']))
  5. {echo 'pole liczba filmów się zgadza';}
  6. else{echo 'pole Liczba filmów powinno zawierać tylko cyfry lub liczby';}
  7. if(is_numeric($_POST['ile_gier']))
  8. {echo 'pole liczba gier się zgadza';}
  9. else{echo 'pole liczba gier powinno zawierać tylko cyfry lub liczby';}

da rade to jakoś prościej/optymalniej sprawdzić? bo przy sprawdzaniu 150 pól to ten kod urośnie że...
A może dodatkowo coś co już na poziomie wprowadzania danych zablokuje wprowadzanie innych znaków niż cyfry?

Ten post edytował @rtur 9.09.2012, 21:02:00
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
kamil4u
post
Post #2





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

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


Porządnie się to powinno zrobić tak:

1. Najpierw HTML 5:
  1. <input type="number" name="..." ...>


2. Następnie zabezpieczenie JS: wertujesz po wszystkich elementach(pętla) <input> sprawdzając czy pole type==number i jeśli tak to sprawdzasz czy to jest liczba i wysyłasz odpowiednie komunikaty

3. Na końcu PHP: tylko używając pętli a nie tylko if-ów
Pseudokod - pisane na szybko:
  1. tablica_name = ['wiek', 'ile_filmow']; // pole z $_POST - czyli atrybut name
  2. tablica_text = ['wiek_użytkownika', 'liczba filmów']; // nazwa pola
  3. petla( tablica_name -> i){
  4. if( czyLiczba( $_POST[ tablica_name[i] ] ){
  5. wyswietl('Pole '.tablica_text[i].' jest liczbą');
  6. } else {
  7. wyswietl('Pole '.tablica_text[i].' nie jest liczbą');
  8. }
  9. }
Go to the top of the page
+Quote Post
@rtur
post
Post #3





Grupa: Zarejestrowani
Postów: 254
Pomógł: 3
Dołączył: 23.02.2006

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


którą pętlę tu zastosować?
Go to the top of the page
+Quote Post
bpskiba
post
Post #4





Grupa: Zarejestrowani
Postów: 340
Pomógł: 49
Dołączył: 3.07.2009
Skąd: Rzeszów

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


Chyba jeszcze za wcześnie na piątkę. Firefox nie obsługuje, IE nie obsługuje......

http://html5test.com/
Go to the top of the page
+Quote Post
kamil4u
post
Post #5





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

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


Cytat
Chyba jeszcze za wcześnie na piątkę. Firefox nie obsługuje, IE nie obsługuje......

Dlatego trzba jeszcze użyć JS( dla starszych przeglądarek), aby "dodać" obsługę HTML5

Cytat
którą pętlę tu zastosować?

W JS: for
w PHP: foreach
Go to the top of the page
+Quote Post
@rtur
post
Post #6





Grupa: Zarejestrowani
Postów: 254
Pomógł: 3
Dołączył: 23.02.2006

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


  1. $tablica_name = array('wiek', 'ile_filmow');
  2. $tablica_text = array('wiek_użytkownika', 'liczba filmów');
  3. foreach($tablica_name as $key => $ar){
  4. if(is_numeric($_POST[$tablica_name[$ar]])){
  5. $_POST[$tablica_name[$ar]] = $_POST[$tablica_name[$ar]];
  6. }else {echo 'Pole <b>'.$tablica_text[$ar].'</b> powinno mieć wartość liczbową';}
  7. }

Jak źle wypełnię wyświetla kod html:
  1. Pole <b></b> powinno mieć wartość liczbową


Gdzie robię błąd?

Ten post edytował @rtur 9.09.2012, 23:26:35
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #7





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Zauważ, że Twoje tablice mają indeksy 0,1. Więc takie wywołanie:

  1. $_POST[$tablica_name[$ar]]


daje $_POST[''], bo $tablica_name[$ar] nie istnieje, musisz wstawić tak: $tablica_name[$key]

w echo wywolujesz $tablica_text[$ar], takie indeksy dla tablicy $tablica_text zwyczajnie nie istnieją, bo są to kolejno 0,1.

Powinno być tak:

  1. $tablica_name = array('wiek', 'ile_filmow');
  2. $tablica_text = array('wiek_użytkownika', 'liczba filmów');
  3. foreach($tablica_name as $key => $ar){
  4. if(!is_numeric($_POST[$tablica_name[$key]])) echo 'Pole <b>'.$tablica_text[$key].'</b> powinno mieć wartość liczbową';
  5. }


Ten post edytował b4rt3kk 10.09.2012, 00:08:13
Go to the top of the page
+Quote Post
@rtur
post
Post #8





Grupa: Zarejestrowani
Postów: 254
Pomógł: 3
Dołączył: 23.02.2006

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


czyli
  1. $_POST[$tablica_name[$ar]]

zwraca wartości: wiek, ile_filmow bo $ar to wartości a $key to klucze 0,1 w $tablica_text nie ma wartości wiek, ile_filmow to i nie znajdzie ich i nic nie wyświetli (IMG:style_emoticons/default/smile.gif) , dobrze rozumiem? to może mi wystarczy
  1. foreach($tablica_name as $key)
, a nie
  1. foreach($tablica_name as $key => $ar)
?
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #9





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Foreach, ma następującą definicję:

  1. foreach($table as $value);
  2. // lub
  3. foreach($table as $key => $value);


Wyłożę to łopatologicznie dla Twojego wcześniejszego przykładu:

  1. $tablica_name = array('wiek', 'ile_filmow');
  2. $tablica_text = array('wiek_użytkownika', 'liczba filmów');
  3.  
  4. foreach($tablica_name as $key => $ar){
  5. if(is_numeric($_POST[$tablica_name[$ar]])){
  6. $_POST[$tablica_name[$ar]] = $_POST[$tablica_name[$ar]];
  7. }else {echo 'Pole <b>'.$tablica_text[$ar].'</b> powinno mieć wartość liczbową';}
  8. }


1 obrót pętli:
- $key przyjmuje wartość 0
- $ar przyjmuje wartość 'wiek'
2 obrót pętli:
- $key przyjmuje wartość 1
- $ar przyjmuje wartość 'ile_filmow'

Tak więc:
- is_numeric($_POST[$tablica_name[$ar]]), zawsze będzie false, bo $tablica_name[wiek] oraz $tablica_name[ile_filmow] nie istnieje
- to samo się tyczy $tablica_text[$ar], dla tej tablicy, takie indeksy również nie istnieją

Go to the top of the page
+Quote Post
@rtur
post
Post #10





Grupa: Zarejestrowani
Postów: 254
Pomógł: 3
Dołączył: 23.02.2006

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


b4rt3kk, kamil4u, dzięki, b4rt3kk Tobie szczególnie za łopatologiczne wyjaśnienie działania pętli foreach. Wielkie dzięki.

Ten post edytował @rtur 10.09.2012, 20:00:59
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 24.08.2025 - 22:47