2012-02-06 49 views
1

进入今天我无法解决的问题。我正在尝试为一个项目设置一个非常基本的购物车。我在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

回答

1

1)尝试在addToCart.php

2启动会话)据我所知,$_session将无法​​正常工作,它应该是$_SESSION

+0

非常感谢。添加session_start()以及大写$ _SESSION是它。大写字母是我从未尝试过的一件事。 – HMFlol 2012-02-06 23:05:08

1

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

+0

感谢您的答复。我以前曾尝试过,并按照您的建议重试过。我添加了session_start();在include(dbConnect.php)下;线。不幸的是,仍然没有区别。原来,我还需要像在$ _SESSION中一样使会话大写。 – HMFlol 2012-02-06 23:03:01

0

我认为问题在于addToCart.php文件中似乎没有调用session_start()

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

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