【问题标题】:checkboxes in loop - PHP循环中的复选框 - PHP
【发布时间】:2012-02-02 03:55:41
【问题描述】:

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

这里的输出显示了一个包含用户、他们的位置和一个复选框的列表。我希望能够选中该复选框,然后根据他们的 userID($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
            }  
    }                       

【问题讨论】:

  • 这里是否缺少一些代码?您提供的代码中没有循环。
  • 我在原帖中更新了我的代码。很抱歉造成混乱。

标签: php mysql loops checkbox


【解决方案1】:

这有很多问题。

  1. 所有输入元素都必须在&lt;form&gt; 内。即,在开始输出复选框之前打开表单。无论如何,它可能在某些浏览器中工作,但不是全部。我最近遇到了这样的问题,只有表单中的数据会被提交,但这只发生在 Firefox 中。
  2. 将每个复选框的值设置为好友ID;无需将其存储在隐藏元素中,然后再尝试匹配它。每个文本框的名称应与附加的[] 相同。例如,&lt;input type="checkbox" value="428" name="friends[]" /&gt;。这将导致 PHP 为您将 $_POST 数据组织到一个数组中,以便您可以轻松地循环它。
  3. 不要将所有好友 ID 存储在数据库的单个列中。这将使它成为以后查询的噩梦。使用多对多表(如果不确定,请使用 Google 搜索)。
  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>

标签将使复选框更易于单击(可以单击标签上的任何位置),我相信它也使屏幕阅读器更容易。 &lt;ul&gt; 在语义上更适合这里,因为它是您要输出的朋友的列表

【讨论】:

  • 感谢您的提示。我更新了上面的代码并尝试按照您所说的去做。我不确定我是否正确设置了表单。我很确定我能够让复选框部分正常工作。
【解决方案2】:

将复选框设置为数组

HTML

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

PHP(在后期检查中)

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

如果两者都被选中,则结果

1~2

【讨论】:

  • 复选框是根据朋友的数量从循环中生成的。我无法设置预先确定的框数,因为每个用户很可能有不同数量的朋友。
  • 您可以根据需要创建动态html(复选框)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-09
  • 2019-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-08
相关资源
最近更新 更多