【问题标题】:Problems updating mySQL DB更新 mySQL 数据库的问题
【发布时间】:2011-10-13 21:40:46
【问题描述】:

好的,所以我已经成功地从我的数据库中检索到我有字段的行:

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

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

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

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

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

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

发生的情况是,当我选中一些复选框然后提交表单时,如果我选中 event1 的 LAST 复选框,它总是我数据库中的前几条记录得到更新,然后我转到我的数据库并且它是只有更新的第一条记录的 event1 字段。我在这里做错了,我猜这与我上面提供的信息有关。有人可以帮忙吗?此外,对于复选框值,我有“1”所以想法是如果它被选中,则用 1 更新 event1,2,3 字段。

谢谢

【问题讨论】:

  • 抱歉,Markdown 出现了奇怪的格式!

标签: php mysql database arrays checkbox


【解决方案1】:

如果我理解正确,您有一个大约 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'>

【讨论】:

    【解决方案2】:

    如果我按照您在此处尝试执行的操作,我认为您正在尝试收集一组选中的复选框。考虑以下几点:

    <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。然后提交的数组的值将对应于选择的选项。

    【讨论】:

      【解决方案3】:

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

      将表单输入命名为“event[]”(或任何其他带括号的名称)的想法是 PHP 会将其解释为数组。这样,您可以在单个(数组)值中拥有整个系列的输入。如果您每个人都以不同的方式命名它们是没有意义的。我认为这样做更好,但你不能使用括号。

      【讨论】:

        【解决方案4】:

        每一行的 HTML 可能如下所示:

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

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

        $event1 = $_POST['event1'];
        

        现在,您可以遍历 $event1 数组,其中的键对应于选中复选框的 ID。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-25
          • 2011-12-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-05
          相关资源
          最近更新 更多