Обновление значения в массиве обновляет все значения с последним вставленным значением PHP - PullRequest
0 голосов
/ 27 мая 2020

У меня есть два массива: один с количествами под названием aantal, а другой с продуктами под названием producten.

Producten:

Array
(
    [0] => Array
        (
            [0] => 2
            [1] => Tegel zwart
            [2] => Zwarte tegel 2x2m
            [3] => 47,5
            [4] => 25
        )

    [1] => Array
        (
            [0] => 4
            [1] => Tegel lichtgrijs
            [2] => Lichtgrijze tegel 2x2m
            [3] => 40,5
            [4] => 25
        )

    [2] => Array
        (
            [0] => 2
            [1] => Tegel zwart
            [2] => Zwarte tegel 2x2m
            [3] => 47,5
            [4] => 25
        )

    [3] => Array
        (
            [0] => 4
            [1] => Tegel lichtgrijs
            [2] => Lichtgrijze tegel 2x2m
            [3] => 40,5
            [4] => 25
        )

)

Aantal:

Array
(
    [0] => 20
    [1] => 20
    [2] => 27
    [3] => 25
)

Я хочу обновить каждое количество в соответствии со значениями $ _GET из URL-адреса со следующим кодом:

$sum = 0;
foreach($_SESSION['producten'] as $key => $product){
    //$_SESSION['producten'][$key][4] = '';
    $number = str_replace(',', '.', $product[3]);
    $sum+= $number;
    if(!empty($_GET['aantal'])){
        foreach($_GET['aantal'] as $keyaantal => $aantal){
            $_SESSION['producten'][$key][4] = $_GET['aantal'][$keyaantal];
        }
    }else{
        $_SESSION['producten'][$key][4] = '1';
    }
}

Это форма с html:

<form action="cart.php">
<?php foreach ( $_SESSION['producten'] as $row){

    if(!empty($_GET['aantal'])){
        $aantalwaarde = $row[4];
    }else{
        $aantalwaarde = 1;
    }

    // if($row != ){

    // }
    ?>


        <tr>
            <td><?php echo $row[0] // ID; ?></td>
            <td><?php echo $row[1] // Product_naam; ?></td>
            <td><?php echo $row[2] // Beschrijving; ?></td> 
            <td><input name="aantal[]" type="number" value="<?PHP echo $aantalwaarde; ?>"></td> 
            <td>€<?php echo $row[3] // Prijs; ?></td>   

            <?php $total = $total + intval($row[3]); ?>
        </tr>

        <?php } ?>

        <tr>
            <td></td>
            <td></td>
            <td></td> 
            <td></td>   
        </tr>
        <tr>
            <td><input type="submit" value="Updaten"></td>
            <td></td>
            <td>Totaalprijs</td>
            <td></td> 
            <td>€<?php echo $sum // Prijs; ?></td>   

        </tr>

</form>

Почему, если я нажимаю кнопку обновления, обновляются последние вставленные значения для всех продуктов? Например, если я установил последний ввод количества на 25, а один перед ним на 10, все продукты будут иметь количество 25.

Как я могу это исправить?

Ответы [ 2 ]

1 голос
/ 27 мая 2020

Ваш внутренний foreach l oop - это проблема. Вы просматриваете все количества вместо того, чтобы выбирать одно связанное. Поэтому, когда l oop заканчивается, у вас всегда остается последний добавляемый в вашу сессию.

Я не могу сейчас протестировать, но думаю, вам следует изменить

foreach($_GET['aantal'] as $keyaantal => $aantal){ 
   $_SESSION['producten'][$key][4] = $_GET['aantal'][$keyaantal]; 
} 

на

$_SESSION['producten'][$key][4] = $_GET['aantal'][$key]; 

Таким образом вы выберете соответствующий ключ для обоих массивов.

1 голос
/ 27 мая 2020

У вашего кода есть большой недостаток. Сначала вы перебираете весь массив producten. Внутри этого массива вы l oop через массив aantal и обновляете значения. Это действительно не имеет смысла, вам вообще не нужна вторая l oop. Вы можете заменить всю эту часть ...

foreach($_GET['aantal'] as $keyaantal => $aantal){
    $_SESSION['producten'][$key][4] = $_GET['aantal'][$keyaantal];
}

... на эту ...

$_SESSION['producten'][$key][4] = $_GET['aantal'][$key];

Это должно помочь.

Проблема с ваш l oop был в том, что вы выполняли итерацию по массиву и обновляли значение вашего ['producten'][$key][4] с каждой итерацией. Это означает, что последнее значение, на котором вы застряли, всегда будет последним.

...