PHP цикл, который создает кнопки X - PullRequest
0 голосов
/ 06 сентября 2011

Я создаю инструмент управления баннерами, который использует базу данных SQL для хранения своих данных после добавления. есть вкладка, которая показывает для каждого баннера в этой базе данных кнопку обновления и удаления. Эти кнопки создаются в цикле на основе PHP, поэтому у меня будет X кнопок обновления и удаления.

Теперь, в зависимости от того, какую кнопку я нажимаю, я перехожу в окно обновления элемента, по которому была нажата кнопка обновления.

Проблема, с которой я сталкиваюсь, поскольку все эти кнопки имеют одинаковое имя, заключается в том, что я не могу различить, какая кнопка была нажата. Каждый элемент в БД имеет свой ROWID, однако я не могу понять, как получить идентификатор, как только вы нажмете кнопку ...

Вот код того, как генерируются эти кнопки.

do {
    $entry = $dbase->querySingle("SELECT name FROM banners where ROWID='$currentRowNumber'");

    echo "<tr>";
    echo "<td width=\"50\">". $entry ."</td>";
    echo "</tr>";

    echo "<tr>";
    echo "<td><input type=\"submit\" name=\"operation\" value=\"Update\"></td>";
    echo "<td><input type=\"submit\" name=\"operation\" value=\"Delete\"></td>";
    echo "</tr>";

    $currentRowNumber++;

} while ($dbase->querySingle("SELECT name FROM banners where ROWID='$currentRowNumber'") != NULL);

Мне было интересно, есть ли у кого-нибудь идеи о том, как отличить эти кнопки. Может быть, скрытый фактор, который я могу прочитать ниже? (не знаю, существует ли такая вещь)

Привет

Ответы [ 2 ]

1 голос
/ 06 сентября 2011

Вы можете обернуть все операции для каждой строки в форму, имеющую input type="hidden" value="$id", содержащую идентификатор элемента, или использовать action="/update?id=$id" для формы, или, если вы хотите придерживаться одной большой формы, вы можете использоватьname="update[$id]" для кнопки отправки.

0 голосов
/ 06 сентября 2011

Во-первых, вместо того, чтобы называть кнопки общим термином типа «операция», я бы посоветовал вам называть их так, как они на самом деле делают, а именно «обновить» и «удалить». Это позволяет вам отделить функцию кнопки от того, какая метка отображается на кнопке.

<input type="submit" name="update" value="Update banner" />
<input type="submit" name="delete" value="Remove banner" />

Вы можете проверить, какая кнопка была нажата, используя array_key_exists или isset, чтобы определить, какая кнопка была нажата.

if (isset ($_POST ['update']))
{
}
else if (isset ($_POST ['delete']))
{
}
else
{
    // No button was pressed
}

Что касается определения того, на какой элемент ссылается кнопка, я предполагаю, что у всех ваших баннеров есть какой-то способ уникальной идентификации (первичный ключ, обычно числовое значение). Если вы используете синтаксис [квадратные скобки] в названии кнопки, вы можете определить строку для нажатой кнопки.

<input type="submit" name="update[1]" value="Update banner" />
<input type="submit" name="delete[1]" value="Remove banner" />
<input type="submit" name="update[23]" value="Update banner" />
<input type="submit" name="delete[23]" value="Remove banner" />
<input type="submit" name="update[153]" value="Update banner" />
<input type="submit" name="delete[153]" value="Remove banner" />

if (isset ($_POST ['update']))
{
    $rowToUpdate = key ($_POST ['update']);
}
else if (isset ($_POST ['delete']))
{
    $rowToDelete = key ($_POST ['delete']);
}
else
{
    // No button was pressed
}

Я использовал числа в качестве идентификаторов здесь, но вы можете использовать все, что вы используете, чтобы отличить один баннер от другого. Я сомневаюсь, что вы могли бы использовать знаки препинания или пробелы в своих идентификаторах, кроме подчеркивания, поэтому вам нужно помнить об этом. update[abc] и update[abc_def] должно быть в порядке, но я не могу поручиться за update[abc def] или update[abc-def]. В целом, использование числовых идентификаторов избавит вас от множества ненужных головных болей.

...