簡體   English   中英

處理未知數量的復選框

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM