как пройти через набор значений GET в php - PullRequest
1 голос
/ 13 ноября 2010

Я делаю простую программу, похожую на интернет-магазин. Что вы можете посоветовать мне, чтобы я мог просмотреть все входы, которые я сделал в своей программе.

Я все еще использую get, чтобы видеть, как выглядят данные, я изменю их, чтобы опубликовать позже. Вот как выглядит URL, когда я совершаю покупку всех товаров, добавленных в корзину: http://localhost/pos/php/checkout.php?ids=2;&qoh=12;&qbuys=&ids=6;&qoh=2304;&qbuys=304&ids=4;&qoh=699;&qbuys=99

Это код, который я использую для фиксации только одного продукта, он не работает, когда у меня было что-то вроде приведенного выше URL:

<?php

$id=$_GET['ids'];
$qtyhnd=$_GET['qoh'];
$qtytbuy=$_GET['qbuys'];
$left=$qtyhnd-$qtytbuy;



if($qtyhnd>=$qtytbuy){
$update=query_database("UPDATE prod_table SET  QTYHAND='$left' WHERE PID='$id'", "onstor", $link);
}


?>

Пожалуйста, прокомментируйте, если вам нужно больше деталей, спасибо

Ответы [ 5 ]

2 голосов
/ 13 ноября 2010

Либо преобразуйте параметры в параметры массива (например, qoh[]), а затем выполните итерацию параллельно, либо проанализируйте строку запроса вручную.

1 голос
/ 13 ноября 2010

Укажите ваш URL-адрес, например http://localhost/pos/php/checkout.php?ids[]=2&qoh[]=12&qbuys[]=&ids[]=6&qoh[]=2304&qbuys[]=304&ids[]=4&qoh[]=699&qbuys[]=99..., используя структуру HTML, например, infinity.

Тогда:

foreach ($_GET['ids'] as $k => $v) {
    $id = (int)$v;
    $qtyhnd = (int)$_GET['qoh'][$k];
    $qtytbuy = (int)$_GET['qbuys'][$k];
    $left = $qtyhnd - $qtytbuy;

    if ($qtyhnd >= $qtytbuy) {
        $update = query_database(
            "UPDATE prod_table SET QTYHAND='$left' WHERE PID='$id'",
            "onstor",
            $link);
    }
}

И если тип базы данных QTYHAND и PID are int, исключить одинарные кавычки (') из ваших запросов SQL.

1 голос
/ 13 ноября 2010

Я предполагаю, что PID в prod_table имеет целочисленный тип.Разве переменная $ id не содержит "2;" вместо 2 ?В любом случае, какую ошибку вы получаете?

1 голос
/ 13 ноября 2010

У вас есть точки с запятой после некоторых значений, возможно, вам следует передать только целое число, это qoh и qbuys.Помимо этого вы должны использовать mysql_real_escape_string () и (int) перед целочисленными значениями для предотвращения внедрения SQL, например:

$int = (int)$_GET['price'];
$string = $_GET['val'];
mysql_real_escape_string($string);

Также, если вы хотите передать несколько значений, вы должны использовать для них массив:

HTML

<input type="hidden" name="ids[]" value="1">
<input type="hidden" name="ids[]" value="2">
<input type="hidden" name="ids[]" value="3">

PHP

$ids = $_GET['ids'];
foreach($ids as $id) {
    $sql = 'UPDATE table SET field=? WHERE id='.(int)$id;
    ....
}
1 голос
/ 13 ноября 2010

Вы можете использовать $_SERVER['QUERY_STRING'] с foreach циклом следующим образом:

foreach($_SERVER['QUERY_STRING'] as $key => $value){
  echo "$key - $value <br />";
}

Таким образом, вы можете получить значения GET и использовать их в запросе к базе данных аналогичным образом, используя цикл foreach.

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