2 回答

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個(gè)贊
它與通過(guò)互聯(lián)網(wǎng)傳輸數(shù)據(jù)的任何其他方法一樣安全,但您的方法似乎有點(diǎn)奇怪。
正如評(píng)論所指出的,處理這個(gè)問(wèn)題的常用方法是包含一個(gè)隱藏字段來(lái)傳遞應(yīng)該對(duì)用戶隱藏的數(shù)據(jù)。您仍然需要驗(yàn)證數(shù)據(jù),因?yàn)橛脩粢部梢跃庉嬰[藏的輸入;他們只是從普通用戶那里稍微混淆了它。
<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 = ?'
...
編輯
如果您需要從表單傳遞產(chǎn)品數(shù)據(jù)數(shù)組,您可以使用數(shù)組語(yǔ)法[]來(lái)命名表單輸入。
<?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)
然后,您可以遍歷此數(shù)據(jù)以創(chuàng)建 SQL 查詢。

TA貢獻(xiàn)1839條經(jīng)驗(yàn) 獲得超15個(gè)贊
當(dāng)我想接受來(lái)自用戶的信息時(shí),我使用了這種方法,我想確保他們不會(huì)修改任何內(nèi)容。我傳遞了一個(gè)我想用作參考的值的加鹽 MD5 哈希值,這對(duì)應(yīng)用程序很重要,如果用戶更改會(huì)影響代碼的執(zhí)行或登錄。
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") ?>">
服務(wù)器端
<?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.
}
}
}
?>
注意** 我想提出一個(gè)概念,即傳遞一個(gè)加鹽的 md5 哈希來(lái)驗(yàn)證我們想要用來(lái)識(shí)別記錄的值沒(méi)有被修改。您可能需要對(duì)其進(jìn)行更改以滿足您的特定需求??鞓?lè)編碼。
- 2 回答
- 0 關(guān)注
- 166 瀏覽
添加回答
舉報(bào)