我是PHP的新手,对不起我的英语。我在这个论坛上已经阅读了关于这个主题的所有问题,但我仍然无法找到我的PHP的解决方案。我这里有2个会话,第一个是保存数据的人,第二个是保存购物车。这是我的会话结构
<?php
$id_pers person = $_SESSION['person'] ; //its contain just id
//for second $_SESSION['cart'] structure when i print_r is like this
Array (
[0] => Array (
[item_id] => 4
[item_name] => Notebook
[item_qty] => 1
[price] => 750
)
[1] => Array (
[item_id] => 5
[item_name] => Keyboard
[item_qty] => 1
[price] => 70
)
[2] => Array (
[item_id] => 6
[item_name] => Mouse
[item_qty] => 1
[price] => 50
)
)
?>
问题是当我将数组保存到数据库中时,只保存一个数组,另一个数组不能保存到数据库中。这里我的插入功能是我从观看视频教程中写的:
<?php
function save($array, $connect){
if(is_array($array)){
$id_person = $_SESSION['person'];
foreach($array as $row => $value) {
$item_id = mysqli_real_escape_string($connect, $value['item_id'];
$item_qty = mysqli_real_escape_string($connect, $value['item_qty'];
$sql = "INSERT INTO tbl_order(id_person,item_id,qty) VALUES ('".$id_person."','".$item_id."','".$item_qty."')";
mysqli_query ($connect, $sql);
}
}
}
save($_SESSION['cart'], $ connect);
?>
请告诉我我的脚本在将数据数组插入表中的错误在哪里。谢谢 :)
语法错误
$item_id = mysqli_real_escape_string($connect, $value['item_id'];
$item_qty = mysqli_real_escape_string($connect, $value['item_qty];
缺少'
和)
2x
$item_id = mysqli_real_escape_string($connect, $value['item_id']);
$item_qty = mysqli_real_escape_string($connect, $value['item_qty']);
并改变这一点(这是好的,不是最好的方法):
function save($array, $connect){
if(is_array($array)){
至
function save(array $array, $connect){
现在,如果您传入其他内容,那么数组PHP会发出错误。它被称为类型提示,它允许我们摆脱该检查,因为我们保证只有数组可以作为该参数传递。通过手动检查,您的代码将无声地失败,您不会知道原因。
我可能会在那里扔一个if(!session_id()) session_start();
以保证安全。如果没有会话ID,则创建会话。除非已启动,否则无法将数据存储到会话中。
像这样:
<?php
function save(array $array, $connect){
if(!session_id()) session_start();
//don't trust this who knows where it came from, QQ'n not me.
$id_person = mysqli_real_escape_string($connect, $_SESSION['person']);
foreach($array as $row => $value) {
$item_id = mysqli_real_escape_string($connect, $value['item_id']);
$item_qty = mysqli_real_escape_string($connect, $value['item_qty']);
$sql = "INSERT INTO tbl_order(id_person,item_id,qty) VALUES ('".$id_person."','".$item_id."','".$item_qty."')";
mysqli_query ($connect, $sql);
}
}
save($_SESSION['cart'], $ connect);
?>
-NOTE-它也是首选准备查询而不是转义它们。
干杯。
假设这些数字是整数而不是字符串,那么代码看起来应该更像:
<?php
session_start(); // before headers are sent
function saveCart($connect){
if(!(isset($_SESSION['person'], $_SESSION['cart']) && is_int($_SESSION['person']) && is_array($_SESSION['cart']))){ // remember $_SESSION is a super global
return false;
}
$id = $_SESSION['person']; $cartArray = $_SESSION['cart'];
foreach($cartArray as $a){
$stmt = $connect->prepare('INSERT INTO tbl_order (id_person, item_id, qty) VALUES (?, ?, ?)');
$stmt->bind_param('iii', $id, $a['item_id'], $a['item_qty']); $stmt->execute();
}
return true;
}
if(saveCart($connect) === true){
echo 'Cart Saved';
}
else{
echo 'Cart was not Saved';
}
?>
准备好的陈述是要走的路。