2015-05-29 5 views
0

В MySQL У меня есть несколько пользователей, когда я хочу, чтобы удалить пользователь, я использую следующий код:Удалить идентификатор из MySQL

<td><b><a href='.?control=directeur&action=verwijderGebruiker&id=".$leerling->getId()."'><img src='img/delete.png' /></a></b></td> 

В моем контроллере:

private function verwijderAction() 
{ 
     $this->model->verwijderGebruiker(); 
     $this->forward('default','directeur'); 
} 

И в моей модели :

public function verwijderGebruiker() 
{ 
    $id = filter_var($_REQUEST['id'], FILTER_VALIDATE_INT); 

    if($id!=false) 
    { 
    $sql = 'DELETE FROM `contacten` WHERE `id`=:id'; 
    $stmnt = $this->db->prepare($sql); // bereid de query voor 
    $stmnt->bindParam(':id',$id); // bindParam = verbindt de parameter: ":<parameter>" met de "<variable>". 
    $stmnt->execute(); // voert de query uit 
    } 
} 

Когда я хочу, чтобы удалить идентификатор он говорит правильные вещи в URL (action=verwijderGebruiker&id=5) но не удаляет его, а не его возвращается на главную страницу.

+2

нет логики для перехода на главную страницу. Отсутствует ли какой-либо код? – Raptor

+1

изменить запрос sql как '$ sql = 'УДАЛИТЬ ОТ contacten WHERE id =: id';' и проверить пожалуйста. –

+0

@anantkumarsingh он по-прежнему не удаляет его – Blank

ответ

0

Ваш id никогда не попадает внутрь вашего метода. вы должны передать его в вашу функцию в качестве параметра:

public function verwijderGebruiker($id) 
{ 
    $id = filter_var($id, FILTER_VALIDATE_INT); 
    // .... 
} 

//call it outside your class with your request-variable: 
$my_class = new MyClass(); 
$my_class->verwijderGebruiker($_REQUEST['id']); 
+0

все еще не работает, и я понятия не имею, почему это не – Blank

+0

@Blank, пожалуйста, покажите мне код, в котором ваш класс получает инстанс, и ваш метод (ы) получает вызов! –

0

Хотя вы должны проверить значение в $ ид перед тестированием если он = ложь есть более фундаментальные проблемы: изменение значений базы данных на основе параметров, которые вы получаете из URL-адреса может позволить кому-то продолжать использовать разные значения в URL-адресе и тем самым изменять значения базы данных.

Вы можете быть удаление записей молча, или вы не можете делать ничего, в зависимости от значения, подключенного к вашему URL на $ leerling-> GetId()

Я думаю, что $ ID, вероятно, не имеет значения в нем. Тест, вероятно, молча не может сказать ничего, поскольку он оценивает значение false, и никакое обновление БД не может следовать.

Что еще более важно: $ id должен быть отправлен в POST, а не в запросе GET.

См: http://www.wikiwand.com/en/Hypertext_Transfer_Protocol#/Request_methods

с помощью GET должен получать только данные и не должны иметь никакого другого эффекта.

В противном случае URL-адрес может быть отправлен с большим количеством последовательных идентификаторов и записей, измененных в вашей базе данных, сбой в кошмаре!

Кроме того, ваш тест не только должен гарантировать, что значение $ id имеет значение, но это запись DB, которую можно удалить и вернуть результат, поймав любые ошибки.