解決できなかった問題に直面します。私はプロジェクトのための非常に基本的なショッピングカートを設定しようとしています。 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
ありがとうございます。 session_start()を追加すると$ _SESSIONを大文字にしていました。大文字は私が一度も試したことのないものです。 – HMFlol