2013-11-16 2 views
0

Я пишу веб-сайт, где пользователи могут вводить файлы, а когда они нажимают кнопку «Удалить», я не хочу удалять его из базы данных. Это по причинам, которые слишком сложны для объяснения переполнения стека.Обновление MySQLi не работает

В любом случае, вместо того, чтобы мой запрос удалить, у меня есть ОБНОВЛЕНИЕ. Я запускаю сервер на Ubuntu Desktop 12.04. Когда я запускаю следующий код, я задаю запрос на страницу, чтобы я мог ее увидеть. Затем я копировал и вставлял этот запрос в phpMyAdmin, и он отлично работает.

Однако, когда я просто хочу, чтобы сайт выполнял запрос, он не работает. Любой совет?

$id = $_GET['id']; 
session_start(); 
$connect = mysqli_query('localhost', 'root', 'xxxxxxxxx', 'syllashare'); 
$query = "UPDATE `uploads` SET `deleted`='yes' WHERE `id`=$id"; 
echo var_dump($query); 
$run = mysqli_query($connect, $query); 
header('location: files.php'); 
+0

Может возникнуть проблема с подключением к базе данных. –

+2

Предотвращение внедрения SQL-инъекций; вы можете использовать mysqli_error() для запросов, где проблема, если таковая имеется. –

+0

Возможно ли, что я не получаю разрешения на использование root? – elliotanderson

ответ

3

Вы не сделать связь с mysqli_query, используйте mysqli_connect вместо этого.

И остерегайтесь SQL injection, используйте prepared statements, чтобы предотвратить это.

+0

спасибо, не могу поверить, я пропустил это. – elliotanderson

+0

Да, я, должно быть, печатал, чтобы поститься. Проблема была в том, что mysqli_query вместо mysqli_connect. Спасибо – elliotanderson

1
$connect = mysqli_query('localhost', 'root', 'xxxxxxxxx', 'syllashare'); 

Я предполагаю, что функция, которую вы ищете здесь mysqli_connect(), не mysqli_query().

Кроме того ...

$id = $_GET['id']; 
$query = "UPDATE `uploads` SET `deleted`='yes' WHERE `id`=$id"; 

Никогда когда-нибудь что-то отправляемое пользователем и сбросить его в запросе SQL. Вы делаете свой сайт уязвимым для SQL Injection. Все входные данные пользователя должны обрабатываться так или иначе. Вы можете использовать prepared statements или mysqli_real_escape_string(), но поскольку мы обрабатываем то, что, как я полагаю, является числом, вы должны отфильтровать его с помощью intval().

Кроме того, MySQLi поддерживает OOP, что помогает сделать код более чистым, понятным и содержательным, я предлагаю вам его использовать. Например:

$mysqli = new mysqli('localhost', 'root', 'xxxxxxxxx', 'syllashare'); 

$query = $mysqli->prepare("UPDATE `uploads` SET `deleted` = 'yes' WHERE `id` = ?"); 
$query->bind_param('i', $_GET['id']); 
$query->execute(); 
+0

вы знаете, mysqli_real_escape_string() не будет из * любой * help здесь –

+0

Не волнуйтесь, я не закончил с моим ответом. – Havenard

+0

"[...], но поскольку мы обрабатываем то, что, я полагаю, является числом, вы должны отфильтровать его с помощью intval()." Нет, вы можете (и должны) использовать подготовленное заявление для чисел, также, как вы ясно дали в своем примере. –

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