2 回答
TA贡献1906条经验 获得超3个赞
它与通过互联网传输数据的任何其他方法一样安全,但您的方法似乎有点奇怪。
正如评论所指出的,处理这个问题的常用方法是包含一个隐藏字段来传递应该对用户隐藏的数据。您仍然需要验证数据,因为用户也可以编辑隐藏的输入;他们只是从普通用户那里稍微混淆了它。
<form type="post" ...>
<input type="hidden" name="product_id" value="<?php echo $product['id']; ?>">
<input type="number" name="quantity" min="1" placeholder="Quantity" required >
...
</form>
<?php
$productId = $_POST['product_id'];
$quantity = $_POST['quantity'];
$query = 'UPDATE product SET quantity = ? WHERE product = ?'
...
编辑
如果您需要从表单传递产品数据数组,您可以使用数组语法[]来命名表单输入。
<?php
// This array just represents the data coming from your DB.
// Change it to suit.
$products = [
[
'id' => 1281,
'quantity' => 7
],
[
'id' => 234,
'quantity' => 2
],
[
'id' => 3455,
'quantity' => 25
],
[
'id' => 64563,
'quantity' => 84
],
[
'id' => 235,
'quantity' => 7
],
];
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
var_dump($_POST);
// Handle the form processing here.
}
?>
<form method="post">
<?php foreach ($products as $product): ?>
<input type="hidden" name="product[<?php echo $product['id']; ?>]" value="<?php echo $product['id']; ?>">
<label for="product[<?php echo $product['id']; ?>]"><?php echo $product['id']; ?>:</label>
<input type="number" name="product[<?php echo $product['id']; ?>]" value="<?php echo $product['quantity']; ?>">
<br>
<?php endforeach; ?>
<input type="submit" name="submit" value="Submit">
</form>
输出:
array (size=2)
'product' =>
array (size=5)
1281 => string '52' (length=2)
234 => string '2' (length=1)
3455 => string '25' (length=2)
64563 => string '84' (length=2)
235 => string '7' (length=1)
'submit' => string 'Submit' (length=6)
然后,您可以遍历此数据以创建 SQL 查询。
TA贡献1839条经验 获得超15个赞
当我想接受来自用户的信息时,我使用了这种方法,我想确保他们不会修改任何内容。我传递了一个我想用作参考的值的加盐 MD5 哈希值,这对应用程序很重要,如果用户更改会影响代码的执行或登录。
HTML 表单
<input name="<?php echo $product['id']; ?>" type="number" min="1" placeholder="Quantity" required/>
<input name="<?php echo $product['id']; ?>_hash" type="hidden" value="<?php md5($product['id'] . "rand0mC0d3") ?>">
服务器端
<?php
session_start();
require __DIR__."/../connectDB.php";
$memberId = $_SESSION['user_id'];
foreach ($_POST as $prodId => $quantity) {
if(is_numeric($propId) and $_POST[$propId . '_hash'] == md5($propId . "rand0mC0d3") ){
if(is_numeric($quantity)){
$stmt =$conn->prepare("UPDATE tbl_product SET stock = ? WHERE id = ? AND member_id = ?");
$stmt->bind_param("iii", $quantity, $prodId, $memberId);
$stmt->execute();
$stmt->close();
}else{
// Value not numeric.
}
}
}
?>
注意** 我想提出一个概念,即传递一个加盐的 md5 哈希来验证我们想要用来识别记录的值没有被修改。您可能需要对其进行更改以满足您的特定需求。快乐编码。
- 2 回答
- 0 关注
- 145 浏览
添加回答
举报