Попытка удалить запись в базе данных, получить ошибку SQL, но не могу понять, как - PullRequest
2 голосов
/ 24 февраля 2012

Я делаю действительно простой скрипт для удаления строки из базы данных. Я сделал это раньше с почти идентичным кодом, но по какой-то причине это не сработает!

Viewmessages.php не имеет проблем с запуском, но когда я пытаюсь удалить строку с помощью deletemessage.php, я получаю сообщение об ошибке sql, у меня есть только одна строка sql:

viewmessage (отправка информации на deletemessage.php):

echo "<a href='deletemessage.php?contactname=".$contactname."'>Delete</a>";

Ниже приведен код сообщения об удалении:

<?php
session_start();
if ( !isset($_SESSION['adminusername']))
{
header("Location:admin.php");
exit();
}


require "dbconn.php";

$contactname = $_GET['contactname'];

$query = "DELETE FROM message WHERE contactname =".$contactname;

$results = mysql_query($query) or die(mysql_error());

header("Location: viewmessages.php");
?>

Я не могу понять, что это за ошибка! $ contactname в файле viewmessages.php определенно говорит о первичном ключе таблицы!

Есть идеи?>

РЕДАКТИРОВАТЬ: Я знаю, что проблема заключается в имени контакта в sql ... по какой-то причине он не получает его хорошо, я сделал эхо, чтобы увидеть, что это имя контакта, и это было правильно. Затем я изменил переменную и вставил строку из одного значения в имя контакта, и она правильно удалила строку ... так что проблема в GET _ ['имя контакта'], но я не уверен, что ....

Ответы [ 3 ]

4 голосов
/ 24 февраля 2012

Заключите $contactname в кавычки в запросе, так как это строка. Но сначала убеги! Он очень уязвим для внедрения SQL, как и сейчас. Я понимаю, что это может быть административная страница, но это очень хорошая привычка всегда наблюдать, даже если вашим пользователям доверяют. (Тем более, что Mr O'Malley нарушит оператор SQL, когда вы попытаетесь его удалить)

$concatname = mysql_real_escape_string($_GET['contactname']);
$query = "DELETE FROM message WHERE contactname ='".$contactname . "'";

Всегда остерегайтесь при удалении по гиперссылке. Похоже, вы проверяете права администратора, прежде чем разрешить это выполнение, но убедитесь, что эти ссылки не доступны широкому Интернету, , где они могут быть просканированы.

3 голосов
/ 24 февраля 2012

Дикая догадка здесь? $contactname это STRING. Поэтому он должен быть в кавычках в запросе. Кроме того, вы хотите, чтобы люди уничтожали вашу базу данных, по-видимому.

$query = "DELETE FROM `message` WHERE `contactname` = '".mysql_real_escape_string($contactname)."'";
1 голос
/ 24 февраля 2012

Вам нужно заключать в кавычки строку, которую вы вставляете.

$query = "DELETE FROM message WHERE contactname ='".$contactname."'";

Обратите внимание, что это МАССИВНО уязвимо для внедрения SQL.Кто-то может удалить всю таблицу базы данных с этим кодом в том виде, в каком он есть.

...