【问题标题】:save data inside an array from a loop从循环中将数据保存在数组中
【发布时间】:2015-01-30 07:35:58
【问题描述】:

我需要从循环中将数据保存在数组中,以便插入数据库。

这是代码:

$dataset = array();
 for ($i = 1; $i <= $_POST['num_cart_items']; $i++) {
 $dataset[item_name] = $_POST['item_name' + $i];
$dataset[item_number] =$_POST['item_number' + $i];
 $dataset[mc_gross] =$_POST['mc_gross_' + $i];
}  

不知道这样用对不对:

$sql = mysqli_query($conexion_temporal,"INSERT INTO transacciones (item_name, item_number, payment_status ,mc_gross) VALUES ('$dataset[item_name]', '$dataset[item_number]','$payment_status','$dataset[mc_gross]')");

所以如果我买了 2 件商品,我可以这样展示:

物品:球拍、勺子

项目编号:d67,t87

价格:4500,3789

所以我只买了一件时使用。

【问题讨论】:

  • 我认为在循环时你会覆盖之前插入数组的值。您需要为 $dataset 使用多维数组。
  • 数据集是空的,我只会用于这 3 个元素
  • 是的,但是如果您有多个项目,则只有最后一个项目将被保存,因为其他项目将被覆盖。
  • 我每个购物车只接受 7 件商品
  • 你应该得到错误。使用 '" $dataset['item_name']. 这样的键并为每次迭代创建新索引然后分配值。

标签: php for-loop


【解决方案1】:

array_keys

$keys = array_keys($dataset);

$str = ''.
foreach($dataset as $k => $v){
$str .= '\''.$v.'\'';
}
$presql = '"INSERT INTO transacciones ('.implode(',',$keys).')VALUES('.$str.')';

$sql = mysqli_query($presql);

【讨论】:

  • 将虚拟payment_status键和值添加到数据集,稍后在数据库中更新...我想状态可能会随着时间而改变。
【解决方案2】:

使用多维数组保存您的项目,以免在循环时覆盖值。

 $dataset = array();
     for ($i = 1; $i <= $_POST['num_cart_items']; $i++) {
     $dataset[$i]['item_name'] = $_POST['item_name' + $i];
    $dataset[$i]['item_number'] =$_POST['item_number' + $i];
     $dataset[$i]['mc_gross'] =$_POST['mc_gross_' + $i];
    } 

当插入 SQL 时,在语句周围使用 foreach 循环。

类似的东西:

foreach($dataset as $item){
    $sql = mysqli_query($conexion_temporal,"INSERT INTO transacciones (item_name, item_number, payment_status ,mc_gross) VALUES (".$item['item_name'].", ".$item['item_number'].",".$payment_status.",".$item['mc_gross'].")");
}

【讨论】:

    【解决方案3】:
    $dataset = '';
     for ($i = 1; $i <= $_POST['num_cart_items']; $i++) {
       $dataset .= "('" . $_POST['item_name'] . "',";
       $dataset .= "'" . $_POST['item_number'] . "',";
       $dataset .= "'" . $payment_status . "',"; // not sure where this one is coming from
       $dataset .= "'" . $_POST['mc_gross_'] . "')";
       if ($i != $_POST['num_cart_items']) $dataset .= ',';
    }
    
    $sql = mysqli_query($conexion_temporal,"INSERT INTO transacciones (item_name, item_number, payment_status ,mc_gross) VALUES $dataset");
    

    如果数字未存储为文本,则应删除该值周围的引号。

    【讨论】:

    • 你必须更具体一点,否则人们无法帮助你。在for 循环的} 之后使用echo $dataset;。它显示什么?
    【解决方案4】:

    foreach 中的用户多维,如:

    $dataset = array();
     for ($i = 1; $i <= $_POST['num_cart_items']; $i++) {
     $dataset['item_name'][] = $_POST['item_name_'.$i];
    $dataset['item_number'][] =$_POST['item_number_'.$i];
     $dataset['mc_gross'][] =$_POST['mc_gross_'.$i];
    } 
    

    用“,”对每个元素进行内爆:

    $item_name = implode(",",$dataset['item_name']);
    $item_number = implode(",",$dataset['item_number']);
    $mc_gross = implode(",",$dataset['mc_gross']);
    

    在插入查询中使用该内爆字符串,例如:

    $sql = mysqli_query($conexion_temporal,"INSERT INTO transacciones (item_name, item_number, payment_status ,mc_gross) VALUES ('$item_name', '$item_number','$payment_status','$mc_gross')");
    

    注意:请记住Shaiful Islam 在评论中描述的概念

    【讨论】:

    • $_POST['item_name' + $i] 的回显值,你得到了什么?
    • 什么是字段名?就像 item_name1,item_name2.. ??
    • item_name ,item_numer 和 mc_gross
    • 而不是 $_POST['item_name' + $i] 如果您的表单输入名称类似于 item_name1,item_name2..,则您必须像 $_POST['item_name'.$i] 这样写>
    • 它的aypal,它发送item_name_1、item_name_2等项目
    猜你喜欢
    • 2014-04-30
    • 2021-09-22
    • 2015-04-21
    • 1970-01-01
    • 2019-01-15
    • 2017-08-06
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    相关资源
    最近更新 更多