Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Warning: in_array() [function.in-array]: Wrong datatype for second argument in
Forum PHP.pl > Forum > Przedszkole
Kshyhoo
Witam. Nie mogę poradzić sobie z problemem. Mam komunikat błędu:
Cytat
Warning: in_array() [function.in-array]: Wrong datatype for second argument in (...)\search.php on line 305

Od linii 305:
  1. echo "<td class='tbl1'><select id='datelimit' name='datelimit' class='textbox'".($_GET['stype']!="all"?(in_array("datelimit", $form_elements[$_GET['stype']]['disabled'])?" disabled='disabled'":""):"").">\n";
  2. echo "<option value='0'".($_GET['datelimit']==0?" selected='selected'":"").">wszystkie dni</option>\n";
  3. echo "<option value='86400'".($_GET['datelimit']==86400?" selected='selected'":"").">ostatni dzień</option>\n";
  4. echo "<option value='604800'".($_GET['datelimit']==604800?" selected='selected'":"").">ostatni tydzień</option>\n";
  5. echo "<option value='1209600'".($_GET['datelimit']==1209600?" selected='selected'":"").">ostatnie 2 tygodnie</option>\n";
  6. echo "<option value='2419200'".($_GET['datelimit']==2419200?" selected='selected'":"").">ostatni miesiąc</option>\n";
  7. echo "<option value='7257600'".($_GET['datelimit']==7257600?" selected='selected'":"").">ostatnie 3 miesiące</option>\n";
  8. echo "<option value='14515200'".($_GET['datelimit']==14515200?" selected='selected'":"").">ostatnie 6 miesięcy</option>\n";
  9. echo "</select></td>\n";

Dane z tablic:
CODE
Array
(
[articles] => Array
(
[enabled] => Array
(
[0] => datelimit
[1] => fields1
[2] => fields2
[3] => fields3
[4] => sort
[5] => order1
[6] => order2
[7] => chars
)

[disabled] => Array
(
)

[display] => Array
(
)

[nodisplay] => Array
(
)

)

[custompages] => Array
(
[enabled] => Array
(
[0] => fields1
[1] => fields2
[2] => fields3
[3] => order1
[4] => order2
[5] => chars
)

[disabled] => Array
(
[0] => datelimit
[1] => sort
)

[display] => Array
(
)

[nodisplay] => Array
(
)

)

[faqs] => Array
(
[enabled] => Array
(
[0] => fields1
[1] => fields2
[2] => fields3
[3] => order1
[4] => order2
)

[disabled] => Array
(
[0] => datelimit
[1] => sort
[2] => chars
)

[display] => Array
(
)

[nodisplay] => Array
(
)

)

[members] => Array
(
[enabled] => Array
(
[0] => order1
[1] => order2
)

[disabled] => Array
(
[0] => datelimit
[1] => fields1
[2] => fields2
[3] => fields3
[4] => sort
[5] => chars
)

[display] => Array
(
)

[nodisplay] => Array
(
)

)

[news] => Array
(
[enabled] => Array
(
[0] => datelimit
[1] => fields1
[2] => fields2
[3] => fields3
[4] => sort
[5] => order1
[6] => order2
[7] => chars
)

[disabled] => Array
(
)

[display] => Array
(
)

[nodisplay] => Array
(
)

)

[photos] => Array
(
[enabled] => Array
(
[0] => datelimit
[1] => fields1
[2] => fields2
[3] => fields3
[4] => sort
[5] => order1
[6] => order2
[7] => chars
)

[disabled] => Array
(
)

[display] => Array
(
)

[nodisplay] => Array
(
)

)

[tutoriale] => Array
(
[enabled] => Array
(
[0] => datelimit
[1] => fields1
[2] => fields2
[3] => fields3
[4] => sort
[5] => order1
[6] => order2
[7] => chars
)

[disabled] => Array
(
)

[display] => Array
(
)

[nodisplay] => Array
(
)

)

[weblinks] => Array
(
[enabled] => Array
(
[0] => datelimit
[1] => fields1
[2] => fields2
[3] => fields3
[4] => sort
[5] => order1
[6] => order2
[7] => chars
)

[disabled] => Array
(
)

[display] => Array
(
)

[nodisplay] => Array
(
)

)

)

Niestety, mało znalazłem informacji na temat tego błędu w Googlach (nie znam angola, tam jest więcej).

EDIT: spoiler nie działa, więc wrzucam w codebox.
blooregard
Cytat
(nie znam angola, tam jest więcej).

Pozwól więc, że Cię wyręczę i Ci przetłumaczę:

Cytat
Warning: in_array() [function.in-array]: Wrong datatype for second argument in (...)\search.php on line 305

Ostrzeżenie: w funkcji in_array() drugi argument jest nieprawidłowego typu (w jej wywołaniu w 305 linijce skryptu (...)/search.php)

Patrzymy do linijki 305:
  1. echo "<td class='tbl1'><select id='datelimit' name='datelimit' class='textbox'".($_GET['stype']!="all"?(in_array("datelimit", $form_elements[$_GET['stype']]['disabled'])?" disabled='disabled'":""

Drugim argumentem in_array() jest $form_elements[$_GET['stype']]['disabled']

Patrzymy do dokumentacji in_array() na php.net:
http://pl.php.net/in_array

I czytamy:
Cytat
in_array ? Sprawdza czy wartość istnieje w tablicy
Opis
bool in_array ( mixed $igła , array $stóg_siana [, bool $ścisłe ] )

Przeszukuje stóg_siana w poszukiwaniu parametru igła i zwraca TRUE jeśli wartość została znaleziona lub FALSE w przeciwnym przypadku.

Jeśli trzeci parametr ścisły jest ustawiony na TRUE to in_array() porówna także typy parametru igła z tymi z parametru stóg_siana .


Drugim argumentem f-cji in_array() jest array, czyli tablica.

Dodajemy 1+1 i mamy 2:
$form_elements[$_GET['stype']]['disabled'] nie jest tablicą.

Robimy var_dump($_GET) i szukamy elementu 'stype', sprawdzamy, jakiego jest typu i poprawiamy błąd.
Kshyhoo
Treść błędu wiem co oznacza, nie umiem sobie poradzić z jego usunięciem. var_dump użyłem, ale chyba nieumiejętnie, bo nie wyświetliło mi niczego. Znalazłem taki kod:
  1. <?php
  2. function print_pre($form_elements) {
  3. echo "<pre>";
  4. if (is_array($form_elements)) $wynik = print_r($form_elements, true);
  5. echo preg_replace("/ {2}/s", " ", $wynik);
  6. echo "</pre>";
  7. }
  8.  
  9. print_pre($form_elements);
  10. ?>

I za jego pomocą wylistowałem zawartość tablic.
Problemowy kod podpatrzyłem w innym skrypcie i tam działa bez problemów...
blooregard
Cytat
Problemowy kod podpatrzyłem w innym skrypcie i tam działa bez problemów...

Widocznie tam in_array() otrzymuje jako drugi argument tablicę, a nie inny typ.

Cytat
Treść błędu wiem co oznacza, nie umiem sobie poradzić z jego usunięciem.

Napisałem Ci wszystko, co jest potrzebne do usunięcia tego rodzaju błędu.
Kshyhoo
Znalazłem problem, po prostu:
  1. $settings['default_search'] = 'news'; // dopisalem
  2.  
  3. if (!isset($_GET['stype'])) { $_GET['stype'] = $settings['default_search']; }
  4.  
  5. echo "<td class='tbl1'><select id='datelimit' name='datelimit' class='textbox'".($_GET['stype']!="all"?(in_array("datelimit", $form_elements[$_GET['stype']]['disabled'])?" disabled='disabled'":""):"").">\n";

$settings['default_search'] pobierało z bazy danych...

Dzięki za pomoc.

Jedyny teraz problem, że nie ustawia domyślnej wartości.
palonek
nie jestem specjalistą ale do $_GET'u można zapisywać dane w ten sposób?:
  1. $_GET['stype'] = $settings['default_search'];


bo ja zawsze robie tak, jak chce mieć wartość domyślną:
  1.  
  2. $zmienna = 'wartosc';
  3. if(isset($_GET['zmienna']))$zmienna = addslashes($_GET['zmienna']);


sądze ze taki kod by działał (ale jestem laikiem biggrin.gif):
  1.  
  2. $settings['search'] = 'news'; // dopisalem
  3. if (isset($_GET['stype']))$settings['search'] = $_GET['stype'];
  4. echo "<td class='tbl1'><select id='datelimit' name='datelimit' class='textbox'".($settings['search']!="all"?(in_array("datelimit", $form_elements[$settings['search']]['disabled'])?" disabled='disabled'":""):"").">\n";
Kshyhoo
Cytat(palonek @ 26.01.2010, 08:09:09 ) *
nie jestem specjalistą ale do $_GET'u można zapisywać dane w ten sposób?:
  1. $_GET['stype'] = $settings['default_search'];

A dlaczego nie? Można...

Twoja wersja selekta pomogła, łapie teraz ładnie domyślną wartość. Dzięki za pomoc. +
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.