Php 与'有关的问题;fputcsv';重复相同的变量

Php 与'有关的问题;fputcsv';重复相同的变量,php,html,arrays,fputcsv,Php,Html,Arrays,Fputcsv,我一直试图将数组变量中的数据发送到.txt文件中。这些变量按预期工作,因为iv已经成功地编码了3种产品,用户可以从中选择,然后使用表单提交数量,并且它们都单独显示为电影名称和数量。但是,当我似乎无法找到一种方法来分别发送每部电影的电影名称和数量时,我只是重复每行的最后一部电影和数量,然后当我提交下一部电影和数量时,它会超过最后一部 我的购物车代码页面(没有显示所有代码,因为大多数代码都是css,if/else语句只是我拼命想至少把第二部电影的名字拿出来) 提交数据的表格之一: <for

我一直试图将数组变量中的数据发送到.txt文件中。这些变量按预期工作,因为iv已经成功地编码了3种产品,用户可以从中选择,然后使用表单提交数量,并且它们都单独显示为电影名称和数量。但是,当我似乎无法找到一种方法来分别发送每部电影的电影名称和数量时,我只是重复每行的最后一部电影和数量,然后当我提交下一部电影和数量时,它会超过最后一部

我的购物车代码页面(没有显示所有代码,因为大多数代码都是css,if/else语句只是我拼命想至少把第二部电影的名字拿出来)


提交数据的表格之一:

<form action="cart.php" method="post">
<input type="hidden" name="movie_name" value= "Game of Thrones: Season 1" />
   <input type = "hidden" name = "id" value = "M01" />
   <br>

<div class="widthc">
   <button class="prod" id="minus">−</button>
<input type="number" name="qty" value="0" id="qty" min="0" max="15"/>
<button class="prod" id="plus">+</button>
<br><br>
<button class="prod" type="submit">  Submit</button>
</form>


− +

提交

如果有任何其他代码你想/需要看到,请告诉我,我会编辑我的文章,包括它。感谢您花时间阅读。

这段代码中的许多小东西似乎是错误的,或者只是缺乏理解。有些可能是由于“示例”代码

不管是哪种方式,让我把它分块看一遍

<?php
session_start();
?>
<?php
var_dump ($_POST);
下一点我不是100%有信心。您已经使用
$\u POST['movie\u name']
的值在上面创建了
$movieName
。我相信即使该值是空字符串,您的
isset()
也将返回
true
。无论哪种方式,结果都可能像预期的那样起作用

if(isset($movieName)) {
    $currentQuantity = $cart[$movieName]; 
    $cart[$movieName] = $currentQuantity + $quantity;
} else {
    $cart[$movieName] = $quantity;
}
如果lodgic是可靠的,下面的行更改将删除无意义的var创建

//$currentQuantity = $cart[$movieName]; 
$cart[$movieName] += $quantity;
另一个可以删除的关闭和打开PHP块

var_dump($_SESSION);
?> 
<?php
上面的代码块将在数组中生成3个元素,所有元素都具有相同的值-它们都是当前
$movieName
$quantity
的相同值

我想你真正想做的是:

foreach($_SESSION['cart'] as $k => $v) {
    if ($v > 0) {
         $list[] = array($k,$v);
    }
}
// To overwrite, use 'w'
$fp = fopen('orders.csv', 'w');
// Or (as noted by Rob) to append to the file, use 'a'
//$fp = fopen('orders.csv', 'a');
// For other options see: http://php.net/manual/en/function.fopen.php

foreach ($list as $fields) {
    fputcsv($fp, $fields);
}

fclose($fp);
由于错误,下一部分很有趣。第一个问题是为什么要硬编码变量名

然后下一个问题是,你真的想在
if
语句中使用
=
而不是
=

$file = fopen("orders.txt","w");

foreach ($list as $line) {
    if ($movieName = 'Game of Thrones: Season 1') {
        // do nothing? Really?
    } else if ($movieName = 'Friends Season 1') {
        // do nothing? Really?
    } else  if ($movieName = 'Inception') {
        // do nothing? Really?
    }
}

fputcsv($file,explode(',',$line));
fclose($file);
我想你想要的更像是:

foreach($_SESSION['cart'] as $k => $v) {
    if ($v > 0) {
         $list[] = array($k,$v);
    }
}
// To overwrite, use 'w'
$fp = fopen('orders.csv', 'w');
// Or (as noted by Rob) to append to the file, use 'a'
//$fp = fopen('orders.csv', 'a');
// For other options see: http://php.net/manual/en/function.fopen.php

foreach ($list as $fields) {
    fputcsv($fp, $fields);
}

fclose($fp);

这段代码中的许多小东西似乎是错误的,或者只是缺乏理解。有些可能是由于“示例”代码

不管是哪种方式,让我把它分块看一遍

<?php
session_start();
?>
<?php
var_dump ($_POST);
下一点我不是100%有信心。您已经使用
$\u POST['movie\u name']
的值在上面创建了
$movieName
。我相信即使该值是空字符串,您的
isset()
也将返回
true
。无论哪种方式,结果都可能像预期的那样起作用

if(isset($movieName)) {
    $currentQuantity = $cart[$movieName]; 
    $cart[$movieName] = $currentQuantity + $quantity;
} else {
    $cart[$movieName] = $quantity;
}
如果lodgic是可靠的,下面的行更改将删除无意义的var创建

//$currentQuantity = $cart[$movieName]; 
$cart[$movieName] += $quantity;
另一个可以删除的关闭和打开PHP块

var_dump($_SESSION);
?> 
<?php
上面的代码块将在数组中生成3个元素,所有元素都具有相同的值-它们都是当前
$movieName
$quantity
的相同值

我想你真正想做的是:

foreach($_SESSION['cart'] as $k => $v) {
    if ($v > 0) {
         $list[] = array($k,$v);
    }
}
// To overwrite, use 'w'
$fp = fopen('orders.csv', 'w');
// Or (as noted by Rob) to append to the file, use 'a'
//$fp = fopen('orders.csv', 'a');
// For other options see: http://php.net/manual/en/function.fopen.php

foreach ($list as $fields) {
    fputcsv($fp, $fields);
}

fclose($fp);
由于错误,下一部分很有趣。第一个问题是为什么要硬编码变量名

然后下一个问题是,你真的想在
if
语句中使用
=
而不是
=

$file = fopen("orders.txt","w");

foreach ($list as $line) {
    if ($movieName = 'Game of Thrones: Season 1') {
        // do nothing? Really?
    } else if ($movieName = 'Friends Season 1') {
        // do nothing? Really?
    } else  if ($movieName = 'Inception') {
        // do nothing? Really?
    }
}

fputcsv($file,explode(',',$line));
fclose($file);
我想你想要的更像是:

foreach($_SESSION['cart'] as $k => $v) {
    if ($v > 0) {
         $list[] = array($k,$v);
    }
}
// To overwrite, use 'w'
$fp = fopen('orders.csv', 'w');
// Or (as noted by Rob) to append to the file, use 'a'
//$fp = fopen('orders.csv', 'a');
// For other options see: http://php.net/manual/en/function.fopen.php

foreach ($list as $fields) {
    fputcsv($fp, $fields);
}

fclose($fp);

这就是我写的答案。我要补充的唯一一点是,您可能需要检查文件的打开模式-“w”将截断文件。如果你在一个已有的文件中添加了附件,请使用“a”。我刚刚读完你的文章,首先感谢你花时间回复这么详细的内容。我还没有试过代码,但我想我至少可以回答你关于错误的一些问题。正如你所说,大多数错误都是由于使用了示例代码,并在我的网站上使用了它们,有些错误是因为我还在i.T的第一年,这些概念对我来说都是新的,我一直很难理解其中的一些东西。再次感谢您的详细回复,我需要进一步研究这些主题。这几乎就是我正在写的答案。我要补充的唯一一点是,您可能需要检查文件的打开模式-“w”将截断文件。如果你在一个已有的文件中添加了附件,请使用“a”。我刚刚读完你的文章,首先感谢你花时间回复这么详细的内容。我还没有试过代码,但我想我至少可以回答你关于错误的一些问题。正如你所说,大多数错误都是由于使用了示例代码,并在我的网站上使用了它们,有些错误是因为我还在i.T的第一年,这些概念对我来说都是新的,我一直很难理解其中的一些东西。再次感谢您的详细回复,我需要进一步了解这些主题。您能解释一下业务流程是什么吗?看起来您正在将项目添加到购物车,但同时也将购物车保存到文本文件中。在这里而不是在结账过程中这样做的目的是什么?是否打算在每次向购物车添加内容时将购物车转储到文件中,并且该文件应始终表示购物车的状态?文件是在站点的所有用户之间共享的,还是特定于会话的实际文件路径?我很难想象这在现实世界中是如何工作的。最上面的代码目前在cart.php页面中,但在考虑之后,我决定将其移动到checkout.php(它们具有相同的数组代码,因此只需移动fputscv代码,应该不会有太大变化)。其目的是让它将每个订单写入txt文件,如果它将每个用户或订单写入该文件,那将很好,但只要它一次写入1个用户