Koszyk w sesji

0

Dlaczego komputer pisze brak sesji i nie działa koszyk ?

Pierwszy:

<?php

session_start();

?>

<!DOCTYPE HTML>
<html>
<head>
<title> koszyk zakupów </title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>

<p><b> lista artykułów </b></p>

<?php

if (isset($_POST['lista'])) {

if (!empty($_session['koszyk'])) {
$koszyk=array_unique(array_merge(
        unserialize($_SESSION['koszyk']),
        $_POST['lista']));

$_session['koszyk'] = serialize($koszyk);
}



else {
$_session['koszyk'] = serialize($_POST['lista']);

}

echo "<p>wybrane produkty zostały umieszczone w koszyku </p>";

}

?>

<form action="http://serwer2232156.home.pl/lista.php" method="post">
<p><b><font size="4"><b> wybór produktu: </font></b><br>
<select name="lista[]" multiple="multiple" size = "9">
<option value="monitor"> monitor </monitor>
<option value="drukarka"> drukarka </option>
<option value="klawiatura"> klawiatura </option>
<option value="myszka"> myszka </option>
<option value="głośniki"> głośniki </option>
<option value="kamera_internetowa"> kamera_intermetowa </option>
<option value="słuchawki"> słuchawki </option>
<option value="stacja dvd"> stacja dvd </option>
<option value="dysk twardy"> dysk twardy </option>
</select></p>
<p><input type="submit" value="wyślij"></p>
</form>
<p><a href="koszyk.php"> przejdz do koszyka </a></p>
</body>
</html>

Drugi skrypt:

<?php
session_start();

?>


<!DOCTYPE HTML>
<html>
<head>
<title> koszyk </title>
<meta http-equiv="Content-Type" content="text/html;
                charset=UTF-8">

</head>
<body>

<p><b> zawartość koszyka </b></p>
<?php

if (isset($_SESSION['koszyk'])) {

foreach(unserialize($_SESSION['koszyk']) as $produkt) {

echo "<li>"  .  $produkt . "</li>";
}

}

else {

echo "brak sesji";


}

?>

<p><a href="lista.php">przejdz do listy produktów </a></p>
</body>
</html>
0

Wygląda na to, że sesja nie działa pomiędzy stronami. Napisałem drugi skrypt do badania sesji. Mam wynajęty serwer home.pl. Co zrobić w tym przypadku ?

<?php
session_start();

$_SESSION['zmienna_sesji'] = "witaj świecie działam";
echo'zawartość zmiennej $_SESSION[\'zmienna sesji\'] wynosi '
.$_SESSION['zmienna_sesji'].'<br/>';

drugi plik

<?php
session_start();

echo'zawartość zmiennej $_SESSION[\'zmienna sesji\'] wynosi '
.$_SESSION['zmienna_sesji'].'<br/>';

unset($_SESSION['zmienna_sesji']);

?>

<a href="strona3.php">następna strona </a>

I to niestety .$_SESSION['zmienna_sesji'].'<br/>'; nie jest pokazywane czyli nie pokazuje witaj świecie działam, co miała przechowywać tablica sesji. Sesje nie działają co zrobić ?

5

W pierwszym skrypcie działasz na $_session a powinieneś na $_SESSION.
Cytując php.net:

The variable name is case-sensitive.

4

Dobra, masa tutaj jest błędów - więc po prostu pokażę Ci jak powinien wyglądać development takiej aplikacji.

  • Krok zero, dodaj kontrolę wersji do aplikacji (jedynym sensownym wyjściem jest git). Ja założyłem poglądowe repo dla takiej aplikacji, tam w liście commitów będzie wyglądało jak ta aplikacja powinna się zmienić/powstać. Link tutaj: https://github.com/Danon/adamon-koszyk
  • Krok jeden: formatowanie kodu - odpowiednie wcięcie wartości (commit b1d7a6)
  • Krok dwa: masz niepoprawny tag </monitor> - poprawka (commit 959e34)
  • Krok trzy: przeniesienie części logiki sesji poza widok - tzn. aplikacja powinna zadziałać, i ustawić wszystkie zmienne, a widok powinien tylko pokazać te zmienne. (commit 1196c9)
  • Krok cztery: masz wpisaną na twardo URL do swojej aplikacji, a wystarczyłoby tylko action="lista.php" (commit 3ec668)
  • Krok pięć: poprawka $_session na $_SESSION (to co napisał @Destructor) - od tego momentu aplikacja zaczyna działac (commit 180076)
  • Krok sześć: usunięcie niepotrzebnych serialize()/unserialize(), nie wiem czemu to zrobiłeś, ale to jest bez sensu (commit bf2c81)
  • Krok siedem: używasz bardzo starych <font> oraz size="", zmieniłem to na style CSS

Oczywiście należałoby napisać odpowiednie testy pod to; ale coś mi się wydaje że to jest out-of-scope.

Ostateczny kod:

koszyk.php:

<?php
session_start();

if (isset($_SESSION['koszyk'])) {
    $products = $_SESSION['koszyk'];
    $message = '';
} else {
    $products = [];
    $message = 'Brak sesji';
}

?>
<!DOCTYPE HTML>
<html lang="pl">
<head>
  <title>Koszyk</title>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<p><b>Zawartość koszyka</b></p>
<ul>
    <?php foreach ($products as $product): ?>
      <li>
          <?php echo htmlEntities($product); ?>
      </li>
    <?php endforeach; ?>
</ul>
<?php echo htmlEntities($message); ?>
<p>
  <a href="lista.php">Przejdź do listy produktów</a>
</p>
</body>
</html>

lista.php:

<?php
session_start();

if (isset($_POST['lista'])) {
    if (empty($_SESSION['koszyk'])) {
        $_SESSION['koszyk'] = $_POST['lista'];
    } else {
        $_SESSION['koszyk'] = array_unique(array_merge($_SESSION['koszyk'], $_POST['lista']));
    }
    $message = "Wybrane produkty zostały umieszczone w koszyku";
} else {
    $message = '';
}
?>
<!DOCTYPE HTML>
<html lang="pl">
<head>
  <title>Koszyk zakupów</title>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <style>
      .selection {
          font-size: 0.9em;
      }

      select {
          height: 200px;
      }
  </style>
</head>
<body>
<p>
  <b>Lista artykułów</b>
</p>
<p>
    <?php echo htmlEntities($message) ?>
</p>

<form method="POST" action="lista.php">
  <p class="selection">
    Wybór produktu:
  </p>
  <p>
    <select name="lista[]" multiple="multiple">
      <option value="monitor">monitor</option>
      <option value="drukarka">drukarka</option>
      <option value="klawiatura">klawiatura</option>
      <option value="myszka">myszka</option>
      <option value="głośniki">głośniki</option>
      <option value="kamera_internetowa">kamera intermetowa</option>
      <option value="słuchawki">słuchawki</option>
      <option value="stacja dvd">stacja dvd</option>
      <option value="dysk twardy">dysk twardy</option>
    </select>
  </p>
  <p>
    <button type="submit">Dodaj</button>
  </p>
</form>
<p><a href="koszyk.php">Przejdź do koszyka</a></p>
</body>
</html>

3

Here we go again xD

Panowie, ten Pan walczy z koszykiem od x lat. Po drodze tykał się wielu innych technologii i nic z tego nie wychodziło. Osobiście nie wiem już czy to troll tak dobry, że tego nie widzimy, czy ktoś jest tak oporny na wiedzę z internetu i wskazówki...

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