Массив сессий перезаписывает, а не добавляет к себе - PullRequest
1 голос
/ 07 февраля 2012

Сегодня столкнулся с проблемой, которую мне не удалось решить. Я пытаюсь создать очень простую корзину для проекта. У меня есть поисковая форма на странице searchFilm.php, которая будет получать список из 10 фильмов на основе ваших критериев поиска. Это работает без проблем. У меня также есть кнопка «Добавить» рядом с каждым фильмом в списке, что также хорошо работает.

Когда я нажимаю «Добавить», он перенаправляет на другую страницу, как и предполагалось, с именем addToCart.php. На этой странице будет отображаться информация о добавленном фильме, а именно: название и ставка аренды.

Это также работает без проблем. Обе страницы используют центральную страницу вызова dbConnect.php для подключения и выбора из базы данных.

Проблема, с которой я столкнулся, заключается в попытке создать массив сессий, который будет содержать film_id каждого добавляемого мной фильма, и добавлять их в таблицу. Он продолжает перезаписывать последнее значение, которое содержалось в массиве. Я прокомментировал почти все на странице addToCart, чтобы попытаться упростить мою отладку. В этот момент мне кажется, что я, возможно, начинаю новую сессию каждый раз, когда нажимаю добавить.

Я предоставлю код для каждой страницы. Я пытался понять это в течение 4-5 часов безуспешно. Надеясь, что другая пара глаз может увидеть то, что мне не хватает.

Спасибо.

dbConnect.php:

<?php

function connect($db)
{
    if(!$db)
    {
        die('Could not connect to the Sakila Database: ' . mysqli_error($db));
    }
    return $db;
}

function select($db, $table, $id)
{
    $result = mysqli_query($db, "SELECT * from " . $table . " where film_id = '" . $id . "'");
    if(!$result)
    {
        die('Could not retrieve records from the Sakila Database: ' . mysqli_error($db));
    }
    return $result;
}

function searchResult($db, $table, $term)
{
    $result = mysqli_query($db, "SELECT * from " . $table . " where description LIKE ('%" . $term . "%') LIMIT 0,10");
    if(!$result)
    {
        die('Could not retrieve records from the Sakila Database: ' . mysqli_error($db));
    }
    return $result;
}
?>

searchFilm.php:

<html>
<head>
    <title>TITLE!</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<?php

include'dbConnect.php';
session_start();

if(isset($_POST['search']))
{
    $term = $_POST['search'];

    //connect to the database
    $db = connect(mysqli_connect("localhost","root","","sakila"));

    //retrieve results from the database
    $result = searchResult(mysqli_connect("localhost","root","","sakila"),'film', $term);

    //echo the title and description of each row
    echo "<table border=1 bordercolor=red>";
    echo "<tr>";
    echo "<th>Title</th>";
    echo "<th>Description</th>";
    echo "<th>Add To Cart</th>";
    echo "</tr>";
    while($row = mysqli_fetch_assoc($result))
    {
        echo "<tr>";
        echo "<td>" . $row['title'] . "</td> <td>" . $row['description'] . "</td>";
    ?>
        <td>
        <form name="addToCart" action="addToCart.php" method="POST">
            <input type="hidden" name="filmID" value="<?php echo $row['film_id']; ?>" />
            <input type="submit" name="addToCart" value="Add" />
        </form>
        </td>
    <?php
        echo "</tr>";
    }
    echo "</table>";

    mysqli_close($db);
}
?>
    <form method="post" action="searchFilm.php" name="">
        <p>Search:
            <input name="search" type="text" value="" />
        </p>
        <p>
            <input name="" type="submit">
        </p>
    </form>
</body>
</html>

addToCart.php:

<?php
include('dbConnect.php');

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

    $id = $_POST['filmID']; //the item selected


    $_session['cart'][] = $id;


    foreach ($_session['cart'] as $item) 
    { //display contents of array
        echo "$item<br />";
    }

    /*$filmid = $_POST['filmID'];

    $_SESSION['cart'][$filmid];

    $db = connect(mysqli_connect("localhost","root","","sakila"));

    $select = select(mysqli_connect("localhost","root","","sakila"),'film', $filmid);

    echo "<table border=1 bordercolor=red>";
    echo "<tr>";
    echo "<th>Film</th>";
    echo "<th>Rental Rate</th>";
    echo "</tr>";
    while($row = mysqli_fetch_assoc($select))
    {
        echo "<tr>";
        echo "<td>" . $row['title'] . "</td> <td>" . $row['rental_rate'] . "</td>";
        echo "</tr>";
    }
    echo "</table>";*/
}
?>
<html>
<head>
    <title>TITLE!</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
    <a href="searchFilm.php">click to go back</a>
</body>
</html>

Извините за длину. Просто хотел убедиться, что вся информация была там.

Любое понимание будет оценено.

Спасибо!

PS. Я знаю, что моя база данных очень небезопасна. Он просто полон фиктивных данных и время от времени запускается на ВМ, поэтому мне все равно. : P

Ответы [ 3 ]

1 голос
/ 07 февраля 2012

1) Попробуйте запустить сеанс в addToCart.php

2) Насколько я знаю, $_session не будет работать, должно быть $_SESSION

1 голос
/ 07 февраля 2012

addToCart.php должен вызвать session_start();, и это не так, как я вижу.

0 голосов
/ 07 февраля 2012

Я считаю, что проблема в том, что в файле addToCart.php, похоже, нет вызова session_start().

Поскольку вы не начинаете сеанс, ни одна из предыдущих данных недоступна. По сути, вы создаете массив с именем $ _SESSION и добавляете в него свой массив корзины.

Это приводит к использованию массива с тем же именем, что и у массива сеансов PHP, но он не основан на существующем сеансе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...