$ _POST дает неверное значение поля ввода HTML - PullRequest
0 голосов
/ 27 июня 2018

Я зол на этот код. Может кто-нибудь объяснить, где проблема?

У меня есть эта HTML-форма:

<form action="item_add.php" method="POST" id="formadd">
    SKU: <input type="text" name="sku" id="form2"><br/>
    Name: <input type="text" name="name" id="form2"><br/>
    Price: <input type="text" name="price" id="form2"><br/>
    Type: <select name="type" id="form2">
        <option value="1">DVD-Disc</option>
        <option value="2">Book</option>
        <option value="3">Furniture</option>
    </select>
</form>

И этот простой код для проверки, все ли работает, как я новичок в этом:

if ($_SERVER['REQUEST_METHOD'] == 'POST'){//&&( isset( $_POST['submit1'] )){
    $item = new c_item;
    $item->$sku = mysqli_real_escape_string($link, $_POST['sku']);
    $item->$name = mysqli_real_escape_string($link, $_POST['name']);
    $item->$price = floatval(mysqli_real_escape_string($link, $_POST['price']));
    $item->$type = intval(mysqli_real_escape_string($link, $_POST['type']));

    echo "sku: ".$item->$sku."<br/>";
    echo "name: ".$item->$name."<br/>";
    echo "price: ".$item->$price."<br/>";
    echo "type: ".$item->$type."<br/>";
}

Проблема в том, что он выводит меня:

sku: Имя

имя: имя

цена: 2

тип: 2

когда в sku и цене указано что-то другое.

1 Ответ

0 голосов
/ 27 июня 2018

Поскольку вы не вставили весь код, это будет только предположение

echo "sku: ".$item->$sku."<br/>";
            echo "name: ".$item->$name."<br/>";
            echo "price: ".$item->$price."<br/>";
            echo "type: ".$item->$type."<br/>"; 

там вы выполняете динамическое имя переменных, поэтому $ name может совпадать с $ sku, а $ price может совпадать с $ type

Я не знаю ваш c_item, но, вероятно, вы хотите, чтобы объявить в этом классе или что-то подобное

class c_item 
{
    public $name;
    public $price, 
    public $sku;
    public $type;
}

и затем в вашем коде вам нужно использовать обычный доступ к свойствам через динамические с $

 $item = new c_item;

 $item->sku = mysqli_real_escape_string($link, $_POST['sku']);
 $item->name = mysqli_real_escape_string($link, $_POST['name']);
 $item->price = floatval(mysqli_real_escape_string($link, $_POST['price']));
 $item->type = intval(mysqli_real_escape_string($link, $_POST['type']));

 echo "sku: ".$item->sku."<br/>";
 echo "name: ".$item->name."<br/>";
 echo "price: ".$item->price."<br/>";
 echo "type: ".$item->type."<br/>";

обратите внимание на отсутствие $ в имени свойства объекта

...