Лучший способ сделать это, чтобы добавить идентификатор сообщения кнопке следующим образом:
<input type="image" src="delete.png" name="delete;<?=$row['MessageId'];?>" />
Это даст что-то вроде:
<input type="image" src="delete.png" name="delete;1" />
<input type="image" src="delete.png" name="delete;2" />
Теперь, представленные данные будет включать только имя используемой кнопки отправки. При нажатии на кнопку с «удалить; 1», print_r($_POST)
дает:
Array
(
[delete;1_x] => 25
[delete;1_y] => 9
)
Если нажать на изображение с «удалить; 2», только «удалить; 2» будет размещена. Таким образом, вы знаете, какой образ был нажат и что удалить.
Вещь с использованием изображений в качестве кнопки отправки заключается в том, что вы также получаете координаты того, где вы нажали на это изображение. Но это не проблема, вы можете легко извлечь идентификатор сообщения:
// when submitted, go through all the submitted values
foreach ($_POST as $key => $value) {
// if a key starts with 'delete;', you know a delete image was clicked
if (substr($key,0,7)=='delete') {
// first remove the 'delete;' part
$key = str_replace('delete;','',$key);
// split the key on the '_' sign
$key = explode('_',$key);
/* now the $key variable is an array
Array
(
[0] => 1
[1] => x
)
*/
// and the first value is your message Id
$deleteId = $key[0];
// now validate that it's a number
if (preg_match('/^[0-9]+$/',$deleteId,$matches) {
// run your delete query
$sql = "DELETE FROM messages WHERE id = $deleteId";
mysql_query($sql);
}
// break the foreach loop, since you have what you need
break;
}
}
Это, как правило проще, когда вы не используете изображения, так как вы можете просто разделить размещенное значение на например, ";" и вам не нужно беспокоиться о координатах. Но это по-прежнему очень простой способ получить правильную информацию и сохранить ваш HTML чистый, добавив простой идентификатор к имени кнопки изображения.
Две вещи, которые следует учитывать: во-первых, придать каждой форме уникальный идентификатор. Как бы то ни было, вы повторно объявляете ввод с именем «do_insert2» один раз для каждой формы на странице, и поэтому, не зная, что каждая форма должна обрабатываться отдельно, многие браузеры могут просто использовать самый последний do_insert2, чтобы определить, какое значение отправить. Кроме того, попробуйте просто повторять '$ row [" MessageId "]' на каждой итерации цикла, чтобы убедиться, что он имеет ожидаемые значения. – stevendesu