Избегайте наличия нескольких файлов удаления

У меня есть веб-страница с довольно большой CMS, где вы можете добавлять новости, добавлять изображения и другие вещи. И, конечно же, вы также можете удалить их.

Вы просто нажимаете «Удалить», и это приводит вас к скрипту удаления, который удаляет строку из таблицы. Проблема в том, что у меня есть 4-5 скриптов удаления, которые выглядят совершенно одинаково, за исключением того, что они удаляют из разных таблиц. Я хотел бы, чтобы таблица была переменной, которая отслеживает, с какой подстраницы пришел пользователь, поэтому мне понадобится только один сценарий удаления вместо нескольких.

Это кнопка, которую вы нажимаете, чтобы что-то удалить:

<a href='deletenews.php?id=<?php echo $id ?>'>DELETE</a>

Обратите внимание, что он удаляет "news".php, было бы неплохо, если бы это был просто delete.php.

Скрипт удаления выглядит следующим образом:

session_start();

if ($_SESSION['username']) {

    } else {
        include 'index.php';
        die ("<script> alert(You have to be logged in.');</script>");
    }

mysql_connect('localhost', 'username', 'password') or die (mysql_error());
mysql_select_db('database') or die (mysql_error());

mysql_query("DELETE FROM news WHERE id = '$_GET[id]'") or die(mysql_error());

header('Location: forside.php');

Я бы хотел, чтобы вместо "новости" была переменная. Как $удалить. Но эта переменная должна знать, из какой таблицы она должна удалять данные. Есть ли способ сделать это? Я готов изменить весь свой код для этого, потому что я думаю, что это лучшая практика.


person Lasse Stenløs    schedule 18.01.2014    source источник
comment
Тааак... если вы написали код, который работает для id, почему вы не можете воспроизвести тот же механизм для имени таблицы? Вы знаете, что можете отправить более одной переменной GET, верно? И вы знаете, что запрос mysql в PHP — это строка, верно?   -  person Sergiu Paraschiv    schedule 18.01.2014
comment
Я собираюсь стереть вашу базу данных... см. об инъекции   -  person Strawberry    schedule 18.01.2014
comment
Strawberry: Ну, это, вероятно, небезопасно, но вы должны войти в систему, чтобы вообще что-либо вводить, так что это не проблема. Сценарий входа в систему довольно безопасен. Я в процессе изучения PHP/SQL. Серджиу: Как бы вы это сделали?   -  person Lasse Stenløs    schedule 19.01.2014
comment
Опять же, в чем сложность использования $_GET['table'], а затем mysql_query("DELETE FROM " . $_GET['table'] . " WHERE id = '$_GET[id]'")?   -  person Sergiu Paraschiv    schedule 19.01.2014


Ответы (1)


Возможно, используйте эту проверку:

$id = (int)$_GET['id'];
if ($id)
    if ($table == 'news') {
        // do something
        mysql_query("DELETE FROM $table WHERE id = $id") or die(mysql_error());
        // or this:
        //mysql_query("DELETE FROM news WHERE id = $id") or die(mysql_error());
    } elseif ($table == 'posts') {
        // do something
        mysql_query("DELETE FROM $table WHERE id = $id") or die(mysql_error());
        // or this:
        //mysql_query("DELETE FROM posts WHERE id = $id") or die(mysql_error());
    } else {
        die("You can not delete records from $table table");
    }
}
person Victor Bocharsky    schedule 18.01.2014
comment
Дело не в этом. Я хочу, чтобы имя таблицы news было переменной. Например, УДАЛИТЬ ИЗ $таблицы, ГДЕ id = $id. Но мне нужно знать, как определить, что это за таблица. Потому что на этой странице можно удалить не только новости. - person Lasse Stenløs; 19.01.2014