【问题标题】:$_POST gives incorrect HTML input field value$_POST 给出了不正确的 HTML 输入字段值
【发布时间】:2018-12-06 12:52:58
【问题描述】:

我对这段代码很生气。谁能解释问题出在哪里?

我有这个 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 和价格时会有所不同。

【问题讨论】:

  • c_item 是什么?
  • 你为什么要使用一个对象?一个简单的数组也会做同样的事情。并且 html 元素的 id 必须是唯一的!
  • 附带说明,ID 是唯一的
  • 您使用的变量变量 - $item-&gt;$sku 应该是 $item-&gt;sku(减去 $)

标签: php html forms post submit


【解决方案1】:

因为您没有粘贴整个代码,这只是假设

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/>";

注意对象的属性名称中缺少 $

【讨论】:

  • 类假设是正确的,但是如果没有使用$它不会输出任何值
  • 它成功了,但我仍然不明白为什么 $sku 和 $price 会复制他们下一个类属性的值。
  • @RihardsEgle 想象以下场景 '$sku='price'; $price = '价格'; $this->$sku; => 等于 $this->price; $this->$price 等于 $this->price 所以两者都指向同一个变量。如果你没有第二个 $ 它指向对象的属性
猜你喜欢
  • 1970-01-01
  • 2011-05-24
  • 1970-01-01
  • 2011-10-20
  • 1970-01-01
  • 1970-01-01
  • 2020-08-19
相关资源
最近更新 更多