Какую кнопку выбирает PHP, если у них одинаковое имя?

1

Я пытаюсь сделать очень простой блог с 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
    Если у вас есть несколько элементов <input type="submit"> в одной форме, тот, который щелкнул по кнопке для отправки формы, будет единственным, который получит PHP.
  • 0
    Если вы не хотите использовать JavaScript, создайте уникальную форму для каждой кнопки отправки.
Показать ещё 2 комментария
Теги:
forms

3 ответа

4

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'
    )
);
  • 0
    Так что мне просто нужно добавить это так? <br> <input type = \ 'submit \' name = \ 'updatepost [] \' value = "Редактировать сообщение">
  • 0
    плюс обновите ваш код для обработки массива в $_POST['updatepost'] вместо одного значения.
0

Вы также можете передать значение для каждого представления следующим образом:

echo '<input type=\'submit\' name=\'updatepost['.$i.']\' value="Edit Post">';}
if (isset($_GET['updatepost'])){
    header ( 'Location: editPost.php?id='.key($_GET['updatepost']) );
}
  • 0
    Часть с идентификатором работает хорошо, но как я могу использовать идентификатор на следующей странице с $ id?
0

Я вижу два простых решения:

  • Измените свой <input> на простую ссылку и добавьте строку запроса, например: echo '<a href=\'editPost.php?id='.$i.'\'>'; В этом случае вам не нужен весь <form>.
  • Включите скрытый <input> содержащий идентификатор, например: <input type="hidden" name="id" value="$i">. Как говорит @VIDesignz, в этом случае вам нужно переместить тэг <form> в цикл for чтобы создать отдельную форму для каждого сообщения.

Я бы сказал, что первый способ проще, так как то, что у вас здесь, не является реальной формой (с полями ввода).

  • 0
    Второй вариант не будет работать, если они все в одной форме, нет способа определить, какая кнопка была нажата, без использования js.
  • 0
    Как я могу использовать идентификатор на следующей странице?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню