我试图用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>';
答案 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>
代码。<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']) );
}