Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][HTML] Błąd przy przesyłaniu danych z formularza
melior
post
Post #1





Grupa: Zarejestrowani
Postów: 68
Pomógł: 3
Dołączył: 7.12.2009

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


Witam,
Mam problem nad którym siedzę już n-tą godzinę i nadal nie mogę rozgryźć.

Kod nad jakim pracuje jest częścią sklepu internetowego, problem leży w koszyku.

Tutaj jest fragment formularza (koszyk.php), którego używam do zmiany ilości zamówień przy danym produkcie.

  1. <form action="koszyk.php" method="post">
  2. <input type="text" style="width:40; text-align:center; "value="<? echo $_SESSION['koszyk'][$x]?>" name="<? echo $x ?>">
  3. <input type="hidden" name="zapisz" value="1">
  4. <input type="submit" value="Przelicz">


A tu fragment odpowiadający za zmianę tej wartości.

  1. if(isset($_POST['zapisz'])) {
  2. foreach ($_SESSION['koszyk'] as $typ_produkt => $ilosc) {
  3. if($_POST[$typ_produkt]=='0')
  4. unset($_SESSION['koszyk'][$typ_produkt]);
  5. else
  6. $_SESSION['koszyk'][$typ_produkt] = $_POST[$typ_produkt];
  7. }
  8. }


Pod zmienną "x" i zmienną typ_produkt kryje się produkt zapisywany w postaci np. 55-S-Red, tj. ID-rozmiar-kolor.

Problem:
Przy kolorze składającym się z dwóch części oddzielonych spacją, np. Soft Peach, kiedy próbuję zmienić ilość to zamiast zmiany wartość znika i mam pustego inputa.
Myślałem na początku, iż post źle coś wysyłał (np. samo "Soft", co powodowałoby że miałbym produkt 55-S-Soft, zamiast 55-S-Soft Peach i było by wszystko jasne), jednak chyba tak nie jest. Próbowałem przepuszczać "name" inputa przez specjalną funkcję, która miała zamieniać spacje na specjalny kod, lub po prostu bawiłem się ze znakami ' i ". Nie działało.

Zresztą zaraz potem wykonywał się kod
  1. if(isset($_SESSION['koszyk'])&&array_count_values($_SESSION['koszyk']))

i array_count_values wywalał mi błąd, iż musi dostać STRINGA, lub INTEGERA

Nie mam pojęcia co jest nie tak.
Może ktoś rzucić na to okiem?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Cytat(marins @ 26.02.2010, 10:30:34 ) *
zamień spacje na podkreślenie.
Do indexa w array możesz nawet sobie polskie znaki wstawić - bo teoretycznie można, tak samo ze spacjami. Ale jest to duże ryzyko i nie praktykuje się takich znaków w indexie tablicy.

Nie krzycz.

Podaj źródło, które nie zaleca, bo w Manualu nic na ten temat nie ma.
Wracając do tematu.
Miałeś jednak rację
Cytat
Już widać o co chodzi. Przy wysyłaniu POSTem spacja zmienia się na znak "_" (przynajmniej tak sądzę). Dlaczego tak się dzieje? Można temu jakoś zapobiec?
Choć moje stwierdzenie
Cytat
Przy wysyłaniu postem spacja pozostaje spacją! Problem leży gdzieś indziej.
jest słuszne, to jednak odnosi się do wartości pola.
Wytłumaczę na podstawie poniższego kodu:
  1. <input type="text" name="nazwa_pola" value="wartość pola" />
Zgodnie ze specyfikacją html, atrybut name elementu formuarza nie może posiadać spacji, znaków narodowych i znaków specjalnych (poza pewnymi wyjątkami). Spacja zostanie zamieniona na znak _, ale nie przez sam PHP, tylko przez silnik przeglądarki. Natomiast value elementu formularza może już być dowolny. Odpowiedź na drugie pytanie - nie można temu zapobiec, ponieważ tak po prostu jest. Wniosek: TRZEBA ZROBIĆ INACZEJ!
@marins: Połowicznie miałeś rację, ale nie chodzi o tablicę PHP-owską, tylko o tablicę DOM elementów formularza.
Zwracam honor i obiecuję, że następnym razem lepiej się będę przyglądał (IMG:style_emoticons/default/wstydnis.gif)
Go to the top of the page
+Quote Post

Posty w temacie


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: 4.10.2025 - 13:38