Цикл foreach в переменной

419
16 февраля 2017, 01:22

Как можно записать следующий код по-другому?

$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;
}
Answer 1

Попробуйте формировать $_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.

Answer 2

Было бы круто показать в каком виде хранится информация в глобальном массиве $_SESSION['cart'] и что вы ожидаете увидеть на выходе.

Насколько я понял, вы имели ввиду это...

$errors .= "<li>Его ключ =";
foreach($_SESSION['cart'] as $key => $value) {
    $errors .= $value; // Если нужен только ключ, то вместо $value подставьте $key
}
$errors .= "его наличие = {$_SESSION['auth'][$id]['nalichies']}</li>";
READ ALSO
Laravel TokenMismatchException in VerifyCsrfToken.php line 68

Laravel TokenMismatchException in VerifyCsrfToken.php line 68

Есть такое дело - при отправке POST данных на сервр после истечения сессии - возникает данное исключениеНу или если на другой странице сделать...

790
Integrated Windows Authentication для PHP под IIS

Integrated Windows Authentication для PHP под IIS

Есть интранет-ресурс, написанный на PHPРаботает под управлением IIS6 (FastCGI)

514
Статичная страница в yii 2.0

Статичная страница в yii 2.0

Я новичок в yii + мне пришлось сразу работать с чужим существующим проектомНикак не могу понять, что мне надо сделать для того, чтобы добавить...

455
Выборка Nраз из бд mysql

Выборка Nраз из бд mysql

Подскажите как сделать выборку из базы данных MySQL определенных категории по 8 товаров

405