Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problemy z tabelami w sesji, funkcje unsset
gitbejbe
post
Post #1





Grupa: Zarejestrowani
Postów: 516
Pomógł: 63
Dołączył: 27.08.2012

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


Witam.

To mój pierwszy post i zarejestrowałem z tej przykrej przyczyny, ze stoję w miejscu przy robieniu koszyka, a dokładniej - przy usuwaniu dodanych w sesji zakupów.

  1. <input type="submit" name="submit" value="'.$row['id'].'"style="margin-left:10px;"/> <!-- value posiada wartość ID produktu w bazie danych-->


  1. if(isset($_POST['submit']))
  2. {
  3. $z1=$_POST['submit'];
  4. $koszyk = "SELECT * FROM marka2 WHERE id='$z1'";
  5. $result1 = mysql_query($koszyk) or die (mysql_error());
  6. $dane = mysql_fetch_array($result1);
  7. extract($dane); // ^pobiera dane z bazy pod danym id produktu.
  8.  
  9. if(!isset($_SESSION['koszyk'][$_SESSION['idd']]))
  10. {
  11. if(array_search($dane['naglowek']."|".$dane['cena']."|".$_SESSION['idd'].'', $_SESSION['koszyk']) === false) //Blokuje powtarzanie tej samej sesji
  12. {
  13. $_SESSION['koszyk'][$_SESSION['idd']]=$dane['naglowek']."|".$dane['cena']."|''; //dodaje sesje z danymi z bazdy MySQL
  14. $_SESSION['idd']++;
  15. }
  16. }

No i tutaj działa wszystko jak trzeba. Sesje tworzą się po mojej myśli. Schody zaczeły się w głupim i pewnie banalnym miejscu. Mianowicie przy odwołaniu się do usunięcia konkretnej tabeli z sesji.
  1. if(isset($_SESSION['idd']))
  2. {
  3. foreach($_SESSION['koszyk'] as $value)
  4. {
  5. $wynik = explode("|", $value);
  6. echo'<li class="koszyk">nazwa produktu: <b>'.$wynik[0].'</b> - cena: <b>'.$wynik[1].'</b> //wyświetla wszystkie tabele
  7. <input type="submit" name="usun1" value="'.$value.'"> <br></li>'; // input posiada wartość całej tabeli w sesji
  8. }
  9. }

No i teraz gwiazda tego tematu: funkcja UNNSET
  1. if(isset($_POST['usun1']))
  2. {
  3. unset($_SESSION['koszyk'][1]);
  4. }

Efekt tego skryptu jest taki, ze po wykasowaniu wszystkich sesji i dodaniu na nowo paru kolejnych produktów, mogę usunąć tylko jeden z nich. Każdy kolejny po naciśnieciu submita ani drgnie aż do ponownego wyczyszczenia całej sesji. Próbowałem googlowach i tworzyć coś na wzór rzeczy które znalazłem, ale żadna z nich nie działa. Finalnie przedstawiłem tą o to wersje, bo jest chyba najbardziej przejrzysta. Mało ogarniam programowanie w PHP, ale staram się naucz czegoś nowego, a akurat teraz w dodatku dostałem zlecenie zrobienia prostego sklepu. Byłbym bardzo wdzięczny za pomoc. Pozdrawiam

Ten post edytował gitbejbe 27.08.2012, 19:43:20
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
gitbejbe
post
Post #2





Grupa: Zarejestrowani
Postów: 516
Pomógł: 63
Dołączył: 27.08.2012

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


...W końcu się uporałem ! Bardzo dziękuję @nospor za naprowadzenie mnie na właściwy tok myślenia : ) Dla potomnych z podobnym problemem, zamieszczam w temacie prawidłowe rozwiązanie. Z pewnością się przyda dla każdego początkującego z koszykiem opartym na sesjach : )

ps. Z połową królestwa to był tylko żart. Chciałem podkreślić powagę sytuacji w której się znajdowałem. Ale za to apropos siostry, to nie żartowałem. Mam aż 3 sztuki więc jedną mógłbym ewentualnie odstąpić ;D Pozdrawiam serdecznie i dzięki za pomoc : )

  1. <?php
  2. if(isset($_SESSION['idd']))
  3. {
  4. foreach($_SESSION['koszyk'] as $value) // Pierwszy foreach został umieszczony w (niewidniejącym tutaj divie). Odpowiedzialny jest za wyświetlenie pełnej wartości tablicy.
  5. {
  6. $wynik = explode("|", $value); // w tablicy usuwam niepotrzebny znak w postaci " | " w ramach estetycznych.
  7. echo'<li class="koszyk">'.$us.') nazwa produktu: <b>'.$wynik[0].'</b> - cena: <b>'.$wynik[1].'</b><br></li>';
  8. }
  9.  
  10. }
  11. ?>
  12. <?php
  13. foreach($_SESSION['koszyk'] as $key2 => $index2) // Ten foreach służy do przekazania dla wartości value - w przycisku submit, indeksów tablic zawartych w sesji.
  14. {
  15. echo'Usuń:<input type="submit" name="usun1" value="'.$key2.'"><br>';
  16. }
  17. ?>
  18. <?php
  19.  
  20. if(isset($_POST['usun1']))
  21. {
  22. $x = $_POST['usun1']; // zmienna $x zawiera numer indexu tablicy, pobrany z przycisku submit.
  23.  
  24. foreach($_SESSION['koszyk'] as $key => $index) // $pętla do wyszukiwania w sesji indeksów tablic. Indeksem jest stworzona w pętli zmienna $key.
  25. {
  26. if($x==$key) //jeśli pętla napotka numer indexu tablicy o takim samym numerze co numer indeksu przekazanej w $_POST['usun1'], to....
  27. {
  28. unset($_SESSION['koszyk'][$key]); // wskazujemy ten index do usunięcia z sesji : )
  29. }
  30. }
  31. }
  32. ?>


Ten post edytował gitbejbe 29.08.2012, 11:21:01
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: 27.12.2025 - 17:54