Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX][JavaScript][PHP] Tylko cyfry
Forum PHP.pl > Forum > Przedszkole
@rtur
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?
kamil4u
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. }
@rtur
którą pętlę tu zastosować?
bpskiba
Chyba jeszcze za wcześnie na piątkę. Firefox nie obsługuje, IE nie obsługuje......

http://html5test.com/
kamil4u
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
@rtur
  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?
b4rt3kk
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. }
@rtur
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 smile.gif, dobrze rozumiem? to może mi wystarczy
  1. foreach($tablica_name as $key)
, a nie
  1. foreach($tablica_name as $key => $ar)
?
b4rt3kk
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ą

@rtur
b4rt3kk, kamil4u, dzięki, b4rt3kk Tobie szczególnie za łopatologiczne wyjaśnienie działania pętli foreach. Wielkie dzięki.
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.