2012-02-06 16 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。私は自分のデータベースが非常に安全でないことを知っています。それはちょうどダミーデータでいっぱいで、VM上で毎回実行されるので、私は本当に気にしません。 :P

答えて

1

1)それは、返信用$_SESSION

+0

ありがとうございます。 session_start()を追加すると$ _SESSIONを大文字にしていました。大文字は私が一度も試したことのないものです。 – HMFlol

1

addToCart.phpはsession_start();を呼び出す必要がありますが、それは私が見る限りではありません。

+0

おかげである必要があり、私の知る限りでは、$_sessionが動作しません)addToCart.php

2でセッションを起動してみてください。私はこれまでに試してみたことがあります。私はsession_start()を追加しました。 include(dbConnect.php)の下にあります。ライン。違いはありませんが、残念です。 $ _SESSIONのようにセッションを大文字にする必要があることが分かります。 – HMFlol

0

addToCart.phpファイルにsession_start()の呼び出しがないようです。

セッションを開始していないので、以前のデータは使用できません。本質的には、$ _SESSIONという配列を作成し、それにカート配列を追加します。

この結果、PHPのセッション配列と同じ名前の配列が使用されますが、既存のセッションには基づいていません。

関連する問題