2015-12-16 3 views
-1

У меня есть таблица, в которой представлены даты из разных таблиц, используя INNER JOIN.Удаление строки sql php

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

Доступ запрещен для пользователя (с помощью пароля: НЕТ)

Однако, мое подключение к конфигурации нормально.

$query="SELECT products.id, products.product_name, products.product_description, 
products.product_price, collections.collection_name, collections.collection_season, 
collections.collection_year 
FROM products 
INNER JOIN products_collections ON products.id = products_collections.product_id 
INNER JOIN collections ON collections.id = products_collections.collection_id 
ORDER BY products.product_price"; 

$result=mysqli_query($con,$query); 
while ($row=mysqli_fetch_array($result)){ 
echo "<tr><td>".$row["id"]."</td><td>".$row["product_name"]."</td> 
<td>".$row["product_description"]. 
"</td><td>".$row["collection_name"]."</td><td>".$row["collection_season"]."</td> 
<td>".$row["collection_year"]."</td><td>".$row["product_price"]. 
" USD</td><td><a href='table.php?del=$row[id]'>Delete</a></td></tr>"; 

} 
    if (isset($_GET['del'])){ 

    $id=$_GET['del']; 
    $s="DELETE FROM products WHERE id='$id'"; 
    $res=mysql_query($s) or die ("Failed ".mysql_error()); 
    echo "<meta http-equiv='refresh' content='0;url=table.php'>"; 
} 

    ?> 
+3

ли вы открыть соединение MySQL первым? Вы не можете просто запустить 'mysql_query()' без первого запуска 'mysql_connect()'. http://php.net/manual/en/function.mysql-connect.php – Ian

+1

Как вы подключаетесь к базе данных? – miken32

+1

В вашем первом запросе используется mysqli, и ваше удаление использует функции mysql_ *. Вы также не готовите свои заявления. Какую функцию вы используете? –

ответ

3

1.) Вы подключились к базе данных SQL?

2.) Ваш пользователь SQL аутентифицирован?

3.) Вы правильно опрошены к уникальным ряду и включал LIMIT?

DELETE FROM table WHERE id='987' LIMIT 1; 

4.) Ваш SQL пользователь имеет разрешения на использование DELETE команды в SQL?


Вау, только заметил, что вы не выделяющиеся данные! НИКОГДА НЕ ХОТИТЕ КЛИЕНТА !!!

MySQL API (Legacy, использование MySQLi ниже)

$id = mysql_real_escape_string($_GET['id']); 

MySQLi API

$id = mysqli_real_escape_string($database,$_GET['id']); 

Вы MUST пройти через все ваших запросов SQL в проекте (ы) и убедитесь, что вы избегаете все как атаки SQL-инъекций легко самый распространенный вопрос безопасности глобально. Любой может уничтожить все ваши данные в одном $_POST, если они чувствуют себя достаточно 14.

+0

Что делает побег в точности? Я не знаю, что вы имеете в виду с этим –

+1

. Я полностью согласен с вами в том, что вы не доверяете клиенту или какие-либо данные в этом отношении, но побег таким образом очень подвержен ошибкам и утомителен. Использование PDO и, возможно, функция-обертка, чтобы избежать повторения кода, - это МНОГО-лучший подход. Подготовка операторов и переменных привязки в основном является надежным способом избавиться от проблем SQL-инъекций. – Canis

+0

@KoenVanLooveren, полезно? - в столбце _Related'_ на этой странице возникает вопрос: [Как я могу предотвратить SQL-инъекцию в PHP?] (http://stackoverflow.com/questions/60174/how-can-i-prevent-sql -injection-в-PHP? RQ = 1). Он полон «хороших вещей» –

1

Первый: вы смешиваете mysql_query() и mysqli_query() звонки. Если вам нужно использовать mysql/mysqli stick для mysqli. «I» предназначен для «улучшения».

Во-вторых: Я бы действительно предложил вам использовать PDO-объекты, если сможете. МНОГО БОЛЬШЕ безопаснее использовать для защиты от SQL-инъекций. Никогда не доверяйте любой переменной, которую вы не жестко запрограммировали для ввода своих запросов. БЕЗ подготовки операторов и привязки переменных сначала.

Смотрите здесь:

PDO Tutorial for MySQL Developers

Why you should...

PHP.net reference

+0

Я иду прямо для ручного управления, потому что я никогда не доверял фреймворкам ... и когда я работаю с ними, я сразу же нахожу * дальнейшие * обоснования. Для более зеленых программистов да ... Я использую их при работе с другими, мне нравится, что они обрабатывают безопасность для greenhorn, хотя их код не интуитивно для меня лично. – John

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