php - 循环中的复选框 - PHP

标签 php mysql loops checkbox

我正在尝试使用复选框将用户添加到特定组,但我无法准确理解逻辑是如何工作的。用户列表是从 sql 语句中提取并回显的。我想在每个名字旁边显示一个复选框,如果选中该框,则用户将使用 implode 添加到列表中,这样我就可以将成员存储在一列中。

这是显示包含用户、他们的位置和复选框的列表的输出。我希望能够选中该复选框,然后根据他们的用户 ID($friendNum) 将他们添加到组中。

更新:复选框正常工作并正确进入数据库,但未输入第一个表单中的输入。 (标题、描述、日期、地点)

  $myUsername = $_SESSION['userid'];       
        if(isset($myUsername)){
            echo '<table><form method="post" action="event.php" name="groupInvite"> 
                <tr><td> Event Title:</td><td> <input type="text" name="eventTitle" /></td></tr>
                <tr><td>Event Description:</td><td> <textarea name="eventDescription" /></textarea></td></tr>
                <tr><td>Event Date: </td><td><input type="text" name="eventDate" /></td></tr>
                <tr><td>Event Location:</td><td><input type="text" name="eventLocation" /></td></tr></table>
                <table><tr><td>Username </td><td> Location</td><td>Invite To Event</td></tr>'; 

        $friends = mysql_query("SELECT userid1 as friendId FROM friends WHERE userid2 = $myUsername AND friendstatus = 1
                                UNION SELECT userid2 as friendId FROM friends WHERE userid1 = $myUsername AND friendstatus = 1");

            while($friend = mysql_fetch_array($friends)){
                $userID = $friend['friendId'];
                $friendNum = mysql_query("select * from users where userid = $userID");
                $friendID = mysql_fetch_array($friendNum);
                $userLocation = mysql_query("select * from userinfo where userid='$userID'");
                $locationResult = mysql_fetch_array($userLocation);
                $locationResultArray = $locationResult['userlocation'];
                $locationExplode = explode("~","$locationResultArray");

        echo '<tr>
                <td><a href="profile.php?userid=' . $friendID['userid'] . '">' . $friendID['username'] .  '</a></td>
                <td>' . $locationExplode[0] . ', ' . $locationExplode[1] . '</td>
                <td><input type="checkbox" name="friendID[]" value='.$friendID['userid'].' /></td></tr>';
                }   
            echo '<tr><td> <input type="submit" name="eventSubmit" value="Create Event" />
            </td></tr>
            </form></table>';     
    }   

      if(isset($_POST['eventSubmit'])){
            $userList = implode("~",$_POST['friendID']);
            $sql = "INSERT INTO events VALUES('$userList',...)";  
             $result = mysql_query($sql);   
            echo "Event Created"; //just used for testing purposes
            }  
    }                       

最佳答案

这有很多问题。

  1. 所有输入元素都必须在<form> 内.即,在开始输出复选框之前打开您的表单。无论如何,它可能适用于某些浏览器,但不是全部。我最近遇到这样的问题,只有表单中的数据会被提交,但这只发生在 Firefox 中。
  2. 将每个复选框的值设置为 friend ID;无需将其存储在隐藏元素中,然后再尝试匹配它。每个文本框的名称应与 [] 相同附加到它。例如,<input type="checkbox" value="428" name="friends[]" /> .这将导致 PHP 组织 $_POST为您将数据放入一个数组中,以便您可以轻松地遍历它。
  3. 不要将所有 friend ID 存储在数据库中的单个列中。这将使以后的查询成为一场噩梦。使用多对多表(如果不确定,请谷歌)。
  4. 这并不是真正的错误,但您的 HTML 结构也需要做更多的工作。更好的设计可能如下所示:

例子:

<ul>
    <li><label><input type="checkbox" value="428" name="friends[]" /> John Smith</label></li>
    <li><label><input type="checkbox" value="235" name="friends[]" /> Jane Doe</label></li>
</ul>

标签将使复选框更容易点击(可以点击标签上的任何地方),我相信它也让屏幕阅读器更容易。 <ul>在这里语义上更合适,因为它是您要输出的 friend 的列表

关于php - 循环中的复选框 - PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9106975/

相关文章:

JavaScript - 遍历对象以查找特定键值

java - getter、setter 和循环

php - 是否有任何插件可以将缩略图等图像扩展到一些大尺寸?

java - 并发修改异常 : Why does removing the null in List throw this Exception if it´s not the first variable

php - 在 PHP 中将整数转换为字母数字序列

mysql order by MIN() where NOT NULL

mysql - 选择前三个值按列排序

php - 关系表MYSQL

php - 如何防止在预订系统上添加两次

php - 在 PHP 中, 'assign by reference' 如何与这个新的 stdclass 一起使用?