Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> IE7/8 i funkcja unset w PHP
qrzysztof
post
Post #1





Grupa: Zarejestrowani
Postów: 220
Pomógł: 19
Dołączył: 25.04.2009

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


Wszyscy wiemy, że IE7/8 to badziewie jakich mało. Dotychczas myślałem, że te przeglądarkopodobne produkty wtrącają się tylko do HTML i CSS. Nic bardziej błędnego. Okazuje się, że potrafią namieszać również w kodzie PHP.

Mam poniższy kod:

  1. public function deleteQuestion ($id)
  2. {
  3.  
  4. if ( in_array($id, array_keys($this->_questions)) )
  5. {
  6. unset($this->_questions[$id]); #problematyczna linia
  7.  
  8. #usuniecie pytania z bazy
  9. $this->dbm->deleteQuestion($id);
  10.  
  11. return true;
  12. }
  13. return false;
  14. }


We wszystkich przeglądarkach działa poprawnie. Natomiast w IE7/8 po wejściu do tej funkcji a następnie do bloku warunkowego, zaznaczona przeze mnie linia powoduje wyjście z funkcji bez zgłoszenia błędu czy wyjątku. Jest to tym bardziej dziwne, że
Kod
$this->_questions[$id]
istnieje, a jeszcze bardziej ponieważ kolejna linia usuwająca pytanie z bazy jeszcze się wykonuje! Ale return true już najwyraźniej nie bo funkcja nie zwraca true!

Gdy zmienię kod na:
  1. if ( $this->questions[$id] )
  2. {
  3. unset($this->_questions[$id]); #problematyczna linia
  4. }


sytuacja nie ulega zmianie.

Zaznaczę, że do testów używam emulatorów IE7 na XP (ale różnych i we wszystkich jest tak samo), natomiast IE8 w pełnej wersji również na ten system.

Ten post edytował qrzysztof 9.09.2011, 09:13:21
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
qrzysztof
post
Post #2





Grupa: Zarejestrowani
Postów: 220
Pomógł: 19
Dołączył: 25.04.2009

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


Ustawienie raportowania na E_ALL wyrzuciło parę błędów.

Jednak więcej w FF niż w IE. W obu przypadkach szereg "Undefined index" i "Undefined variable".

Nie wydają się mieć związku z tematem i raczej nikomu poza mną nic nie powiedzą ale wklejam dla większej przejrzystości:

Kod
Notice: Undefined index: 1 in F:\xampp\htdocs\edu\common\abstract\class.display.php on line 207

Notice: Undefined variable: scriptString in F:\xampp\htdocs\edu\common\abstract\class.display.php on line 215

Notice: Undefined variable: stylesheetString in F:\xampp\htdocs\edu\common\abstract\class.display.php on line 236

Notice: Undefined variable: conditionalStylesheetString in F:\xampp\htdocs\edu\common\abstract\class.display.php on line 257

Notice: Undefined index: enabled in F:\xampp\htdocs\edu\common\abstract\class.display.php on line 282

Notice: Undefined variable: keyboard in F:\xampp\htdocs\edu\common\abstract\class.display.php on line 347

Notice: Undefined variable: popup in F:\xampp\htdocs\edu\common\abstract\class.display.php on line 348

Notice: Undefined variable: systemMessage in F:\xampp\htdocs\edu\common\abstract\class.display.php on line 352

Notice: Undefined variable: code in F:\xampp\htdocs\edu\common\classes\class.breadcrumb.php on line 72


Natomiast zastanawia mnie jedno. Dlaczego te błędy pojawiają się tylko właśnie przy usuwaniu pytań. Wysłałem parę innych formularzy. Część z nich polegająca na usuwaniu innych obiektów z bazy i tych błędów nie było.

Edit: już wiem czemu tylko przy usuwaniu pytań się pojawia, bo w złym miejscu dałem
(IMG:style_emoticons/default/smile.gif) Poprawiłem i teraz błędy są już wszędzie.

-----------------------------------------------------------------------------
Podsumujmy zatem naszą arcyciekawą (dzięki IE) sytuację:

Aplikacja wchodzi w tejże "przeglądarce" (7/8) prawidłowo do funkcji deleteQuestion i do bloku warunkowego if. Gdy już wejdzie do bloku if to w poniższym kodzie die() przerwie działanie.




  1. public function deleteQuestion ($id)
  2. {
  3. if ( in_array($id, array_keys($this->_questions)) )
  4. {
  5. die('JUPI, jestem!');
  6. unset($this->_questions[$id]); #problematyczna linia
  7.  
  8. #usuniecie pytania z bazy
  9. $this->dbm->deleteQuestion($id);
  10.  
  11. return true;
  12. }
  13. return false;
  14. }


Natomiast tu już nie przerwie:

  1. public function deleteQuestion ($id)
  2. {
  3. if ( in_array($id, array_keys($this->_questions)) )
  4. {
  5.  
  6. unset($this->_questions[$id]); #problematyczna linia
  7. die('JUPI, jestem!');
  8. #usuniecie pytania z bazy
  9. $this->dbm->deleteQuestion($id);
  10.  
  11. return true;
  12. }
  13. return false;
  14. }


To die() w tym drugim przypadku wykonuje się ale jakby tylko na poziomie funkcji deleteQuestion(). Nic po tej instrukcji już się nie wykona, czyli:
  1. #usuniecie pytania z bazy
  2. $this->dbm->deleteQuestion($id);
  3.  
  4. return true;

nie zostanie wykonane. Natomiast poza funkcją deleteQuestion kod okazuje się dalej wykonywać jakby tego die() nie było w ogóle.


Funkcja deleteQuestion na 100% wykonuje się raz!

Raportowanie błędów na poziomie E_ALL nie wykazało istotnych błędów.

edit-----------------------------------------------------
Problem zostawiam nierozwiązany bo odkryłem, że problem występuje tylko lokalnie - u mojego providera nie. Obsługę IE7 wyłączam 1 stycznia 2012 a IE8 1 stycznia 2013 - a do tego czasu pozostanę najprawdopodobniej u tego providera.

Ale włos się się jeży na myśl co to microsoftowskie g**no potrafi.

Ten post edytował qrzysztof 9.09.2011, 11:37:14
Go to the top of the page
+Quote Post

Posty w temacie
- qrzysztof   IE7/8 i funkcja unset w PHP   9.09.2011, 09:05:41
- - nospor   IE nie ma nic do php. [PHP] pobierz, plaintext pub...   9.09.2011, 09:10:43
- - darko   Ee raczej się mylisz z tym wtrącaniem się w kod ph...   9.09.2011, 09:10:57
- - nospor   I jeszcze Temat: Jak poprawnie zada pytanie Wyświe...   9.09.2011, 09:11:23
- - qrzysztof   Cytat(nospor @ 9.09.2011, 10:10:43 ) ...   9.09.2011, 09:31:20
- - nospor   No i już wiesz czemu nie działa unset - bo nie mas...   9.09.2011, 09:34:06
- - qrzysztof   Nospor, sprawa nie jest taka prosta jak się na pie...   9.09.2011, 09:38:23
- - nospor   SKoro nie istnieje na liscie twoje ID, to kod nie ...   9.09.2011, 09:40:21
- - qrzysztof   Wyświetla się Kodstring(4) "2425...   9.09.2011, 09:44:48
- - nospor   Dla IE? To się zdecyduj, co ci wyświetla, bo teraz...   9.09.2011, 09:45:48
- - qrzysztof   Chciałbym się zdecydować, ale to niestety nie ode ...   9.09.2011, 09:47:09
- - nospor   A jak skasujesz DIE to znowu wyświetlają się tylko...   9.09.2011, 09:48:19
- - qrzysztof   Ok, już sprawdzam... Na razie nie znalazłem na to...   9.09.2011, 09:49:08
- - nospor   zapytam ponownie: czy bez DIE dla IE wyświetlają s...   9.09.2011, 09:59:36
- - qrzysztof   Bez die: 2 elementy w tablicy z die: 3 elementy O...   9.09.2011, 10:04:29
- - drPayton   [PHP] pobierz, plaintext var_dump(array_keys...   9.09.2011, 10:07:34
- - nospor   CytatBez die: 2 elementy w tablicy z die: 3 elemen...   9.09.2011, 10:11:09
- - qrzysztof   @drPayton dał jednak dobry trop: O dziwo jeśli zr...   9.09.2011, 10:17:24
- - drPayton   Control question: $this->dbm != ...   9.09.2011, 10:20:07
- - qrzysztof   @drPayton - o zapętlaniu nie ma mowy, choć jeszcze...   9.09.2011, 10:22:23
- - nospor   CytatPonieważ to die(), które @nospor zaproponował...   9.09.2011, 10:24:17
- - qrzysztof   Ustawienie raportowania na E_ALL wyrzuciło parę bł...   9.09.2011, 12:14:39
- - melkorm   Za przeproszeniem: Pieprzysz farmazony że to aż st...   9.09.2011, 12:28:52
- - qrzysztof   1. Nie za bardzo mi się w tej chwili chce, choć ki...   9.09.2011, 12:41:17
- - melkorm   CytatTo die() w tym drugim przypadku wykonuje się ...   9.09.2011, 13:07:06
- - qrzysztof   No nie do końca. Tak jak pisałem. Die() się wykon...   9.09.2011, 13:23:49


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: 27.12.2025 - 11:32