2015-05-03 2 views
0

Хорошо. У меня теперь работает PHP-код. Спасибо за предложения. Оказалось, что это не цитата вокруг струны.PHP проблема с удалением только одной учетной записи

PHP говорит, что он работает, но когда я перехожу в базу данных mySQL, запись все еще существует. Что может продолжаться?

(измененная версия) Я пытаюсь удалить одну учетную запись пользователя из записи, содержащей много. Я могу заставить PHP удалить все записи, и я получаю PHP, чтобы повторить учетную запись, которую я хочу удалить, однако у меня возникают проблемы с объединением двух вещей. Я думаю, это потому, что я все еще борется с основным пониманием синтаксиса. На данный момент я пробовал много комбинаций, и никто не работал.

код ниже:

//echo "{$_SESSION['email']}"; 

$id="{$_SESSION['email']}"; 
$sql="DELETE FROM users WHERE user_id=user_id"; 



if ($con->query($sql) === TRUE) { 
    echo "Record deleted successfully"; 
} 
else { 
    echo "Error deleting record: " . $con->error; 
} 

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

+5

у вас есть '$ SQL = "DELETE FROM пользователей WHERE user_id = user_id";', но вы имели в виду, чтобы сделать '$ SQL = "DELETE FROM пользователей WHERE user_id = $ идентификатор";' -> '= $ id', а не '= user_id'. Кроме того, поскольку '$ id' является строкой (' $ _SESSION ['email'] '), вам нужно обернуть ее в кавычки -' $ sql = "DELETE FROM users WHERE user_id = '$ id'"; ' – Sean

+0

И Я продолжал задаваться вопросом, почему $ id не будет работать. Это была одна из моих многочисленных попыток. Проблема заключалась в отсутствии кавычек вокруг строки. Понял. Однако, когда я это делаю, он говорит, что удаление было успешным, но запись в базе данных mySQL все еще существует. Что может быть? (Я собираюсь перезагрузить компьютер на всякий случай. Перезапуск, похоже, устраняет многие проблемы, с которыми я сталкиваюсь с MySQL Workbench). – Hmcka

+0

Если он говорит 'Запись удалена успешно', но строка все еще существует, то она не находит строку для удаления с помощью' user_id = $ _ SESSION ['email'] '. Вы уверены, что используете адрес электронной почты для 'user_id', а не' user_email'? – Sean

ответ

0

В запросе вы указываете базе данных, чтобы удалить любого пользователя, где user_id равно значению упомянутого user_id. Вы никогда не передаете идентификатор в запрос.

Это означает, что вы сообщаете базе данных, чтобы удалить все записи, у которых есть свои user_id, как user_id. Это все.

Используйте подготовленный оператор и передайте вместо этого переменную $id.

$id= $_SESSION['email']; // Don't need the "". 
//And make sure that it is a email that you are after, cause the the value of this should be a email address. 
$sql = "DELETE FROM users WHERE user_id=:id"; 
$stmt = $con->prepare($sql); 
$stmt->bindParam(':id', $id); 
$stmt->execute(); 

Теперь вы можете задаться вопросом, почему вы должны использовать подготовленные заявления вместо простого запроса?
Ну, я бы предположил, что ваш параметр сеанса выбирается из некоторого типа пользовательского ввода. Когда дело доходит до ввода пользователя, это может быть почти что угодно, а не только то, что вы ожидаете.
Если вы просто выполняете необработанный запрос, а значение параметра сеанса является злонамеренным, это приведет к чему-то, что называется sql injection. И это не хорошо.
Подготовленные заявления предоставят вам защиту от SQL-инъекций.

Для получения дополнительной информации об этом, «подготовленные заявления и SQL-инъекции» Google.

0
$id="{$_SESSION['email']}"; 
$sql="DELETE FROM users WHERE user_id='$id'"; 



if ($con->query($sql) === TRUE) { 
    echo "Record deleted successfully"; 
} 
else { 
    echo "Error deleting record: " . $con->error; 
} 

Необходимо указать идентификатор, который вы хотите удалить.

+0

'$ id' - это строка ->' $ _SESSION ['email'] ', поэтому ее необходимо обернуть в кавычки. – Sean

+0

перемещение' $ id' внутри двойных кавычек - это то же самое, что и компиляция в конце/вне двойные кавычки, поэтому ваше изменение ничего не изменило. Это должно быть '' УДАЛИТЬ ОТ пользователей WHERE user_id = '$ id' ";' ИЛИ '" УДАЛИТЬ ОТ пользователей WHERE user_id = '". $ Id."' ";" Обратите внимание на одинарные кавычки '' 'вокруг' $ id'? – Sean

+0

Хорошо. Спасибо. Я новичок в программировании на PHP. –

0

Прежде всего, необходимо получить идентификатор из электронной почты, как это: -

$kl = mysqli_query("SELECT * FROM users where user_email='$id'"); 
while($row = mysqli_fetch_array($kl)){ 
$user_id = $row['id']; 
} 

// вы получили идентификатор пользователя сейчас;

$sql="DELETE FROM users WHERE user_id=$user_id"; 
if($sql){print '<script>alert('Success')</script>';} 
+1

Ваш предполагаемый адрес электронной почты не является идентификатором, который из текущего запроса пользователя будет. Кроме того, если это было решение, запрос будет быстрее. 'DELETE FROM users WHERE user_id = (SELECT id FROM users, где user_email = '$ id')' – chris85

+0

да, я просто пропустил, что у него был более простой способ, но я сделал это с помощью самых фундаментальных шагов, которые также помогут в обучении, он может также редактировать другие вещи при удалении обновления somethings и других. –

Смежные вопросы