#php
#php
Вопрос:
в следующем коде я хотел бы получить результат строки для столбца «id» в качестве результата для $selectedmovieid. ‘commenid’ является атрибутом первичного ключа. Извините, что не знаю, как правильно использовать mysql_fetch_assoc.
<?php
require ("connect-comment.php");
$deleteid=$_GET['commentid'];
$query1=mysql_query("SELECT id FROM comment WHERE commentid='$deleteid'");
$selectedmovieid= mysql_fetch_assoc($query1);
$query2=mysql_query("DELETE FROM comment WHERE commentid='$deleteid'");
header("Location: reload.php?id=$selectedmovieid");
?>
РЕДАКТИРОВАТЬ 1: я сделаю внедрение системы безопасности намного позже, просто нужно правильно настроить синтаксис и получить правильный результат. Итак, это то, что я сделал до сих пор:
<?php
require ("connect-comment.php");
$deleteid=$_GET['commentid'];
$query1=mysql_query("SELECT id FROM comment WHERE commentid='$deleteid'");
while ($selectedmovieid= mysql_fetch_assoc($query1))
{echo $selectedmovieid['id'];};
$query2=mysql_query("DELETE FROM comment WHERE commentid='$deleteid'");
header("Location: reload.php?id=$selectedmovieid");
?>
Теперь это не имеет для меня особого смысла, потому что я не разбираю правильное $selectedmovieid
значение в reload.php?id=
Комментарии:
1. Если вы введете,
http://php.net/
а затем имя функции, о которой вам нужна информация, вы попадете на страницу в руководстве по PHP. В руководстве почти всегда будет приведен пример. php.net/mysql_fetch_assoc2. Ой. Так много несанкционированного пользовательского ввода … вы никогда не должны вставлять что-то, взятое у пользователя (особенно не GET parameters), в оператор SQL. И выяснить, как
mysql_fetch_assoc()
это работает, на самом деле не должно быть слишком сложной задачей. Просто посмотрите это в документации.3. Чтобы уточнить, что означает Till: php.net/manual/en/security.database.sql-injection.php
4. 1 @TillHelgeHelwig, особенно в
DELETE
заявлении — что, если я запрошуhttp://yourdomain.tld/yourpage.php?commentid=1' OR '0' = '0
?
Ответ №1:
Попробуйте изменить
$deleteid=$_GET['commentid'];
// ...
header("Location: reload.php?id=$selectedmovieid");
Для
$deleteid = mysql_real_escape_string($_GET['commentid']);
// ...
header("Location: reload.php?id={$selectedmovieid['id']}");
Кроме того, как справедливо предлагает Пекка, попробуйте прочитать страницу руководства mysql_fetch_assoc()
и ознакомиться с SQL-инъекцией.
В качестве примечания, вы не должны использовать относительные пути для Location:
перенаправления заголовка. В RFC указано, что это поле должно содержать полный URL-адрес, и, хотя многие браузеры правильно интерпретируют относительные пути, на это поведение не следует полагаться. Другими словами, Location: reload.php?id=...
должно быть Location: http://mysite.tld/reload.php?id=
РЕДАКТИРОВАТЬ Попробуйте эту полную версию вашего примера кода:
<?php
require ("connect-comment.php");
$deleteid = mysql_real_escape_string($_GET['commentid']);
// Added LIMIT 1 to the query, because you are only using one result
if (!$query1 = mysql_query("SELECT `id` FROM `comment` WHERE `commentid` = '$deleteid' LIMIT 1")) {
// Do NOT show the output of mysql_error() to the user in a production environment!
exit("Something went wrong with query 1: ".mysql_error());
} else if (mysql_num_rows($query1) < 1) {
exit("No results from query 1");
}
$selectedmovieid = mysql_fetch_assoc($query1);
$selectedmovieid = $selectedmovieid['id']; // $selectedmovieid now contains the id you want
if (!$query2 = mysql_query("DELETE FROM `comment` WHERE `commentid` = '$deleteid'")) {
// Do NOT show the output of mysql_error() to the user in a production environment!
exit("Something went wrong with query 2: ".mysql_error());
}
// If we get this far, everything should be fine
// You still need a full URL here though, not a relative path...
header("Location: reload.php?id=$selectedmovieid");
?>