#php #mysql
#php #mysql
Вопрос:
У меня есть форма загрузки изображения, и она работает нормально.
Но под той же формой я хочу какой-то список изображений, где я могу удалить конкретное изображение, нажав на его кнопку X. Я написал код, и он работает, но он всегда удаляет первое изображение в списке, независимо от того, на какой X я нажимаю.
<form method="post">
<ul>
<?php
$host = "127.0.0.1"; //database location
$user = ""; //database username
$pass = ""; //database password
$db_name = ""; //database name
if(!$link = mysql_connect($host, $user, $pass)) {
echo "<p>error: ".mysql_error()."</p>";
} else {
mysql_select_db($db_name);
}
$selectAll = "SELECT image_name FROM home_images";
$doIt = mysql_query($selectAll);
// if(isset($_POST['delete'])) {
// mysql_query("DELETE FROM home_images WHERE image_name = ");
// }
?>
<?php while($result = mysql_fetch_array($doIt)) : ?>
<li style="display:inline; margin-right:10px">
<img src="<?php bloginfo('url') ?>/wp-content/uploads/<?php echo $result[0]; ?>" height=50 width=60 />
<input type="hidden" value="<?php echo $result[0]; ?>" name="imagename" />
<input type="submit" value="X" name="delete" />
</li>
<?php endwhile; ?>
<?php
if(isset($_POST['delete'])) {
$imagename = $_POST['imagename'];
$deleter = "DELETE FROM home_images WHERE image_name = '$imagename'";
if(mysql_query($deleter)) {
echo "Successful!";
echo $imagename;
} else {
echo mysql_error();
}
}
?>
</ul>
</form>
Что я здесь делаю не так?
Комментарии:
1. Попробуйте проверить, что
$imagename
находится прямо перед SQL-запросом, который удаляет, и убедитесь, что это правильно для каждого изображения.
Ответ №1:
Проблема в том, что вы помещаете все в одну и ту же форму. Когда форма содержит несколько полей с одинаковым именем, она отправляет только одно из них.
Создайте отдельную форму для каждой кнопки удаления:
<?php while($result = mysql_fetch_array($doIt)) : ?>
<li style="display:inline; margin-right:10px">
<form method="post">
<img src="<?php bloginfo('url') ?>/wp-content/uploads/<?php echo $result[0]; ?>" height=50 width=60 />
<input type="hidden" value="<?php echo $result[0]; ?>" name="imagename" />
<input type="submit" value="X" name="delete" />
</form>
</li>
<?php endwhile; ?>
Кстати, у вас огромная проблема с безопасностью SQL-запроса. Всегда очищайте входящие данные.
Комментарии:
1. В случае с OP не имело бы смысла удалять последнее изображение вместо первого, потому что разве PHP не сохранил бы только последнее значение нескольких входных данных с одинаковым именем?
2. Спасибо, именно то, что мне было нужно. Я согласен, что это ужасно с точки зрения безопасности, но это всего лишь простое тестирование, я застрял с этим на некоторое время.
Ответ №2:
Если вам нужно решение, не основанное на javascript, вы могли бы использовать множественную форму, предложенную Юханой. Или, если вам нужна единая форма, тогда вы могли бы добавить переключатель (или даже флажки для множественного выбора) под каждым изображением, а затем иметь единственную кнопку отправки для удаления вашего выбора (ов).
<?php while($result = mysql_fetch_array($doIt)) : ?>
<li style="display:inline; margin-right:10px">
<img src="<?php bloginfo('url') ?>/wp-content/uploads/<?php echo $result[0]; ?>" height=50 width=60 />
<div <!--some kind of formatting here i suppose-->>
<input type="radio" value="<?php echo $result[0]; ?>" name="imagename" />
</div>
</li>
<?php endwhile; ?>
<?php
if(isset($_POST['delete'])) {
$imagename = $_POST['imagename'];
$deleter = "DELETE FROM home_images WHERE image_name = '$imagename'";
if(mysql_query($deleter)) {
echo "Successful!";
echo $imagename;
} else {
echo mysql_error();
}
}
?>