Обновите таблицу базы данных SQL из значений массива PHP с помощью foreach () - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь обновить таблицу SQL из массива PHP с помощью foreach ().Я заметил, что только последнее значение массива записывается во все поля таблицы.Я просмотрел много примеров здесь, но ни один из них не решил это для меня.например ( Простое обновление таблицы sql из массива PHP и некоторых других), вот массив $ product_qttys: Array ( [qty0] => 1 [qty1] => 4 [qty2] => 2 [qty3] => 3 [qty4] => 6 )

, а вот код:

foreach ($product_qttys as $key => $pr_qtys){

    $qttys = mysqli_real_escape_string($con, $pr_qtys);
    // print_r ($qttys);
    $sql = "UPDATE table-a SET qty = '$qttys' WHERE ip_add = '$ip'";
    $result = mysqli_query($con,$sql);

}

    echo "<br/>check SQL table<br/>";           

    $sqla = "SELECT * FROM table-a WHERE ip_add='$ip'";
    $querya = mysqli_query($con,$sqla);
    if  (mysqli_num_rows($querya) > 0) {
        while ($producta = mysqli_fetch_assoc($querya)) {
             echo ("item_qty=" . ($item_qty = $producta ['qty']) . "<br/>");
        }
    }

Это вывод, который я получаю:

check SQL table
item_qty=6
item_qty=6
item_qty=6
item_qty=6
item_qty=6

Таблица PhpMyAdmin также показывает то же самое.я что-то пропустил или что-то не так?Ценю ваш отзыв / вклад и надеемся закрыть его.спасибо.

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Вы устанавливаете столбец 'qty' 5 раз на другое число, поэтому, когда первый цикл проходит, как только он устанавливает столбец 'qty' на 1, тогда, когда он движется вперед, он собирается переписать последнее число на новое число,Вы не можете сохранить разные числа в одном столбце и строке, поэтому если $ip = 127.0.0.1, то вы перезаписываете все строки, имеющие 127.0.0.1 в строке ip.Возможно, что-то вроде $sql = "UPDATE table-a SET $key = '$qttys' WHERE ip_add = '$ip'"; решит проблему, но это не проверено, поэтому может не работать.Если утверждение верно, то вам нужно иметь все ключи массива в виде отдельного столбца.

0 голосов
/ 05 октября 2018

вы выполняете foreach в массиве значений и передаете один и тот же ip, так что where говорит навсегда изменить один и тот же элемент.

Остальная часть кода, которую я вижу, ошибочнаи я помогаю исправить это.

Но вам придется сделать что-то подобное.

$product_qttys = Array ( ["127.0.0.1"] => 1 ["127.0.0.1"] => 4 ["127.0.0.1"] => 2 ["127.0.0.1"] => 3 ["127.0.0.1"] => 6);

foreach ($product_qttys as $key => $pr_qtys){
  $qttys = mysqli_real_escape_string($con, $pr_qtys);

  $sql = "UPDATE table-a SET qty = '$qttys' WHERE ip_add = '$key'";
  $result = mysqli_query($con,$sql);
}


echo "<br/>check SQL table<br/>";           
$sqla = "SELECT * FROM table-a WHERE ip_add='$key'";
$querya = mysqli_query($con,$sqla);
if  (mysqli_num_rows($querya) > 0){
while ($producta = mysqli_fetch_assoc($querya)){
echo ("item_qty=" . ($item_qty = $producta  ['qty']) . "<br/>");
    }
}

, чтобы также улучшить логику

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...