PHP在具有相同名称时选择哪个按钮?

时间:2015-12-03 21:22:33

标签: php forms

我试图用php创建一个非常简单的博客。我的代码片段只生成一个磁贴,文本和作者以及一个编辑按钮 因为我正在使用数组中的数据,所以我用for读取它。 现在,当我想要编辑帖子时,它应该带我进入网站editpost.php但是如何标记哪个按钮属于哪个博客帖子?
我是否需要为每个新帖子生成新表单?

  echo '<form id=\"myform\" name=\"myform\" method=\"GET\">';
for ($i = count($liste) ; $i >= 0 ; $i--){
    echo '<p>';
    echo '<h2>'.$blogs[$i][0].'</h2><br>';
    echo $blogs [$i][1].'<br>';
    echo 'Autor:'.$blogs [$i][2].'<br>';
    echo '</p>';
    if($_SESSION['email'] == $blogs[$i][2]){
    echo '<input type=\'submit\' name=\'updatepost\' value="Edit Post">';}
    if (isset($_GET['updatepost'])){
        header ( 'Location: editPost.php' );
    }
}
echo '</form>';

3 个答案:

答案 0 :(得分:4)

PHP不会“选择”任何东西。它们严格按照它们在HTTP请求中出现的顺序进行处理,从头到尾。

浏览器USUALLY以严格的html定义顺序发送内容 - 字段在html中显示的顺序是它们将被发送出去的顺序。

这也意味着如果您发送多个具有相同名称的字段,您将最终获得这些重复字段的最后一个值。这就是为什么PHP有[]命名黑客的原因。请注意以下(不完全有效)HTML:

<input name="foo" value="bar" />
<input name="foo" value="baz" />
<input name="abc[]" value="def" />
<input name="abc[]" value="ghi" />
<input name="pqr[stu]" value="vwx" />

如果将此提交到PHP脚本,您将最终得到以下内容:

$_POST = array(
   'foo' => 'baz'   // note: baz is the LAST value in the form with this name
   'abc' => array(
       0 => 'def',
       1 => 'ghi'
    ),
    'pqr' => array(
       'stu' => 'vwx'
    )
);

答案 1 :(得分:0)

我看到两个简单的解决方案:

  • 将您的<input>更改为简单链接并添加查询字符串,如下所示:echo '<a href=\'editPost.php?id='.$i.'\'>';在这种情况下,您不需要整个<form>代码。
  • 包含一个包含ID的隐藏<input>,如下所示:<input type="hidden" name="id" value="$i">。正如@VIDesignz所说,在这种情况下,您必须将<form>标记移动到for循环中,以便为每个帖子创建单独的表单。

我会说第一种方式更容易,因为你在这里所拥有的并不是真正的形式(带输入字段)。

答案 2 :(得分:0)

您还可以将值传递给每个提交,如下所示:

echo '<input type=\'submit\' name=\'updatepost['.$i.']\' value="Edit Post">';}
if (isset($_GET['updatepost'])){
    header ( 'Location: editPost.php?id='.key($_GET['updatepost']) );
}