我是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);
?>
请告诉我我在脚本中向表插入数据数组的错误。谢谢:)
答案 0 :(得分:0)
语法错误
$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);
?>
-注意-也最好准备查询而不是转义查询。
干杯。
答案 1 :(得分:0)
假设这些数字是整数而不是字符串,则您的代码应更像:
<?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';
}
?>
准备好的语句是解决方法。