更新mySQL DB时出现问题

时间:2011-10-13 21:40:46

标签: php mysql database arrays checkbox

好的,所以我已经成功检索了我的数据库中的行,其中包含字段:

ref,fname,lname,event1,event2,event3. 
ref is the ID (autonumber).

所以在我的索引php文件中,我从我的数据库中检索数据并存储在一个带有适当标题的表中,然后是100个名字。对于事件1事件2和事件3行,我有复选框。现在,我已经尝试了几个小时来捕获已选中的复选框并更新event1和/或event2和/或event3的db记录列。我认为我的错误是当我命名复选框时,我为每一行命名:

event1复选框我将event1[]命名为 event2复选框我命名为event2[]
event3复选框我命名为event3[]

......这重复了100次。当我提交表单时,我在post_submit.php文件中写了以下内容:

$event1[] = $_POST['event1'];
$event2[] = $_POST['event2'];
$event3[] = $_POST['event3'];

这显然是错误的,因为它不起作用。

当我检查一些复选框然后提交表单时,它总是我的数据库中的前几个记录得到更新,如果我检查event1的最后一个复选框,我去了我的数据库,它是仅更新第一条记录的event1字段。我在这里做错了,我猜这与我上面提供的信息有关。有人可以帮忙吗此外,对于复选框值,我有“1”,所以想法是更新event1,2,3字段,如果选中它,则为1。

由于

4 个答案:

答案 0 :(得分:2)

如果我理解正确,你有一个约100行的表格:

id, first name, last name, event 1, event 2, event 3

和事件1-3只是表格字段中的复选框。 如果你只是让event1 []的值为1或0(选中或取消选中)并且你发布了这个表单,那么提交屏幕将只有一个0和1的数组。它不会跟踪它来自哪一行。

建议:给你的event1-3 [] id的值。这样,您的事件数组将包含需要更新事件的ID。

因此,如果你有id = 3,那么请选中复选框:

<input type='checkbox' name='event1[]' value='3'>

答案 1 :(得分:1)

如果我按照您在此处尝试的操作,我认为您正在尝试收集已选中复选框的数组。请考虑以下事项:

<input type="checkbox" name="events[]" value="1" />
<input type="checkbox" name="events[]" value="2" />
<input type="checkbox" name="events[]" value="3" />
<input type="checkbox" name="events[]" value="4" />
<input type="checkbox" name="events[]" value="5" />

如果我检查1,2和5,print_r($_POST['events']);的结果将是这样的:

Array (
  0 => 1
  1 => 2
  2 => 5
)

因此,您要做的是为您的复选框提供所有相同的name=属性和不同的value=属性,这些属性对应于您希望从用户获取的事件ID。然后,提交的数组的值将对应于所选的选项。

答案 2 :(得分:0)

$event1[] = ...会为数组$event1添加一个值。如果$event1尚未包含数组,则会创建一个数组。我认为这是你问题的核心。

命名表单输入'event []'(或带括号的任何其他名称)背后的想法是PHP将其解释为数组。这样,您可以在单个(数组)值中包含一系列输入。如果你们每个人都有不同的名字,那就没有意义了。我认为最好这样做,但你不能使用括号。

答案 3 :(得分:0)

每行的HTML可能如下所示:

echo '<input type="checkbox" name="event1[' . $row['ref'] .']" value="1" />';

这会在将行提交到页面时将行的ID放入数组中,然后您可以从请求中检索该行:

$event1 = $_POST['event1'];

现在,您可以遍历$ event1数组,该数组将包含与已选中复选框的ID相对应的键。