循环中的复选框 - PHP

时间:2012-02-02 03:55:42

标签: php mysql loops checkbox

我正在尝试使用复选框将用户添加到特定组,但我无法准确确定逻辑的工作原理。用户列表是从sql语句中提取的,并且是echo。我想在每个名称旁边显示一个复选框,如果选中该框,则使用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
            }  
    }                       

2 个答案:

答案 0 :(得分:3)

将复选框设置为数组

HTML

<input type="checkbox" value="1" name="myVariable[]" />
<input type="checkbox" value="2" name="myVariable[]" />

PHP(在检查后)

$stringToInsert = implode("~",$_POST['myVariable']);

检查两者的结果

1~2

答案 1 :(得分:3)

这有很多问题。

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

    <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>在语义上更合适,因为它是您尝试输出的朋友的列表