2009-08-28 68 views
1

我目前正在寫一個腳本,其中使用顯示覆選框的數組:存儲複選框數據

<? 
    while($i = mysqli_fetch_array($get_perms)){ 

    $pname = $i[pname]; 
    $id = $i[id]; 
?> 
    <div> 
    <input type="checkbox" tabindex="1" name="<? echo("$id");?>" value="1" <? if($permissionid[$id] == '1') {echo ' checked="checked" ';}?> /><?echo(" $pname");?> 
    </div> 
<? } ?>  

不過,我也有另一部分做了類似的事情,但對於Sget_perms是不同的SQL,以獲得不同數據。

顯然,當將數據發佈回窗體/腳本時,在區分窗體中的兩個數據區之間會出現問題。

這是更新的形式給出數據的SQL:

$insert = mysql_query("UPDATE `perms` SET 
    `title`='$_POST[title]', 
    `1` ='$_POST[1]', 
    `2` ='$_POST[2]', 
    `3` ='$_POST[3]', 
    `4` ='$_POST[4]', 
    `5` ='$_POST[5]', 
    `user` ='$_POST[username]' 
    WHERE `userid` = '$valued_user_show[id]' 
") 

那麼,如何在地球上我正確區分兩者,並且有能夠正確輸入SQL?

的表的模式基本上是:

7列,用戶ID,用戶,1,2,3,4,6 用戶標識是誰已發送到腳本形式之前的用戶的用戶ID。用戶是名稱。 這些數字是許可號碼。

$ get_perm是用於從數組中的表中加載關於用戶的當前信息的sql。

+0

您可以添加表格模式以及您正在嘗試使用Sget_perms函數嗎?這將有助於尋找解決方案。 – 2009-08-28 22:17:07

回答

2

第一條:從不將用戶提交的數據包含在SQL語句中而不會將其轉義!惡意用戶可能會利用該漏洞來破壞您的數據,未經授權檢索數據並導致各種傷害。始終使用mysql_real_escape_string()將提交的值轉義爲查詢。

關於你的實際問題:爲了區分你的兩個相似的字段集,給他們不同的名字。也許第一個將被稱爲permsA和第二個permsB。然後你會得到HTML這樣的:

<input type="checkbox" tabindex="1" name="permsA_<? echo $id;?>" value="1" <? if($permissionid[$id] == '1') {echo ' checked="checked" ';}?> /><?echo htmlspecialchars($pname);?> 

請注意,我還包括以htmlspecialchars()調用適當逃脫在HTML使用$pname價值,我省略了不必要的引號"$id"(投入引號中的變量就像這只是讓PHP做額外的處理來解析字符串;你可以直接回顯變量本身而不用引號)。

然後在您的SQL語句:

$insert = mysql_query("UPDATE `perms` SET 
    `title`='" . mysql_real_escape_string($_POST[title]) . "', 
    `1` ='" . mysql_real_escape_string($_POST['permsA_1'] . "', 
    `2` ='" . mysql_real_escape_string($_POST['permsA_2'] . "', 
    `3` ='" . mysql_real_escape_string($_POST['permsA_3'] . "', 
    `4` ='" . mysql_real_escape_string($_POST['permsA_4'] . "', 
    `5` ='" . mysql_real_escape_string($_POST['permsA_5'] . "', 
    `user` ='" . mysql_real_escape_string($_POST['username']) . "' 
    WHERE `userid` = '$valued_user_show[id]' 
") 

這裏唯一的變化是添加permsA_前綴,並妥善逃避所有用戶提交的值。

+0

woops對不起,所有其他活腳本都有數據前的轉義字符串,我通常不包括轉義,直到主腳本開發完成:) – bear 2009-08-28 22:18:27

+0

也,我們使用mysqli :) – bear 2009-08-28 22:29:16

+0

有趣的是...表單的提交給Array/useredit.php(該腳本被稱爲useredit.php ...它不在「數組」文件夾中。 – bear 2009-08-28 22:35:44

1

與複選框創建一個數組:

<input type="checkbox" name="mycheckbox[]"/> 

和「mycheckbox」將作爲您的_POST數據的數組。

+0

那麼我將如何爲$ _POST進行論壇? – bear 2009-08-28 22:25:15