Я пытаюсь сделать очень простой блог с 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>';
PHP ничего не "выбирает". Они обрабатываются строго в том порядке, в котором они отображаются в HTTP-запросе, от первого до последнего.
Браузеры USUALLY отправляют вещи в строгом порядке определения html - порядок, в котором поля отображаются в html, - это порядок, в котором они будут отправлены.
Это также означает, что если вы отправляете несколько полей с тем же именем, вы получите значение LAST из этих повторяющихся полей. Вот почему 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'
)
);
$_POST['updatepost']
вместо одного значения.
Вы также можете передать значение для каждого представления следующим образом:
echo '<input type=\'submit\' name=\'updatepost['.$i.']\' value="Edit Post">';}
if (isset($_GET['updatepost'])){
header ( 'Location: editPost.php?id='.key($_GET['updatepost']) );
}
Я вижу два простых решения:
<input>
на простую ссылку и добавьте строку запроса, например: echo '<a href=\'editPost.php?id='.$i.'\'>';
В этом случае вам не нужен весь <form>
.<input>
содержащий идентификатор, например: <input type="hidden" name="id" value="$i">
. Как говорит @VIDesignz, в этом случае вам нужно переместить тэг <form>
в цикл for
чтобы создать отдельную форму для каждого сообщения.Я бы сказал, что первый способ проще, так как то, что у вас здесь, не является реальной формой (с полями ввода).
<input type="submit">
в одной форме, тот, который щелкнул по кнопке для отправки формы, будет единственным, который получит PHP.