Так много мелочей в этом коде кажутся неправильными или просто не понимают.Некоторые могут быть из-за «образца» кода.
В любом случае, позвольте мне пройтись по нему кусками.
<?php
session_start();
?>
<?php
var_dump ($_POST);
Закрытие и открытие нового блока PHP просто бессмысленно.Это может быть связано с примером кода для вопроса (или нет).В любом случае это должно быть просто:
<?php
session_start();
// debug
var_dump ($_POST);
Ничего действительно плохого в следующем фрагменте.Лично мне это не нравится (т.е. я создаю новую переменную для чего-то, что уже существует, даже со ссылкой), но для каждого из них.
if(! isset($_SESSION['cart'])) {
$_SESSION['cart']=[];
}
$cart = &$_SESSION['cart'];
$movieName = $_POST['movie_name'];
$quantity = $_POST['qty'];
Этот следующий бит я не уверен на 100%,Вы создали $movieName
выше из значения $_POST['movie_name']
.Я считаю, что даже если это значение пустая строка, ваш isset()
вернет true
.В любом случае результат все равно может работать, как и ожидалось.
if(isset($movieName)) {
$currentQuantity = $cart[$movieName];
$cart[$movieName] = $currentQuantity + $quantity;
} else {
$cart[$movieName] = $quantity;
}
Если lodgic - это звук, следующее изменение строки удалит бессмысленное создание переменной.
//$currentQuantity = $cart[$movieName];
$cart[$movieName] += $quantity;
Еще одно закрытие иоткрыть PHP-блок, который можно удалить
var_dump($_SESSION);
?>
<?php
Теперь к реальной проблеме.Вы создаете массив с повторяющимися элементами:
$list = array (
"$movieName,$quantity",
"$movieName,$quantity",
"$movieName,$quantity",
);
Приведенный выше блок кода будет содержать 3 элемента в массиве, все с одинаковыми значениями - все они будут идентичными значениями текущих $movieName
и $quantity
.
Я думаю, что вы действительно хотели сделать что-то вроде:
foreach($_SESSION['cart'] as $k => $v) {
if ($v > 0) {
$list[] = array($k,$v);
}
}
Следующая часть интересна из-за ошибок.Первый вопрос: почему вы жестко кодируете имя переменной?
А затем следующий вопрос: действительно ли вы хотели использовать =
вместо ==
в операторе 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);
Я думаю, что вы хотели здесь было больше похоже на:
// 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);