Как обрабатывать (на стороне сервера) амперсанд при вставке текста в MySQL с помощью PHP? - PullRequest
1 голос
/ 30 июля 2011

Когда мы вставляем строку с символом амперсанда в mysql, строка вставляется только до появления символа.

Пример: при вставке «один и два» ... вставляется только «один».

Пробовал несколько вещей вроде ... htmlentities ИЛИ htmlspecialchars ... ничего для меня не работает.

Текущий код PHP:

$sms = htmlentities($_POST["sms"]);


$query = "INSERT INTO sms (detail,catID,deviceID) VALUES ('".$sms."',".$_POST["catID"].",'".$_POST["deviceID"]."')";

А так как приложение работает ... Мне нужно разрешить его, отредактировав только файлы PHP на сервере. (Надеюсь это можно сделать)

Ответы [ 3 ]

2 голосов
/ 30 июля 2011

Вот безопасный (против внедрения SQL) запрос:

$query = sprintf("INSERT INTO sms (detail,catID,deviceID) VALUES ('%s', '%s', '%s')",
                 mysql_real_escape_string($_POST['sms']),
                 mysql_real_escape_string($_POST['catID']),
                 mysql_real_escape_string($_POST['deviceID']));

Я экранирую все как строку, потому что я не знаю схему вашей таблицы.

Однако, если catID и deviceID являются INTEGER типами, то это должно быть:

$query = sprintf("INSERT INTO sms (detail,catID,deviceID) VALUES ('%s', %d, %d)",
                 mysql_real_escape_string($_POST['sms']),
                 ((int) $_POST['catID']),
                 ((int) $_POST['deviceID']));
0 голосов
/ 01 августа 2011

Хорошо, хорошо, чтобы завершить обсуждение, не удалось найти решение только на стороне сервера ... требуется модификация как на стороне клиента, так и на стороне сервера.

Вот как мне нужно было передать текст загрузки (как newStr):

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30];
[request setHTTPMethod:@"POST"];

NSString *newStr = (NSString *)CFURLCreateStringByAddingPercentEscapes(
                                                                               NULL,
                                                                               (CFStringRef)uploadText.text,
                                                                               NULL,
                                                                               (CFStringRef)@"&",
                                                                               kCFStringEncodingUTF8 );

NSString *parameters = [[NSString alloc] initWithFormat:@"sms=%@&catID=%d&deviceID=%@",newStr,webCatID,[[UIDevice currentDevice] uniqueIdentifier]];

[newStr release];

И эта модификация на стороне сервера:

    if ( get_magic_quotes_gpc() )
{
    $_POST['sms'] = stripslashes($_POST['sms'] );
}

$query = sprintf("INSERT INTO sms (detail,catID,deviceID) VALUES ('%s', '%d', '%s')",
                 mysql_real_escape_string($_POST['sms']),
                 ((int) $_POST['catID']),
                 mysql_real_escape_string($_POST['deviceID']));

Специальное спасибо @PhpMyCoder & @ Shef

& LOL о срочности!

0 голосов
/ 30 июля 2011
Функция

htmlentities(); лучше всего использовать при отображении данных из базы данных или POST для защиты пользователя и формы страницы. XSS

При вставке в базу данных санацию для защиты базы данных от злоупотреблений, используя mysql_real_escape_string():

if(isset($_POST)){
    foreach($_POST as $key=>$value){
        if(get_magic_quotes_gpc()) {
            $value=stripslashes($value);
        }
        $_POST[$key]=mysql_real_escape_string($value);
    }
}

$query = "INSERT INTO sms (detail,catID,deviceID) VALUES ('".$sms."',".$_POST["catID"].",'".$_POST["deviceID"]."')";
...