会话数组保持覆盖而不是添加到自身

时间:2012-02-06 21:35:53

标签: php session

今天遇到一个我无法解决的问题。我正在尝试为项目设置一个非常基本的购物车。我在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。我知道我的数据库非常不安全。它只是充满了虚拟数据并且偶尔在VM上运行,所以我并不在乎。 :P

3 个答案:

答案 0 :(得分:1)

addToCart.php应该调用session_start();并且它没有我所见。

答案 1 :(得分:1)

1)尝试在addToCart.php

中开始会话

2)据我所知,$_session无效,应为$_SESSION

答案 2 :(得分:0)

我认为问题是session_start()文件中似乎没有addToCart.php的来电。

由于您没有开始会话,因此以前的数据都不可用。基本上,您正在创建一个名为$ _SESSION的数组,并将您的购物车数组添加到其中。

这导致使用与PHP的会话数组同名的数组,但它不是基于现有会话。