2015-04-01 54 views
0

當使用一個按鈕來提交該準備的資料,但要添加一個類似標題的按鈕,這樣的「價值」與格式如:的按鈕信息更簡單的方法提交(安全)

<form action="" method="POST"> 
<input type="submit" name="Man" value="Man"> 
</form> 

在PHP代碼:

if (isset($_POST['Man'])) { 

    // Check connection 
    if ($conn->connect_error) { 
     die("Connection failed: " . $conn->connect_error); 
    } 

    $sql = " 
    UPDATE users 
    SET gender = ? 
    WHERE username = ? 
"; 

$stmt = $mysqli->prepare($sql); 
$stmt->bind_param('ss', $_POST['Man'], $_SESSION['username']); 
$ok = $stmt->execute(); 

    if ($ok == TRUE) { 
     echo "<font color='#00CC00'>Your gender has been updated.</font><p>"; 
    } else { 
     echo "Error: " .$stmt->error; 
    } 
} 

這是代碼,這也讓不少人使用(預處理語句正常容易代碼),但有一個錯誤的......如果有人改變值人例如。 大聲笑,數據庫中的性別將被設置爲「哈哈」,因爲它的值是「哈哈」... 我在這麼多的網站和代碼中注意到了這個問題,所以解決這個問題的方法是,定義$ _ POST ...查看答案

回答

-1

一件簡單的事情做的是預先定義的$ _ POST因此該值將永遠不會改變...... 用簡單的一行代碼:

$_POST['Man'] = Man; 

通過將此代碼添加到您的代碼中,該值不能用html更改,所以 結果將仍然是「人」,而且您很好。

+1

奇妙的改變超全局變量是可怕調試的允許值。 – PeeHaa 2015-04-01 10:02:33

+0

你爲什麼要調試呢? – 2015-04-01 10:08:20

+1

你沒有看到調試代碼的用處?你在某個文件的某個地方設置了超全局。在同一個完全不相關的文件中的請求中,我檢查了supergobal的內容,並會認爲我剛剛發佈了'Vrouw'的WTF,並突然以某種方式超大全局包含'Man'。 – PeeHaa 2015-04-01 10:14:03

0

你需要加入白名單中的數組

if (isset($_POST['Man'])) { 

$allowed_values=array("Man","Women"); 

if(!in_array($_POST['Man'],$allowed_values)){ 
echo"error message"; 
die(); 
} 

    // Check connection 
    if ($conn->connect_error) { 
     die("Connection failed: " . $conn->connect_error); 
    } 

    $sql = " 
    UPDATE users 
    SET gender = ? 
    WHERE username = ? 
"; 

$stmt = $mysqli->prepare($sql); 
$stmt->bind_param('ss', $_POST['Man'], $_SESSION['username']); 
$ok = $stmt->execute(); 

    if ($ok == TRUE) { 
     echo "<font color='#00CC00'>Your gender has been updated.</font><p>"; 
    } else { 
     echo "Error: " .$stmt->error; 
    } 
} 
+0

不是$ _POST ['Man'] = Man;更輕鬆? – 2015-04-01 10:13:00

+0

如果將有多個選項(提交按鈕)選擇,那麼你會做什麼?如果表單是這樣的

2015-04-01 10:14:20

+0

爲什麼會有name =「Man」和value =「Women」?這是沒有道理的.. – 2015-04-01 10:16:40