Я пытаюсь создать функцию foreach, в которой число в таблице в phpmyadmin будет увеличиваться каждый раз, когда значение внутри массива соответствует «pet_id». А также это выполняется только при нажатии кнопки отправки. Это мой код в файле php:
<?php
if (isset($_POST['Submit'])) {
if (isset($cart)) {
// if product appeared
foreach ($product->getData('cart') as $item):
$cart = $product->getProduct($item['pet_id']);
$subTotal[] = array_map(function ($item){
$sql = "UPDATE pet_info SET number_sold = number_sold + 1 WHERE
$item == pet_info.pet_id;";
$query1 = mysqli_query($con,$sql);
while ($pet_id = mysqli_fetch_array($query1)) {
execute($pet_id['pet_id']);
}
});
endforeach;
}
}
?>
Но я потратил последние 2 часа на поиск решения, но то, что я получаю, все еще ошибки:
Fatal error: Uncaught Error: Undefined constant "" in C:\xampp\htdocs\testing\petsonthenet\partial\_checkout.php:121 Stack trace: #0 C:\xampp\htdocs\testing\petsonthenet\user_cart.php(7): include() #1 {main} thrown in C:\xampp\htdocs\testing\petsonthenet\partial\_checkout.php on line 121
Может кто-то мне помочь, пожалуйста? Буду очень признателен!!
Это часть кода, связанная с корзиной.
<?php
foreach ($product->getData('cart') as $item) :
$cart = $product->getProduct($item['pet_id']);
echo gettype($item);
$subTotal[] = array_map(function ($item){
?>
<!-- cart item -->
<div class = "row border-top py-3 mt-3">
<div class = "col-sm-2">
<img src = "<?php echo $item['image'] ?? "./images/pet (1).jpg" ?>" style = "height: 150px; width:120px;" alt = "cart1" class = "img-fluid">
</div>
<div class = "col-sm-8">
<h5 class = "font-baloo font-size-20"><?php echo $item['name'] ?? "Unknown"; ?></h5>
<h5 class = "font-baloo font-size-20"><?php echo $item['pet_id'] ?? "Unknown"; ?></h5>
<small> <?php echo $item['breed'] ?? "Brand"; ?></small>
</div>
<div class = "col-sm-2 text">
<div class = "font-size-20 text-danger font-baloo">
$<span class = "product_price" data-id = "<?php echo $item['pet_id'] ?? '0'; ?>"><?php echo $item['price'] ?? 0; ?></span>
</div>
</div>
<form method = "post">
<input type = "hidden" value = "<?php echo $item['pet_id'] ?? 0; ?>" name = "pet_id">
<button type = "submit" name = "delete-cart-submit" class = "btn font-baloo text-danger px-3 border-right">Delete</button>
</form>
</div>
<!-- !cart item -->
<?php
return $item['price'];
}, $cart); // closing array_map function
endforeach;
?>
Код, которым вы поделились, относительно невелик. Можете ли вы указать, к какой строке относится строка 121 из _checkout.php
, к которой относится ошибка?
@HenryTrần да, в каждой строке таблицы уже было несколько целых чисел
Похоже, у вас ошибка в sql: $sql = "UPDATE pet_info SET number_sold = number_sold + 1 WHERE $item == pet_info.pet_id;";
Работает ли $sql = "UPDATE pet_info SET number_sold = number_sold + 1 WHERE $item = pet_info.pet_id;";
? (Обратите внимание на единственный знак =
.) И является ли $ предмет целым числом?
Кроме того, array_map
требует два аргумента: функция, которая будет выполняться для каждого элемента в массиве, и массив, содержащий элементы. В настоящее время вы только даете ему функцию.
@rickdenhaan строка 121 является закрывающей скобкой для всего большого оператора if.
Вы можете поделиться файлом _checkout.php
?? или, по крайней мере, часть кода вокруг строки 121.
@bloodyKnuckles о sql-запросе, тогда я не уверен, но я думаю, что если это неправильно, это выдаст мне другой тип ошибки. а насчет $item то это массив (только что проверил)
@rickdenhaan о да, я забыл. Я вставил и $cart, и $item, но все равно получаю ту же ошибку.
@HenryTrần я только что опубликовал это, надеюсь, это поможет вам кое-что понять
Проверьте все значение $item, убедитесь, что в нем нет пустого значения, и я думаю, что лучше использовать форматную печать, например printf.
<?php $sql = sprintf('UPDATE pet_info SET number_sold = number_sold + 1 WHERE %d == pet_info.pet_id;',$item); ?>
На данный момент это не ответ — лучше всего разместить под комментариями. И как вы думаете, почему лучше использовать sprintf
для строки SQL?
Это не дает ответа на вопрос. Как только у вас будет достаточно репутация, вы сможете комментировать любой пост; вместо этого давать ответы, не требующие пояснений от спрашивающего. - Из обзора
Я только что проверил ваше сообщение об ошибке, в нем был символ Юникода, который неправильно отображался в кавычках. Итак, я определил, что это «опечатка», если я не ошибаюсь, вы используете Mac или Linux, и откройте вьетнамскую пишущую машинку.
Вы можете вставить сообщение об ошибке в консоль javascript вашего браузера. Вы увидите символ ошибки.
нет, на самом деле я использую Windows, и я 5 раз проверил эти строки кода и не нашел вьетнамской опечатки. Но я проверю на консоли JS, как вы сказали.
Это ошибка Unikey? Будьте очень осторожны с символами Юникода, кроме кавычек.
Я предлагаю вам попробовать удалить некоторые сегменты кода и запустить снова. Попробуйте это, пока не получите никаких ошибок. Это поможет вам найти фактическую ошибку.
я завершу программу Unicode и попытаюсь написать это снова
ну, я переписал его, и текст ошибки не появился, поэтому это должно означать, что он сработал, мне просто нужно исправить мой запрос, тогда он должен быть идеальным. Большое спасибо, чувак
хехе, поздравляю, мой друг. из Вьетнама, с любовью.
У вас есть пространство нулевой ширины, особенно <0x200b>
(невидимый в простом текстовом редакторе), после последней фигурной скобки:
...
endforeach;
}
} //<-- here
?>
Похоже, это неопределенный постоянный для PHP.
Удалите то, что находится после этой последней фигурной скобки.
Не забудьте исправить свой array_map
и sql-запрос.
В моем vscode после фигурной скобки нет пробела. Я пытаюсь выделиться, но все равно ничего не получается
Удалите всю строку и повторно введите закрывающую фигурную скобку.
вставьте свой user_cart.php в консоль devtools браузера. Найдите красную точку и удалите ее. вернуть свой код.
да думаю так и должно быть. Большое спасибо, чувак
вы уверены, что поле «pet_id» в таблице «корзина» всегда имеет допустимое значение?