2014-10-29 2 views
-1

Я пытаюсь сделать INSERT INTO работой.INSERT INTO не добавляет ничего в базу данных

if (isset ($_POST['send'])){ 
mysql_query('INSERT INTO msg (message, receiver, sender) VALUES ("'.$_POST["message"].', '.$_GET["user"].', '.$sendernick["nick"].'") '); 
} 

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

Чтобы увидеть ошибки, я добавил это, но ничего не появляется:

error_reporting(E_ALL); 
ini_set('display_errors','1'); 
+1

Вы подключены к базе данных? Кроме того, ваши VALUES - это в основном одна длинная строка. вам нужно изучить эти цитаты –

+0

Две вещи: 1. Ваш запрос может быть уязвим для атак SQL-инъекций. [Читайте это] (http://bobby-tables.com) для получения информации о том, что они есть и как их предотвратить. 2. Не используйте 'mysql_', используйте' mysqli_' – Barranka

+0

ОК, спасибо, ребята! – Helloitsme

ответ

1

Вы забыли двойные кавычки:

mysql_query('INSERT INTO msg (message, receiver, sender) VALUES ("'.$_POST["message"].'", "'.$_GET["user"].'", "'.$sendernick["nick"].'")'); 

Кроме того, прочитайте о параметре связывания и инъекции SQL How can I prevent SQL injection in PHP?.

+0

Он работает, спасибо! – Helloitsme

1

Вам следует избегать использования функций mysql_*, поскольку они устарели и больше не поддерживаются! Вместо этого рассмотрите возможность использования PDO, поскольку он обеспечивает общий способ подключения ко всем типам баз данных. Mysqli_* функции также являются опцией, но это ограничит вас только использованием MySQL.

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

// connect.php 
$db_host = '127.0.0.1'; 
$db_user = 'user';  
$db_pass = 'pass'; 
$db_name = 'database_name'; 
$db = new PDO('mysql:host='.$db_host.';dbname='.$db_name, $db_user, $db_pass); 

// the-script-youre-posting-to.php 
require('connect.php'); 

$message = $_POST['message']; 
$receiver = $_GET["user"]; 
$sender = $sendernick["nick"]; 

// Using prepared statements almost eliminates the possibility of SQL Injection. 
$stmt = $db->prepare("INSERT INTO msg(message, receiver, sender) VALUES (:message, :receiver, :sender)"); 
$stmt->bindParam(':message', $message); 
$stmt->bindParam(':receiver', $receiver); 
$stmt->bindParam(':sender', $sender); 
$stmt->execute(); 

Для получения дополнительной информации о подготовленных заявлениях, взглянуть на PHP manual.

+0

выглядит сложнее, но спасибо: D – Helloitsme

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