[英]Processing an unknown amount of checkboxes
我正在使用mysql在表單中生成數量未知的復選框,該數字始終會變化,
$frinfoq = mysql_query($frinfo) or die (mysql_error());
while($frow = mysql_fetch_assoc($frinfoq)) {
$username = $frow['username'];
$ct = $frow['country'];
$fruuid = $frow['uid'];
?>
<tr><td><p><?php echo $username; ?></p></td><td><p><?php echo $ct; ?></p></td><td><form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" id="delf"><input type="hidden" value="<?php echo $fruuid; ?>" /><input type="checkbox" name="add[]" value="<?php echo $fruuid; ?>" id="a_t_game" /><form></td></tr>
<?php
}
?>
當表單提交並由“ create.php”處理時,應該將已檢查的用戶僅添加到mysql表中,每個用戶一行,我確定(由於我遇到的問題,我不確定這是否行得通即將到達),如下所示進行檢查:
if($_POST['add'] == true) {
$user_uid = $_POST['add'];
}
然后,我嘗試像這樣添加行:
$arr = array($user_uid);
foreach($arr as $user_uid) {
$game = "INSERT INTO wd_game (game_uid,user_uid,lastmove,startcountry) VALUES ('$gid','$user_uid',now(),'none')";
$gameq = mysql_query($game) or die (mysql_error());
}
除了設置為“ Array”的用戶uid以外,所有數據輸入都很好。 它也只創建一行,每個用戶我需要一行。
我知道這是我的數組處理方式的問題,這很明顯,但是我還沒有關於如何解決它的最模糊的想法。 任何幫助/指針將是一個很大的幫助!
$arr = array($user_uid);
是你的問題。 只嘗試$arr = $user_uid;
,甚至剪掉中間人,只用$arr = $_POST["add"];
。
您的代碼還可以改善許多其他方面。 首先,它很難閱讀。 我建議稍微清理一下,避免在HTML和PHP之間跳轉。
另一件事是,您應該轉義任何可能來自用戶輸入(例如$ _POST)的數據,不要進入數據庫。 您應該使用mysql_real_escape_string
。
第三件事是帶有指向$_SERVER["PHP_SELF"]
的動作的表單是不安全的。 它容易受到跨站點腳本(XSS)的攻擊。 有關此漏洞的更詳細說明,請參見此博客 。
我建議您做更多這樣的事情:
<?php if ($_POST["add"]) { $arr = $_POST["add"]; foreach ((array)$arr as $user_uid) { $game = "INSERT INTO wd_game (game_uid,user_uid,lastmove,startcountry) VALUES ('". mysql_real_escape_string($gid) ."','". mysql_real_escape_string($user_uid) ."', now(), 'none')"; $gameq = mysql_query($game) or die (mysql_error()); } } $frinfoq = mysql_query($frinfo) or die (mysql_error()); while($frow = mysql_fetch_assoc($frinfoq)) { $username = $frow['username']; $ct = $frow['country']; $fruuid = $frow['uid']; echo " <tr> <td> <p>{$username}</p> </td> <td> <p>{$ct}</p> </td> <td> <form method=\\"post\\" action=\\"". htmlentities($_SERVER['PHP_SELF']) ."\\" id=\\"delf\\"> <input type=\\"hidden\\" value=\\"{$fruuid}\\" /> <input type=\\"checkbox\\" name=\\"add[]\\" value=\\"{$fruuid}\\" id=\\"a_t_game\\" /> <form> </td> </tr>\\n"; } ?>
您的問題在這里:
$arr = array($user_uid);
$ user_uid已經是$ _POST中的數組; 再次將其轉換為數組將使其成為二維。
嘗試這個。
if($_POST['add'] == true) {
$user_uid = $_POST['add'];
}
foreach($user_uid as $userId) { ....
看來$ user_uid已經是一個數組,並且您要將其包裝在一個數組中(再次),從而形成一個多維數組。 考慮測試$ user_uid以查看它是否為數組:
if(!is_array($user_uid)) {
$arr = array($user_uid);
} else {
$arr = $user_uid;
}
然后,我相信您的代碼將實現您所期望的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.