Как можно записать следующий код по-другому?
$errors .=
"<li>Его ключ =" .
foreach($_SESSION['cart'] as $key => $value) {
$_SESSION['cart'][$key];
} .
"его наличие = {$_SESSION['auth'][$id]['nalichies']}</li>";
Сейчас выходит ошибка syntax error unexpected t-foreach.
Возможно надо записать по-другому?
[cart] => Array
(
[1] => Array
(
[qty] => 2
[name] => Название 1
[price] => 999
[img] => 1.jpg
[nalichies] => 2
)
[3] => Array
(
[qty] => 3
[name] => Название 2
[price] => 750
[img] => no_image.jpg
[nalichies] => 53
)
)
Вот сам код выполнения:
$errors = ''; // флаг проверки пустых полей
$name = trim($_POST['name_zakaz']);
if(empty($name)) $errors .= '<li>Не указано <strong>ФИО</strong></li>';
//ТАК РАБОТАЕТ (то, что нужно). Но, если реализовать на данных основанных из корзины - так не правильно, т.к. $vnal можно подделать. Поэтому хочется брать данные из сессии корзины, как показано на 2-ом for
for ($i = 0; $i < count ($_POST['na']);$i++ ) {
$id = $_POST["na"][$i]; // уникальный id товара
$vnal = $_POST["nas"][$i]; // имеющееся количество товара
$kolvo = $_POST["nass"][$i]; // количество введенное заказчиком
if ($kolvo > $vnal) { //если заказчик ввел кол-во товаров больше числа доступных товаров
$errors .= "<li>Товара с id = {$id} в кол-ве {$kolvo} шт. нет в наличии!</li>";
}
}
//ТАК НЕ РАБОТАЕТ.
for ($i = 0; $i < count ($_POST['na']);$i++ ) {
$id = $_POST["na"][$i]; // уникальный id товара - его, конечно, надо тоже брать из сессии корзины
$kolvo_tovara_v_korzine = $_POST["nass"][$i]; // количество введенное заказчиком уже брать методом POST
if ($kolvo_tovara_v_korzine > $_SESSION['cart'][$id]['nalichies']) { //если заказчик ввел кол-во товара больше числа имеющегося наличия
$errors .= "<li>Товар с id =" .(foreach($_SESSION['cart'] as $key => $value){$_SESSION['cart'][$key];}). "не может содержаться в количестве: {$kolvo_tovara_v_korzine} шт.</li>";
} //Также хотелось бы
}
if(empty($errors)){
// выполнение кода
}else{
// если не заполнены обязательные поля и другие возможные ошибки
$_SESSION['order']['res'] = "<div class='errorREG'><strong>Ошибка оформления заказа:</strong> <ul class='ulError'>{$errors}</ul></div>";
$_SESSION['order']['name'] = $name;
return false;
}
Попробуйте формировать $_POST['nass'] так:
<imput type="number" name="nass[<?=product_id;?>]" value="{qty_by_customer}" />
И добавлять сверку session_qty и customer_entered_qty:
foreach($session as $sk => $sv){
foreach($_POST['nass'] as $pk => $pv){
if($pk == $sv['name'] && $pv > $sk['nalichies']){
$errors .= "<li>нельзя купить $pk['qty']ед. $pk['name'] - в наличии: $sk['nalichies']</li>"
}
}
}
Для идентификации единицы товара лучше всё же использовать id а не name.
Было бы круто показать в каком виде хранится информация в глобальном массиве $_SESSION['cart'] и что вы ожидаете увидеть на выходе.
Насколько я понял, вы имели ввиду это...
$errors .= "<li>Его ключ =";
foreach($_SESSION['cart'] as $key => $value) {
$errors .= $value; // Если нужен только ключ, то вместо $value подставьте $key
}
$errors .= "его наличие = {$_SESSION['auth'][$id]['nalichies']}</li>";
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости