我被这个错误困了 2 天,请帮我解决这个问题。
详细查询:
我可以使用 PHP Session 将商品添加到购物车中,但为什么登录后在 HTML 表中显示另一个会话变量。
insert_cart.php
<?php
session_start();
$prod_name= $_POST['prod_name'];
$price= $_POST['price'];
$qty= $_POST['qty'];
$id= $_POST['id'];
$prod_img= $_POST['prod_img'];
$product = array($prod_name,$price,$qty,$id,$prod_img);
$_SESSION[$prod_name] = $product;
//print_r($product);
header('location:view_cart.php');
?>
view_cart.php
<div class="container pt-1 pb-1">
<div class="row">
<div class='table-responsive'>
<table class='table table-condensed table-striped table-hover'>
<thead>
<tr>
<th>Product</th>
<th>Price:</th>
<th>Quantity</th>
<th>Total Prices</th>
<th>Update</th>
<th>Delete</th>
</tr>
</thead>
<?php
$bill= 0;
$sno = 1;
//print_r($_SESSION);
foreach($_SESSION as $products){
//print_r($products);
echo "<tr>";
echo "<form action='edit_cart.php' method='post'>";
if (!$products) $products = array();
foreach($products as $key =>$value){
if($key == 0){
echo "<input type='hidden' name='name$key' class='form-control' value='".$value."'>";
echo "<td>".$value."</td>";
} else if($key == 1){
$p = $value;
echo "<input type='hidden' name='name$key' class='form-control' value='".$value."'>";
echo "<td>".$value."</td>";
}else if($key == 2){
$q = $value;
echo "<td><input type='number' name='name$key' class='form-control col-xl-4 text-center' min='1' value='".$value."'></td>";
$bill = ($p * $q);
echo "<td>".($bill)."</td>";
echo "<td><input type='submit' name='event' value='Update' class='btn btn-sm btn-warning'></td>";
echo "<td><input type='submit' name='event' value='Delete' class='btn btn-sm btn-danger'></td>";
}
}
echo "</form>";
echo "</tr>";
}
echo "</table>";
echo "</div>";
?>
View_Cart.php 中的输出:
但是如果我确实登录,我会收到此错误。
第 57 行是: foreach($products as $key =>$value){
var_dump($products);输出,
为什么 login_exec.php $_SESSION['SESS_FIRST_NAME'] -> Santhosh Gururaj 显示在这里。
<?php
session_start();
require_once('connection.php');
$errmsg_arr = array();
$errflag = false;
$username =$_POST['user_name'];
$password =$_POST['password'];
if($username == '') {
$errmsg_arr[] = 'Username missing';
$errflag = true;
}
if($password == '') {
$errmsg_arr[] = 'Password missing';
$errflag = true;
}
//If there are input validations, redirect back to the login form
if($errflag) {
$_SESSION['ERRMSG_ARR'] = $errmsg_arr;
session_write_close();
header("location:login.php");
exit();
}
$sth = $conn->prepare("SELECT * FROM users WHERE email='$username' and password='$password' and status='active'");
$sth->execute();
if ($sth->rowCount() >= 1 ) {
$user = $sth->fetch(PDO::FETCH_ASSOC);
session_regenerate_id();
$_SESSION['SESS_MEMBER_ID'] = $user['id'];
$_SESSION['SESS_FIRST_NAME'] = $user['name'];
$_SESSION['SESS_LAST_NAME'] = $user['password'];
$_SESSION['msg']="You Are Loggedin Succesfully!";
session_write_close();
header("location: view_cart.php");
exit();
}else {
//Login failed
$errmsg_arr[] = 'User name and Password not found';
$errflag = true;
if($errflag) {
$_SESSION['ERRMSG_ARR'] = $errmsg_arr;
session_write_close();
$_SESSION['msg']="You Are Loggedin Succesfully!";
header("location:login.php");
exit();
}
}
{
die("Query failed");
}
?>
答案 0 :(得分:0)
在登录期间,您正在设置 $_SESSION['SESS_MEMBER_ID']
和其他使用数据。您看到的错误是因为您也试图循环遍历这些值,它们不是数组,因此无法循环遍历。
解决方案是在 'products'
中为会话添加单独的 insert_cart.php
键,例如:
<?php
$prod_name = filter_input(INPUT_POST, 'prod_name', FILTER_SANITIZE_STRING);
$something = filter_input(...);
$product = array($prod_name, $something, ...);
$_SESSION['products'][$prod_name] = $product;
然后在 view_cart.php
中您可以循环遍历产品:
$products = $_SESSION['products'] ? (array)$_SESSION['products'] : [];
foreach($products as $product) {
// ...
}
除此之外,请记住:您永远不能相信用户输入!
您当前的设置允许我覆盖整个会话,如果我发布 $_POST['prod_name'] = 'SESS_MEMBER_ID';
,我可能会切换到另一个用户,或者至少破坏会话。
请查看 filter_input 函数以了解更多信息。 同样适用于您使用 mysqli_prepare 的方式,使用绑定参数而不是将变量嵌入到查询中。