получение значения строки из столбца «id»

#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_assoc

2. Ой. Так много несанкционированного пользовательского ввода … вы никогда не должны вставлять что-то, взятое у пользователя (особенно не 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");

?>