Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Proszę o wyjaśnienie działania pętli foreach
Forum PHP.pl > Forum > Przedszkole
michat34
proszę mnie nie odsyłać do google, ponieważ czytałem ale kurcze jakos nie moge jej ogarnąć tongue.gif wiem ze ma ona ta zalete ze podczss pracy z tablicami czy obiektami wie ile elementow ma tablica, wiem ze moze zapisywac wartosci do innej tablicy(?). moglibyscie dac jakis prosty skrypt z przykladem wykorzystania foreach? na przykladzie chyba najszybciej zrozumiem
Tajgeer
  1. $owoce = array('jabłko', 'gruszka', 'banan', 'truskawka');
  2. foreach ($owoce as $owoc)
  3. {
  4. echo $owoc;
  5. echo '<br />';
  6. }

Wypisze:
Kod
jabłko
gruszka
banan
truskawka
michat34
czyli jest to cos jak przepisanie zmiennych z jednej tablicy do drugiej?
abort
Z typowej akci pod tytułem "formularze". Załóżmy, że masz formularz rejestracyjny np. na jakies forum. W tym formularzu metodą POST protokołu HTTP przesyłasz kilka danych, ale załóżmy że my przesyłamy: login usera, email, imię, nazwisko (imię i nazwisko jako dwa osobne pola), hasło, potwierdzenie hasła (dla uproszczenia załóżmy, że wszystkie w/w dane trzeba podać) Masz też jakiś skrypt, który obrabia Ci te dane i (jeśli dane są prawidłowe), to wrzucasz je do bazy i rejestrujesz usera.
W ablicy POST dane sa reprezentowane w postaci indeks->wartość, przy czym indeks nie musi być liczbą (może przyjmować wartość tekstową, i w rzeczywistości najczęściej tak jest).
Mamy więc tablicę, w której pod indeksem 'login' spodziewasz się mieć proponowaną nazwę nowo założonego konta, 'email' - kontakt do osobnika, w polach z indeksami 'imie' i 'nazwisko' - personalia, i w dwóch polach, nazwijmy je 'pass' i 'pass2' proponowane hasło nowego usera.

Najprostszym sposobem na SPRAWDZENIE, CZY WSZYSTKIE POLA ZOSTAŁY WYPEŁNIONE, jest przetestowanie, czy istnieje indeks "x" w tablicy _POST (dla danego pola). Mamy więc kod:

  1. $error = 0; // na razie brak błędów
  2. $pola = array ('login', 'email', 'imie', 'nazwisko', 'pass', 'pass2');
  3. foreach ($pola as $key) { // bierzemy poszczególne indeksy zdefinowanej wcześniej tablicy $pola
  4. if (! isset ($_POST[$key])) { // jeśli NIE istnieje w tablicy taki indeks, jaki aktualnie przetwarzamy
  5. $error++; // to zwiększamy wartość zmiennej $error o 1
  6. }
  7. }

Oczywiście dalej mamy całą logikę, która sprawdza czy user istnieje w bazie, czy hasła są identyczne... Niemniej, w zmiennej $error będziemy mieli ilość pól, które nie zostały wypełnione. Wiemy wówczas, że dalsze przetwarzanie formularza nie ma sensu, bo nie mamy wypełnionych wszystkich pól - a są one wymagane. W związku z czym trzeba wyświetlić userowi komunikat i ewentualnie ponownie wyświetlić formatkę.

Dalsza logika to oczywiście operacja na wprowadzonych wartościach, i tak, załóżmy, że dla celów poglądowych chciałbyś je (czyli wszystkie wprowadzone dane) po prostu wyświetlić. Tym razem:
  1. foreach ($_POST as $key => $value) {
  2. echo "klucz <b>" . $key . "</b> ma wartość: " . $value . "<br>";
  3. }

Robimy to samo co wyżej, ale konstrukcja "as $key => $value" powoduje przypisanie nam odpowiedniego klucza i jego wartości odpowiednio do zmiennych $key i $val. Jest to oczywiście identyczne funkcjonalnie z kodem:
  1. foreach ($_POST as $key) {
  2. echo "klucz <b>" . $key . "</b> ma wartość: " . $_POST[$key] . "<br>";
  3. }

i oczywiście w takiej postaci też możesz się do tablicy $_POST odwoływać.
michat34
dziekuje bardzo za wytlumaczenie. mozna zamknac temat
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.