【问题标题】:How to submit and handle values from a form inside a table如何从表格中的表单提交和处理值
【发布时间】:2014-10-08 09:47:47
【问题描述】:

我有一个包含任意数量行的 HTML 表,每行有 4 列。这个想法是让用户编辑任何这些行,然后保存结果。然后应将这些更改保存到数据库中。但我有几个问题。

我在 stackoverflow 上找到了一些帖子,说明了您应该如何处理这个问题,但在我的情况下没有一个非常有用。这是用户编辑我的表格时的样子(虽然我现在只有一行,但可以有好几行)。

当然还有一个提交按钮,它将我带到一个名为“handle_edit.php”之类的 php 文件。

现在another post on stackoverflow 关于这个主题表明我应该使用某种 foreach 循环来编辑我的 HTML 表中每行的 SQL 表中的一行。我在“handle_edit.php”中的这个循环版本现在看起来像这样:

foreach( $_POST['appearances'] as $appearances ) {
    $goals = $_POST['goals'];
    $assists = $_POST['assists'];
    $name = ??????? //How to I do this?

    mysqli_query($connection, "UPDATE players
                            SET appearances=$appearances, goals=$goals, assists=$assists
                            WHERE name=$name");
}

首先。 foreach 循环需要包含一个数组表达式,编译器告诉我现在不是这种情况。但我不知道如何计算行数。在我上面链接的线程中,他们正在做与此类似的事情,但我认为我不完全理解他们在做什么,因为我的 foreach 循环不起作用。

其次,由于表中的名称列不是输入字段,我不知道如何将其与其余信息一起发送到此页面。我需要以某种方式执行此操作,因为我想根据提供的名称确定要编辑的行。这个 SQL 表中的每个玩家都有一个唯一的玩家 ID,我可以使用它吗?

我可能以错误的方式处理这个问题吗?有没有更可行的解决方案?

如果您需要任何其他代码,请告诉我。

提前致谢!

【问题讨论】:

  • 是的,你走错路了。你需要学习 1.隐藏输入字段 2.数据库主键 3.sql 注入,可能还有更多..

标签: php html sql sql-update html-table


【解决方案1】:

首先是名称变量。 您需要将<input type='hidden' name='name' value='<*YOUR WAY OF GETTING THE NAME*>'/> 添加到您的表单中。如果这样做,您可以使用$_POST['name'] 在foreach 循环中获取名称的值。有关如何为 php 制作表单的更多信息,请查看此处:http://www.w3schools.com/php/php_forms.asp

其次,你使用的sql字符串是错误的。您不能在字符串中输入变量名称。我建议先这样声明 sql 字符串:

$sql = "UPDATE players SET appearances=" . $appearances . ", goals=" . $goals . ", assists=" . $assists . " WHERE name=". $name;

然后建立连接并像这样执行查询:

mysqli_query($connection, $sql);

对于 foreach 问题,我建议使用var_dump() 方法进行调试,看看你是否真的用$_POST['appearances'] 得到一个数组。

我希望这会有所帮助。

【讨论】:

  • 当然,使用隐藏字段解决了第二个问题。谢谢! var_dump() 告诉我 $_POST['appearances'] 确实不包含数组,我有点怀疑。我尝试这样做的唯一原因是因为他们在这个线程中使用了它:stackoverflow.com/questions/14890509/…。但我猜一个复选框的工作方式不同。所以,如果那没有给我行数,我怎么能得到它?由于$_POST[value] 似乎只给了我最后一行,我如何在不同的行上获取所有不同的值?
  • 通过在输入字段的名称中添加数组括号 ([]) 解决了我的第一个问题。例如。为我的外观输入字段写name="appearances[]"而不是name="appearances"。这会将$_POST['appearances'] 转换为包含每行值的数组。然后我可以通过$appearances = $_POST['appearances'] 之类的方法访问这些不同的值,例如通过$appearances[0] 从索引0 中获取值。由于尼克回答了一个问题,而我自己回答了第二个问题,我应该将尼克的答案标记为答案还是将此评论发布为答案?
  • 您确实可以将其标记为anwer。由于您在 cmets 中将您的答案发布到我的答案中,因此遇到相同问题的人也会阅读它。
猜你喜欢
  • 1970-01-01
  • 2013-03-05
  • 1970-01-01
  • 1970-01-01
  • 2013-08-20
  • 2016-11-10
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
相关资源
最近更新 更多