2014-02-11 2 views
0

У меня есть простая страница комментариев пользователя ввести текст в текстовое поле и кнопку удара комментария отправить комментарий на страницу PHP:Как сохранить апостроф в базу данных MySQL из пользовательского ввода?

<?php 
$reply = strip_tags($_POST['reply']); 
$comment_id = strip_tags($_POST['id']); 
$id = strip_tags($_POST['user_id']); 
$date = strip_tags($_POST['date']); 
$time = strip_tags($_POST['time']); 
$server_root = "./"; 
if(file_exists("{$server_root}include-sql/mysql.class.php")) 
{ 
    include_once("{$server_root}include-sql/mysql.class.php"); 
} 
include_once("{$server_root}config.php"); 
$db1; 
$db1 = new db_mysql($conf['db_hostname'], 
        $conf['db_username'], 
        $conf['db_password'], 
        $conf['db_name']); 
$db1->query("SET NAMES utf8"); 
$current_server_date = date('Y-m-d H:i:s');// Your local server time 
date_default_timezone_set('Asia/Istanbul'); 
$current_pc_date = date('Y-m-d H:i:s'); 
$sql = $db1->query(
    'INSERT INTO replies1 (reply, comment_id, date, time, timestamp, user_id) 
    VALUES ("$reply", $comment_id, "$date", "$time", "$current_pc_date", $id)'); 
?> 

проблема: когда пользователь ввести любой комментарий с апостроф его не хранит его в базе данных? почему это произошло? У моего кода что-то не так? Я добавил все двойные кавычки и stripe_tags.? я что-то пропустил?

+1

Вы пытались использовать mysqli_real_escapre_string()? – Martin

+0

Это связано с тем, что все значения отправлены в запрос без фильтрации и неэкранированы. 'strip_tags()' предназначен для дезактивации HTML для вывода позже, но не делает ничего, чтобы избежать или дезинформировать ввод базы данных. В приведенном выше вопросе подробно рассмотрены ваши варианты исправления (что является уязвимостью SQL-инъекции); –

ответ

2

Вы должны избегать ввода всех данных, поступающих непосредственно от пользователя с помощью mysqli_real_escape_string()! В противном случае он не только не работает должным образом, но также очень опасен для хакерских атак. (mysql-injection)

1

strip_tags() кажется ненужным.

Вместо этого, вы должны

  • либо избежать вход DB соответственно
  • или использовать подготовленные заявления на первом месте.

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

Имейте в виду, что mysql_*() устарел. Вы должны либо использовать mysqli, либо PDO.

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