Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] "[] operator not supported"
Forum PHP.pl > Forum > Przedszkole
Kulfon
Cześć.
mam taki fragment kodu:

  1. $j = 0;
  2. if(isset($_POST['tytul']) && $_POST['tytul'] != '')
  3. {
  4. foreach($_POST['tytul'] as $value){
  5. $tytul[] = $value;
  6. }
  7. foreach($_POST['typ_id'] as $key => $value){
  8. $typ_id[] = $value;
  9. }
  10. $j = count($typ_id) - 1;
  11. while($j >= 0){
  12. $query_kat = 'UPDATE '.$rodzaj2typ.' SET typ = \''.$tytul[$j].'\' where id = '.$typ_id[$j].'; ';
  13. $query = mysql_query($query_kat);
  14. if(!$query){die("Nie można wykonać zapytania do bazy danych");}
  15. else
  16. {
  17. $komunikat = 'Pomyślnie zapisano zmiany';
  18. }
  19. $j--;
  20. }
  21. }
  22. else
  23. {
  24. $_POST['typ_id'] = '';
  25. }
  26.  
  27. foreach ($category['products'] as $product){
  28. echo '<div class="pozycja"><span class="tytul"><input type="text" name="tytul[]" value="'.$product['name'].'" /></span>
  29. <span class="cena"><input type="text" name="cena[]" value="'.$product['cena'].'" /> <p>zł</p></span>
  30. <input type="hidden" name="typ_id[]" value="'.$product['id'].'" /></div>';
  31. }


xDebug wyrzuca błąd przy wysyłaniu formularza: Fatal error: [] operator not supported for strings in C:\wamp\www\funkcja1.php on line 4.

Czy możecie mi wyjaśnić co robię źle? Troszkę wcześniej w tym samym pliku pobieram sobie dane z innej tabeli (też tekst) wypisuję w formularzu tak samo jak tutaj i mogę to przesłać dokładnie w ten sam sposób jak tutaj - różnica jest tylko w nazwach $_POST. Tamto działa, a przy tym fragmencie wywala mi taki błąd i nie mam pojęcia jak to obejść.

Skrypt ma za zadanie w jednym formularzu przesłać dość dużą ilość danych i chciałem do tego celu użyć tablic w $_POST
Moim zamiarem było utworzenie takiej tablicy przy przesyłaniu formularza, a następnie po kolei zaktualizowanie wszystkich pól w bazie w zależności od tego ile ich będzie.
Pętle foreach() "przerabiają" mi wszystko to co mam w kolejnych POST'ach na tablice, z których łatwiej jest mi powyciągać wartości (nie wiem czy da się to zrobić inaczej, tak sobie wykombinowałem, gdyż w miejsce nazwy w POST nie można wstawić zmiennej ($_POST[$zmienna]) albo po prostu nie wiem jak to zrobić).
A następnie w zależności od tego ile mam elementów w tych tablicach tyle razy wysyłam zapytanie do bazy danych zmieniając przy tym indeksy w odpowiednich tablicach smile.gif

Proszę o pomoc.
lukasz_p
Hej!

Sprawdź co przeszło dalej. Umieść na samej górze skryptu:

  1. <pre>
  2. <?php var_dump($_POST); ?>
  3. </pre>
  4. <?php exit(); ?>


Może tutaj znajdziesz jakąś wskazówkę.
Kulfon
Sprawdzone.
Cała struktura wyświetla się tak jak powinna.
Nigdzie żadnego błędu

tak to się prezentuje:
  1. 'nazwa_kat' =>
  2. 0 => string 'Kategoria' (length=9)
  3. 1 => string 'Następna kategoria' (length=18)
  4. 'id_kat' =>
  5. 0 => string '1' (length=1)
  6. 1 => string '4' (length=1)
  7. 'tytul' =>
  8. 0 => string 'tytuł' (length=5)
  9. 1 => string 'tytuł 2' (length=7)
  10. 2 => string 'tytuł 4' (length=7)
  11. 3 => string 'tytuł 5' (length=7)
  12.  
  13. 'cena' =>
  14. 0 => string '12.12' (length=5)
  15. 1 => string '10.53' (length=5)
  16. 2 => string '10.53' (length=5)
  17. 3 => string '10.53' (length=5)
  18.  
  19. 'typ_id' =>
  20. 0 => string '1' (length=1)
  21. 1 => string '2' (length=1)
  22. 2 => string '3' (length=1)
  23. 3 => string '19' (length=2)
  24.  
lukasz_p
A spróbuj wcześniej zainicjować $tytul jako array. Przed forech wstaw $tytul = array();
melkorm
Pokaż ten pierwszy fragment kodu.
Cytat
Troszkę wcześniej w tym samym pliku pobieram sobie dane z innej tabeli (też tekst) wypisuję w formularzu tak samo jak tutaj i mogę to przesłać dokładnie w ten sam sposób jak tutaj - różnica jest tylko w nazwach $_POST. Tamto działa, a przy tym fragmencie wywala mi taki błąd i nie mam pojęcia jak to obejść.
Kulfon
Dziękuję. Działa smile.gif
wstawiłem
$tytul = array();
przed:

  1. foreach($_POST['tytul'] as $value){
  2. $tytul[] = $value;
  3. }

Naprawione wygląda to tak:
  1. $tytul = array();
  2. foreach($_POST['tytul'] as $value){
  3. $tytul[] = $value;
  4. }


Dla ciekawskich - wcześniejszy fragment kodu miał zadeklarowaną odpowiednią zmienną jako array();
  1. $nazwa_kat = array(); // tutaj na górze w miejscu gdzie sobie wszystkie zmienne deklarowałem
  2. $i = 0;
  3. $j = 0;
  4.  
  5. if(isset($_POST['nazwa_kat']) && $_POST['nazwa_kat'] != '')
  6. {
  7. foreach($_POST['nazwa_kat'] as $key => $value){
  8. $nazwa_kat[] = $value;
  9. }
  10. foreach($_POST['id_kat'] as $key => $value){
  11. $id_kat[] = $value;
  12. }
  13. $i = count($id_kat) - 1;
  14. while($i >= 0){
  15. $query_kat = 'UPDATE '.$rodzaj2kat.' SET kategoria = \''.$nazwa_kat[$i].'\' where id = '.$id_kat[$i].'; ';
  16. //echo($query_kat);
  17. $query = mysql_query($query_kat);
  18. if(!$query){die("Nie można wykonać zapytania do bazy danych");}
  19. else
  20. {
  21. $komunikat = 'Pomyślnie zapisano zmiany';
  22. }
  23. $i--;
  24. }
  25. }


Wybaczcie zamieszanie - zmęczenie i bajzel w kodzie swoje robią.
Jeszcze raz dziękuję za pomoc smile.gif
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.