adamantd
15.04.2013, 13:31:31
Cześć woła mi NOTICE i wskazuje na linijkę w której jest pętla while,
nie mogę rozkminić dlaczego
$i=0;
$ok=0;
while(count($accessTab[$i])>0
){ if($_SESSION['adm_access']==$accessTab[$i]){
$ok=1;
}
$i++;
}
podpowie ktoś?
nospor
15.04.2013, 13:43:26
Byłoby miło jakbyś uraczył jeszcze nas tym noticem.... ale zapewne chodzi o to, że odwolujesz się do indeksu tablicy, który nie istnieje...
edit:
while(count($accessTab[$i])>0){
Możesz mi napisać, co niby twoim zdaniem robi to cos?
adamantd
15.04.2013, 13:43:40
Notice: Undefined offset: 2 in C:\WebServ\httpd\medic_localhost\CLASS\adminManager.class.php on line 73
nospor
15.04.2013, 13:45:05
Poprostu uzywaj isset zamiast count....
adamantd
15.04.2013, 13:48:20
Pomogło tylko pytanie czy to będzie działać dokładnie tak samo, ponieważ przed każdym zapętleniem sprawdzam czy tablica jest większa od zera, jeżeli dojdzie do końca to po zliczeniu wartość count wynosiłaby -1.
I pytanie czy: count($tablica[$i]>0), które równa się -1 jest równe isset($tablica[$i]) które się równa false
matiit
15.04.2013, 13:48:39
Jeszcze tak w ogóle zastanów się nad sensownością tego kodu
Powiedz może co chcesz osiągnąć i "razem" napiszemy coś lepszego, ładniejszego.
adamantd
15.04.2013, 13:51:45
Pierwszy etap sprawdzenia praw dostępu do poszczególnych zakładek, porównanie zdefiniowanych wcześniej praw dostępu do tego co w sesji
nospor
15.04.2013, 13:52:57
while(isset($accessTab[$i]) && count($accessTab[$i])>0){
ps: przenosze na przedszkole bo zeby nie umiec uzyc isset to lekka przesada jak na php
adamantd
15.04.2013, 13:55:56
to wstyd mi

dzięki za podpowiedź
nospor
15.04.2013, 13:59:04
A Ty zapoznaj się z FOREACH bo do latania po pętlach to służy właśnie to.
adamantd
15.04.2013, 14:02:51
Używam na zmianę foreach, for i while.
foreach używam najczęściej świeżo po wyciągnięciu danych z bazy jak chcę wszystko powyświetlać. W czym jest while gorsze? Foreach inaczej działa, bez względu na to jak są ponumerowane klucze i czy tablica jest assocjacyjna czy numeryczna jedzie po kolei a while po numerach, tutaj jakoś lepiej było mi zastosować while
nospor
15.04.2013, 14:05:21
FOREACH służy do latania po tablicach niezaleznie czy one są numerowane pokolei czy nie.
W czym jest lepsze FOREACH od while? Ano przy foreach nie miałbyś tak głupiego błędu.
I poraz kolejny ci piszę: do latania po tablicach używa się właśnie FOREACH - po to zostało stworzone.
Owszem, jak ktoś ma widzimisie to może używać while... tylko by to używać to trzeba umieć i rozumieć co się robi.
adamantd
15.04.2013, 14:07:48
jak zaczynałem naukę półtorej roku temu php w ebookach ani na videokursach nigdzie nie pisało, że while używa się tylko jak ma się widzimisie

ale człowiek uczy się całe życie, będę używał zatem częściej foreach, choć czasami mimo wszystko lepiej mi użyć while.
nospor
15.04.2013, 14:10:40
Nie napisałem że while się uzywa gdy ma się widzimisie, tylko że while się używa do tablic gdy ma się widzimisie - lekka różnica.
WHILE jest bardzo potrzebną konstrukcją, tylko trzeba rozumieć do czego.
adamantd
15.04.2013, 14:14:55
mógłbyś rzucić jakiś przykład, żebym wiedział na przyszłość kiedy while, kiedy foreach?
nospor
15.04.2013, 14:16:03
Już ci pisałem....
FOREACH - gdy iterujesz po tablicy - tu naprawdę nie ma żadnej filozofii...
WHILE - gdy masz mieć pętle która będzie sie wykonywać do czasu spełnienia warunku... W szczegolnosci można tu iterować właśnie po tablicy, ale to sztuka dla sztuki, tzw. widzimisie
adamantd
15.04.2013, 14:16:52
wszystko jasne -dzięki
ja jestem jeszcze chyba na etapie udowadniania sobie, że potrafię zamiast na etapie upraszczania sobie życia
matiit
15.04.2013, 14:18:54
Kiedy czekasz na zdarzenie, które nie jest z tablicy - np. aż wartość jakiejś zmiennej będzie większa od 10:
$x = pobierz_zmienna_x_z_innego_serwera();
while ($x <=10)
{
//czekamy i znowu pobieramy zmiennną
$x = pobierz_zmienna_x_z_innego_serwera();
}
// x jest > 10, mozemy cos robic
$x może symbolizować stan drugiego serwera, jeśli jest większe od 10 - serwer np. jest otwarty i dopiero teraz możemy sie z nim połączyć.
Poza tym wyobraź sobie sytuację, że chcemy sprawdzać czy jakaś strona się zmieniła:
$alarm = new Alarm('loud');
while($new_page_html == $page_html)
{
//strona się nie zmieniła, czekamy i pobieramy jeszcze raz
}
// strona się zmieniła, możemy na przykład włączyć alarm.
$alarm->turnOn('short');
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.