2013-11-18 3 views
0

Впервые у меня проблема mysql. У меня есть поле ввода, такие какВставка Mysql не работает, когда поле ввода имеет апостроф

<input type="text" name="myfield" id="myfield" /> 

Таким образом, когда пользователь нажимает кнопку отправки я получаю значение с PHP

$myval = $_POST['myfield']; 

Все это хорошо до сих пор. Если мое значение в этом поле ввода содержит апостроф ' и, например:

<input type="text" name="myfield" id="myfield" value="Niko's Dog" /> 

для MySQL запросов:

mysql_query ("INSERT INTO users (myfield) VALUES ('$myval')"); 

Не удается вставить данные ..

Любые мнения, пожалуйста? Мне нужно, чтобы все символы были действительными.

+1

Используйте «Подготовленные утверждения», и вы можете перестать беспокоиться об этом побеге и прочем. ! В настоящее время вы используете 'mysql_ *' функции, которые устарели. –

+0

'mysql_query (" INSERT INTO users (myfield) VALUES ('".mysql_real_escape_string ($ myval). "'"); ' – asprin

+0

просто предложение, а не' mysql_query' использует 'mysqli_query' как более безопасное! – NoobEditor

ответ

3

Попробуйте добавить слэши как

$myval = addslashes($myval); 
mysql_query ("INSERT INTO users (myfield) VALUES ('".$myval."')"); 

Либо вы можете использовать mysql_real_escape_string непосредственно.

mysql_query ("INSERT INTO users (myfield) 
       VALUES ('".mysql_real_escape_string($myval)."')"); 
0

Это происходит, когда вы не избежать ваш входной

INSERT INTO users (myfield) 
VALUES ('Niko's Dog') 
      ^-----------string end 

Лучше использовать подготовленные заявления. См here

-1

кроме addslashes и mysql_real_escape_string вы также можете использовать str_replace для того же:

$myval=str_replace("\'","'","$myval"); 
0

Посмотрите в использовании Prepared Statements, чтобы избежать проблем эвакуации, а также вредоносный ввод:

$result; 
if ($stmt = $mysqli->prepare("INSERT INTO users (myfield) VALUES (?)") { 
    $stmt->bind_param("s", $myval); 
    $stmt->execute(); 
    $stmt->bind_result($result); 
    $stmt->fetch(); 
    echo "Your result is $result"; 
    $stmt->close(); 
} 

Вы также должны использовать mysqli_*, так как старые функции mysql_* устарели.

0

Прежде всего, никогда не доверяйте пользовательскому вводу! Всегда фильтруйте его перед использованием, потому что пользователь злой (вы должны так думать при написании любого программного обеспечения).

Кроме того, вы должны пропустить использование устаревшего mysql_* и вместо этого использовать, например. PDO (или mysqli_*, если вы хотите использовать что-то более похожее на mysql_*), что очень просто и дает вам больше возможностей. Например. позволяет использовать prepared statements. Используя это, вы можете писать более безопасное и лучшее программное обеспечение.

0

Просто добавьте код ниже в свой файл на стороне сервера. поэтому он будет проверять каждое поле вашей формы.

foreach ($_POST as $key => $value) { 
    if(!is_array($value)){ 
     $_POST[$key] = mysql_real_escape_string($value); 
    } 
} 
Смежные вопросы