![]() |
![]() ![]() |
![]() |
![]()
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. A tu fragment odpowiadający za zmianę tej wartości.
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 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? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Wrzuć kod:
przed formularzem i przed kodem odpowiedzialnym za zmiany (tym co w Twoim poście). Wtedy zobaczysz, co kryją zmienne $_POST i $_SESSION['koszyk']. Możesz wyniki zapodać tutaj. |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 144 Pomógł: 12 Dołączył: 16.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Sprawdz co kryje w sobie $x, bo może być pusta (nigdzie nie wiedzę deklaracji).
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 68 Pomógł: 3 Dołączył: 7.12.2009 Ostrzeżenie: (0%) ![]() ![]() |
Przed zmianą:
Array ( [58-M-Soft_Peach] => 2 [zapisz] => 1 [dostawa] => koszyk.php?o=1 ) Array ( [58-M-Soft Peach] => 1 ) Po zmianie: Array ( [58-S-Soft_Peach] => 3 [zapisz] => 1 [dostawa] => koszyk.php?o=1 ) Array ( [58-S-Soft Peach] => ) 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? Ten post edytował melior 26.02.2010, 09:26:41 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Przy wysyłaniu postem spacja pozostaje spacją! Problem leży gdzieś indziej.
EDIT: Wrzuć cały kod koszyk.php! Ten post edytował mortus 26.02.2010, 10:04:57 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 4 Dołączył: 12.07.2003 Ostrzeżenie: (0%) ![]() ![]() |
klucz w tablicy nie może zawierać spacji.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Kod Array ( [58-S-Soft Peach] => ) Jak nie może, skoro widzisz, że zawiera! Przecież 58-S-Soft Peach to klucz (index w tablicy)! |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 4 Dołączył: 12.07.2003 Ostrzeżenie: (0%) ![]() ![]() |
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. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 68 Pomógł: 3 Dołączył: 7.12.2009 Ostrzeżenie: (0%) ![]() ![]() |
Kod zminimalizowałem o elementy htmlowe, które wpływają na wygląd, a nie na funkcjonowanie fragmentu, który nas interesuje.
marins: Teoretycznie mogę tak zrobić, ale musiałbym zmienić to w wielu miejscach strony, czy bazy danych. Co więcej musiałbym przy wyświetlaniu zamieniać "_" na " " i zastanawiam się czy nie ma na to jakiejś prostszej rady. |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
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 stwierdzenieCytat 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: 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ł ![]() |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 144 Pomógł: 12 Dołączył: 16.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Żeby upewnić się na 100% zainstaluj sobie mozile +FireBug. Weź odpal aplikacje przejdz do formularza i uruchom FireBuga najedz myszką na tego inputa i zobacz Co Ci konsola pokazuje .... jak coś to wklej to tutaj i dalej pomyślimy
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Tu już nie ma nad czym myśleć. Pierwotnie parametr name inputa ma wartość np. 48-S-Soft Peach. A źródła wyraźnie mówią:
Cytat ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods ("."). Odsyłam do źródeł Oczywiście firebuga pod FF warto zainstalować, bo zdecydowanie ułatwia programowanie. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 13:01 |