Sesje i koszyk na produkty

0

Hej posiadam listy rozwijalne w której użytkownik wybiera odpowiednie parametry swojego produktu i po naciśnięciu przycisku wyświetla mu się dany produkt w postaci kodu. Muszę zrobić coś al`a koszyk na zakupy, w sensie ktoś wybrał pierwszy produkt, wyświetlił mu się jego kod, no i następnym przyciskiem dodaje mu ten kod do koszyka, ten koszyk wystarczy że bedzie mógł dodawać nowe obiekty i usuwać. Nic wiecej nie trzeba zadnych cen itp.
Niestety nie mam pojęcia jak się za to zabrać, te $_SESSION to dla mnie czarna magia :(
Może ktoś mi podrzuci jakiś pomysł jakby to zrobić? Dziękuję za wszelkie wskazówki :)

0

A czy szukałeś gdzieś informacji o tym, jak działają sesje?

Zasadniczo jest to naprawdę prosty mechanizm, więc z tą "czarną magią" lekko przesadziłeś.

Obsługa sesji sprowadza się do jej rozpoczęcia.
Potem - przy okazji działań na koszyku - dodajesz tam jakieś wpisy, a na końcu idziesz dalej - dane zapisane w sesji nie giną i są dostępne do dalszego przetwarzania przez PHP.

Napisz proszę dokładniej co masz zrobione oraz z czym sobie nie radzisz. Twoje pytanie z początku wątku jest za mało konkretne.

Poza tym nie jestem pewien, czy dobrze rozumiem, ale moim zdaniem to, o czym piszesz wymaga także AJAX'a, jeśli chcesz sobie coś dodawać dynamicznie do koszyka, bez przeładowywania strony za kazdym razem. Opisz dokładniej co masz, czego chcesz i gdzie utknąłeś.

0

No dobra mam takie coś jakby. Gdy kliknę na przycisk wyswietla się kod, który automatycznie wpisuje sie w pole typu text o takim kodzie:

<?php $_SESSION['koszyk'] = $p; ?> <input type="text" name="kod" value="&lt;?php echo $_SESSION['koszyk']; ?">" />

i powyższy kod muszę tak zrobić aby po naciśnieciu każdorazowo tego przycisku wyswietlał mi się kolejny kod pod tym co jest już teraz. Pewnie jakaś pętla wchile albo for ale jak ją tutaj zaimplementować nie mam pojecia.

0

Podstawowe pytanie - czy wcześniej, zanim uruchamiasz podany fragment, masz gdzieś rozpoczęcie sesji?

Każdą zabawę z sesją rozpoczyna się od php session_start(); , inaczej zapisywanie sobie czegokolwiek do tablicy php $_SESSION nie ma żadnego sensu.

0

tak oczywiscie na samej górze tak mam napisane

0

To dobrze, że zaczynasz sesję poprawnie.
Ale w postaci, w jakiej to napisałeś raczej nie ma prawa to działać.

PHP jest przetwarzane po stronie serwera, a z tego co rozumiem, Ty to dajesz do pliku HTML i przesyłasz do przeglądarki.
Może lepiej wrzuć ja jsfiddle.net cały kod - wtedy będzie łatwiej rozmawiać.

0

jeżeli mnie rozumiesz to musze zrboic petle na tym impucie aby mi sie pojawiała każda opcja po nakliknieciu wczesniej wspomnianego submita

0

Przeczytaj jeszcze raz to, co napisałem w poprzednim poście.
O ile dobrze rozumiem to, co wkleiłeś - wygląda, jakbyś chciał osadzić PHP w HTML, a następnie przetwarzać to po stronie przeglądarki.
Sugeruje to fragment Gdy kliknę na przycisk wyswietla się kod, który automatycznie wpisuje sie w pole typu text - ja to rozumiem tak, że sobie dodajesz coś w przeglądarce (jeśli źle rozumiem, to napisz jaśniej i bardziej opisowo). Ale ona nie jest w stanie wykonać skryptu PHP - to się dzieje jedynie po stronie serwera.
Szczerze mówiąc - nie rozumiem o co Ci chodzi :(

0
  @$p = $_POST["typ_oslonki"] . $_POST["dod_typ_oslonki"] . "-".$_POST["kolor"] . "-".$_POST["kaliber"] . "-". $_POST["pakowanie"].$_POST["dodatki"] . "-".$_POST["metry"] . "-".$_POST["gatunek"];

<?php
$_SESSION['koszyk'] = $p; 
?>
<input type="text" name="kod" value="<?php echo $_SESSION['koszyk']; ?>"/>

Ogólnie to sprawa jest banalna tylko ja jestem tępa strzała i nie umiem zwykłej pętli zrobić

To co tu jest to wycinki kodu bo jest go okolo 400 linijek. To co robie tutaj to mi działa tylko potrzebuję zrobić że jak nacisne znowu przycisk submit to nowy kod wpisuje mi się pod tym imputem w takim samym formacie, i nie wiem jakiej i jak pętli użyć aby to działało

0

0

TO może inaczej, po kolei: wyjaśnij mi, jak to ma działać.

Rozumiem, że ktoś wchodzi na stronę i poprzez klikanie na tych żółtych polach wybiera sobie parametry produktu.
Potem wciska "wyświetl kod" i pojawia się jakaś magiczna wartość w stylu tych FC-C01-17...
Pytanie - czy to kliknięcie "wyświetl kod" dzieje się dynamicznie, czy powoduje przeładowanie strony?
W którym momencie i w jaki sposób są uruchamiane dwa podane przez Ciebie fragmenty kodu - czyli @$p=@_POST... oraz <?php $_SESSION['koszyk']...?

0

powoduje to odświeżenie strony

$p to 257 linia
$_SESSION to linia 400

0

OK. Czyli to, co chcesz osiągnąć to sytuacja następująca:

  1. wybierasz parametry i wciskasz "dodaj".
  2. strona się przeładowuje, a na dole pojawia się kod wybranego wcześniej produktu
  3. możesz wybrać inne parametry i ponownie wcisnąć "dodaj"
  4. strona się ponownie przeładuje, a po jej odświeżeniu będziesz miał już dwa kody
    powyższe kroki można powtarzać w nieskończoność, za każdym razem ilość produktów ma się powiększać.
    Czy dobrze Cię rozumiem?
0

do $p zostaje przypisany "magiczny kod", który w dalszej instrukcji zostaje porównany z innymi kodami z bazy, i wyświetla się odpowiedni komunikat typu zgłoś się do technologa, a jezeli zwykly user wybierze odpowiedni kod i taki sam jest w bazie to wtedy kieruje go do działu sprzedaży.

a dzieki tej zmiennej $_SEESION moge wyswietlic ten kod na stronie koszyka, a potrzebuje taką pętle która po każdorazowym kliku "wyświetl kod" zapisywała mi na tym przyciskiem "dodaj do koszyka" te wszystkie kody jakie do tej pory user wybrał - jedno pod drugim w input type="text".

0

Tak o to chodzi mniej wiecej, bo to ma być koszyk, ino za chiny ludowe nie mialem pomysl jak go zrobić więc myśle że tak by to zrobił

0

Chyba że masz lepszy optymalny pomysł, niestety mi jest ciezko coś tak sprytnego wymyślić :(

0

$_SESSION['koszyk'] = $p; 
for ($i=0; $i <count($_SESSION['koszyk']) ; $i++) 
{

echo '<input type="text" name="kod" value="'.$_SESSION['koszyk'].'" style="font-size: 14pt; font-family: Times New Roman; width: 350px; height: 30px; border-style: solid; border-color: #238D0B; border-width: 4px; text-align: center;"/><br />';
}

Nie wiem czy ma to być coś takiego, nie chce działać ale może jestem na dobrej drodze??

1

Dobrze kombinujesz, ale masz trochę błędów w założeniach.

$_SESSION to tablica asocjacyjna - czyli zamiast liczb wskazujących na konkretne indeksy, dostajesz się do jej zawartości poprzez "nazwy" (do poczytania - https://www.p-programowanie.pl/php/tablice-asocjacyjne/). Przykładowo $_SESSION['koszyk'] odnosi się do elementu tablicy $_SESSION o nazwie "koszyk". Ty, jeśli chcesz mieć ileś pozycji w koszyku, to możesz zrobić coś w stylu $_SESSION['koszyk_poz_1'], $_SESSION['koszyk_poz_2'] i tak dalej. W ten sposób każdy taki wpis będzie zawierać informację o jednym produkcje.

Kolejna sprawa - ponieważ tablica jest asocjacyjna, więc odwołujesz się do jej elementów nie poprzez liczbę będącą indeksem, ale - jak pisałem wcześniej - przez nazwę. W związku z tym masz błąd w swojej pętli for ($i=0;..... Po pierwsze - ona sobie przechodzi ileś razy, ale nie ma związku z tablicą sesyjną. W każdym jej przebiegu masz to sam odwołanie value="'.$_SESSION['koszyk'].'" - więc na logikę, skoro zmienną sterująca pętli jest $i, to wypadałoby ją jakoś wykorzystać do odczytu kolejnych pozycji tablicy. Sprawdź proszę, co to jest foreach - to powinno rozwiązać Twoje problemy z odczytem tablicy (do poczytania - https://pl.wikibooks.org/wiki/PHP/Instrukcja_foreach).

Tylko jak napisałem - foreach dotyczy odczytu tablicy, ale musisz jeszcze pamiętać o tym, co było wyżej - czyli poprawnym jej zapisie. Nie wrzucaj wszystkiego do $_SESSION['koszyk'], tylko $_SESSION['koszyk_poz_1'], $_SESSION['koszyk_poz_2'] i tak dalej

Porada przy okazji - staraj się dawać bardziej opisowe nazwy, niż $i - bo ona nic nie mówi. Oczywiście - będzie działać, ale przez to kod jest mniej czytelny.

P.S. Czemu nie założysz sobie konta na 4P, tylko piszesz cały czas jako osoba anonimowa/niezalogowana?

0

Napisałem to tak, ponieważ dalej nie rozumiem jak i gdzie wpisać $_SESSION['koszyk_1'], $_SESSION['koszyk_2'] i tak dalej...

<?php
$_SESSION['koszyk'] = $p; 
foreach ($_SESSION as $key => $value) 
{

echo '<input type="text" name="kod" value="'.$value.'" style="font-size: 14pt; font-family: Times New Roman; width: 350px; height: 30px; border-style: solid; border-color: #238D0B; border-width: 4px; text-align: center;"/><br />';
}
var_dump($_SESSION['koszyk']);
?>

wychodzi takie coś, gdy value="'.$value.'" ::

gdy value="'.$key.'" ::

gdy value="'.$_SESSION['koszyk'].'" ::

i to wszystko ma pewnie związek z innymi zmiennymi $_SESSION, które wziąłęm z poradnika pana Zelenta, o logowaniu i rejestracji. Kod na tej stronie mam taki (u góry teko pliku co są te listy rozwijane):

<?php
        @$role = $_SESSION['user_role'];
        @$id = $_SESSION['id'];
        if (isset($_SESSION['zalogowany'])) {
        echo "<p>Witaj ".$_SESSION['user']. "! [ <a href='logout.php?id=$id'>Wyloguj się!</a> ]</p>";
        }else{
         echo '<a href="panel.php">Zaloguj się</a><br><br>';
        }
         if ((@$_SESSION['user_role'] === 'user') || (@$_SESSION['user_role'] === '')){
        echo '<a href="user_panel.php?user_role=$role">Wyśwetl panel użytkownika</a><br><br>';
        }
         elseif (@$_SESSION['user_role'] === 'admin')
        {
        echo '<a href="index1.php?user_role=$role">Wyświetl panel admina</a><br><br>';
        }
        ?>
0
unset($_SESSION['koszyk']["-----"]);

foreach ($_SESSION['koszyk'] as $key => $value) 
{
echo '<label>';
echo '<input type="checkbox" name="kod"/>';
echo '"'.$value.'"<br />';
echo '</label>';
}

Zrobiłem to tak i działa ładnie :D

0

No i dobra, mając ten kod na innej stronie o nazwie koszyk.php:

    <?php
unset($_SESSION['koszyk']["-----"]);

foreach ($_SESSION['koszyk'] as $key => $value) 
{
echo '<label>';
echo '<input type="checkbox" name="kod"/>';
echo '"'.$value.'"<br />';
echo '</label>';
}
?>

potrzebuje aby przy nacisnieciu mojego przycisku wyskoczył taki komunikat że produkt został dodany do koszyka, jak tu takie coś zrobić?

1 użytkowników online, w tym zalogowanych: 0, gości: 1