2013-08-07 2 views
-2

У меня есть форма, обработанная с помощью PHP. Он содержит поле Notes для задания клиента. Проблема заключается в том, что если в примечаниях есть «внутри», например, «O'Reilly», и т. Д., Это ускользает от строки в базе данных, поэтому у меня есть все заметки до тех пор, пока она не встретит «то это конец нот.mysql_real_escape_string Не работает с '

Я понимаю, что есть такие вещи, как mysqli_ и PDO, но это очень напряженный сезон на данный момент, и я мог просто сделать это быстро, прежде чем делать полное обновление/капитальный ремонт в январе.

Любая идея, почему она не работает? Код включен. Неважно, где я помещаю mysql_real_escape_string(), он нигде не работает.

FYI: Столбец таблицы - ТЕКСТ. И есть несколько других полей, следовательно, Еогеасп

// SELECTS AND CONNECTS TO SERVER/DB 
include_once('config/db.inc.php'); 


// CONVERT ALL $_POST['name'] to $name and clean/prep for mysql insertion 
foreach($_POST as $key => $value) {  
     $$key = mysql_real_escape_string($value); 
     } 


// UPDATE CLIENT JOB NOTES 
$query = "UPDATE client_list SET bookingNotes='$bookingNotes' WHERE id='$CID'"; 
     mysql_query($query, $conn) or die(mysql_error()); 

ТИА

Редактировать для ответов ниже:

$ bookingNotes и $ CID являются определить по виду переменных $ _POST [» bookingNotes '] и $ _POST [' CID '], где foreach существенно удаляет часть «_POST». (это целая часть $$ key = $ value)

Как уже упоминалось, я ценю mysqli_ и PDO, но в настоящее время я не могу изучить, обновить и внедрить эти системы в данный момент. Это выполняется локально, и моя текущая версия PHP 5.4.1 поддерживает эту функцию. Я понимаю, что PDO лучше, но пока это не вариант, поэтому, пожалуйста, не умаляйте меня с «сделайте это правильно» или «научитесь программировать». Это не проблема.

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

Чтобы догадаться, это то, что происходит.

«Сегодня очень серый и идет дождь» вводится в форму как $ bookingNotes. Затем скрипт вводит это в столбец TEXT базы данных. Но то, что появляется в базе данных;

«Сегодня очень серый и»

ТИА и спасибо за ответы до сих пор.

+1

Где указаны $ bookingNotes и $ CID, они, кажется, не принимают значения из значений цикла looped –

+1

, какую версию php вы используете? Исходное расширение mysql обесценивается из версий php 5.5.x. – Nishant

+0

Возможно, это неправильно? -> '$$ key' – aldanux

ответ

0

Благодарим всех вас за полезный ввод.

Это исправлено сейчас, я честно не знаю как.

Я удалил '' в инструкции SQL (WHERE bookingNotes = 'bookingNotes'), чтобы вызвать ошибку.

Я также проверил (переспросил) содержание $ bookingNotes, который был данные POST ПОСЛЕ mysql_real_escape_string(), и это была полная строка с апострофа экранированы (полоснул)

Я снял эхо, поставить SQL назад , и все это работало так, как должно/как ожидалось.

Я выполнил резервную копию сценария, прежде чем начал работать, с тех пор я сравнивал «новый» рабочий с оригинальным, который потерпел неудачу, и они точно такие же, без недостающих символов или лишних/отсутствующих пробелов, точно так же. o_O

Так что я не знаю, что там произошло!

Спасибо за вход в любом случае.

-1

Попробуйте изменить этот

$$ ключ = mysql_real_escape_string ($ значение);

НА

$ ключ = mysql_real_escape_string ($ значение);

+0

Извините, вы правы, моя ошибка. – Julian

0

Я попробовал это, и это, кажется, хорошо

$_POST['name'] = "1'"; 
$_POST['age'] = '2';/* 
$_POST[] = '3'; 
$_POST[] = '3'; */ 
foreach($_POST as $key => $value) {  
    $$key = mysql_real_escape_string($value); 
    echo $$key; 

} 

В результате я получил: 1 \»- который является правильным

+1

Проблема в том, что у меня есть переменная $ _POST ['bookingNotes'], которая содержит - скажем, «Сегодня идет дождь». Это отправляется на скрипт обработки, который превращает $ _POST ['bookingNotes'] только в $ bookingNotes, а затем вставляет содержимое в столбец TEXT в базе данных. В базе данных находится «Сегодня это». И все после «отсутствует». – Biomech

+0

Да, это то, что я думал, возможно, вызвало перерыв. Другой способ, которым вы могли бы преодолеть, - добавить, stripslash и addslashes. Я не тестировал этот метод, но он тоже должен работать. – Julian

-1

Первый, mysql_real_escape_string()всегда работы. Если какой-то ваш код не делает - ну, это ваш код.

Второй, но самое главное: НИКОГДА не запустить код, как этот

foreach($_POST as $key => $value) {  
    $$key = // whatever. 
} 

это на самом деле отверстие в безопасности, хуже, чем любой другой.

Наконец, это крайне неясно из вашего крайне неопределенного объяснения, но я думаю, что это форма HTML, где вы получаете свой «конец нот». В любом случае, вам нужно исправить то место, где это происходит, а не винить функцию, с которой вы давно работаете

+0

Спасибо за вход, не могли бы вы объяснить, почему это дыра в безопасности? Я вообще не «обвиняю» эту функцию, я пытаюсь выяснить, почему она не работает, я знаю, ГДЕ она происходит, и ПОЧЕМУ это происходит - mysql видит «» и рассматривает это как конец строки. Я не знаю, почему это «не ускользнуто при использовании функции, которая, как я полагаю, должна убежать от нее». – Biomech

2

Уверены ли вы, что проблема на конце письма? Ваш код выглядит так, как будто он должен работать. (Ну, для некоторой стоимости работы вы не хотите иметь поле <input name='conn' value='haha'>. В любом случае, вы, похоже, достаточно хорошо разбираетесь в проблемах с кодом.)

Я предполагаю, что то, что вы видите, не является SQL-инъекцией но HTML инъекции:

<input name='bookingNotes' value='<?php=$bookingNotes?>'> 

попытка побега, что с

<input name='bookingNotes' value='<?php=htmlspecialchars($bookingNotes, ENT_QUOTES)?>'> 

, чтобы избежать этой проблемы.

+0

Правильное направление, но этот код не поможет –

+0

Правильно, я забыл сказать, чтобы избежать кавычек. Редактирование. – sba

+0

Это не проблема впрыска как таковая, потому что, когда данные поступают в базу данных, она останавливается, когда достигает «. Таким образом, ввод «Сегодня серый и идет дождь» хранится в базе данных как «Сегодня серый и это» – Biomech

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