2015-04-26 3 views
1

по какой-то причине, когда я заменяю апостроф двойным апострофом, он будет работать для текстового просмотра, но не для обычного ввода текста. (Я использую phpFusion).PHP, SQL, Apostrophe, ввод текста

Это мой HTML-код

<tr class='" . $class_alt . "'> 

            <td class='first'><input type='text' class='w_focus validate[required] text-input' size='20' name='track' id='race' value='" . $data['track'] . "' /></td> 
            <td><input type='text' class='w_focus validate[required] text-input' size='1' name='race' id='race' value='" . $data['race'] . "' /></td> 
            <td><input type='text' class='w_focus validate[required] text-input' size='1' name='turnip_number' id='turnip_number' value='" . $data['turnip_number'] . "' /></td> 
            <td><input type='text' class='w_focus validate[required] text-input' size='20' name='turnip_horse' id='turnip_horse' value='" . $data['turnip_horse'] . "' /></td> 
            <td><input type='text' class='w_focus validate[required] text-input' size='3' name='turnip_odds' id='turnip_odds' value='" . $data['turnip_odds'] . "' /></td> 
            <td><input type='text' class='w_focus validate[required] text-input' size='10' name='turnip_bettype' id='turnip_bettype' value='" . $data['turnip_bettype'] . "' /></td> 
            <td><input type='text' class='w_focus validate[required] text-input' size='1' name='turnip_special' id='turnip_special' value='" . $data['turnip_special'] . "' /></td> 
            <td> 
         <div class='textarea'> 
          <textarea cols='20' rows='12' name='turnip_reason' id='turnip_reason' class='w_focus validate[required]'>" . $data['turnip_reason'] . "</textarea> 
         </div> 
        </td> 
            <td class='last'> 
         <div class='send'><span class='button_lnk blue def_link'> 
          <input type='submit' value='Enter Tip' class='enter_tips' name='enter_tips'/> 
         </span></div> 
        </td> 

       </tr> 

И мой SQL-запрос:

$find = "'"; 
$replace = "''"; 

$result = dbquery("UPDATE fusion6618n_tips SET turnip_horse='" . str_replace($find, $replace, $_POST['turnip_horse']) . "', turnip_number='" . $_POST['turnip_number'] . "', turnip_odds='" . $_POST['turnip_odds'] . "', turnip_bettype='" . str_replace($find, $replace, $_POST['turnip_bettype']) . "', turnip_special='" . $_POST['turnip_special'] . "', turnip_reason='" . str_replace($find, $replace, $_POST['turnip_reason']) . "' WHERE track='" . $_POST['track'] . "' AND race='" . $_POST['race'] . "'"); 

Он отлично работает для TextView (turnip_reason).

Но если я сделаю это для ввода текста (turnip_horse) и произнесет «Sir 'n' Sausage», все, что получает обновление в базе данных, это «Sir» вместо Sir '' n '' Sausage ,

И я не могу понять, как это исправить.

+1

пожалуйста, прочтите [ 'Как я могу предотвратить SQL -инъекция в PHP? '] (http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php). Это поможет решить вашу проблему. – Sean

+0

Я пробовал $ safe_variable = mysql_real_escape_string ($ _ POST ['chief_horse']); Такая же проблема, это то, о чем вы говорили? – wha1e

ответ

0

Вы заменяете знак «escaping», а не удваиваете их. Так что ваша часть кода должна быть:

$find = "'"; $replace = "\'";

потому, что ваш запрос (упрощенный) в середине убегает:

UPDATE fusion6618n_tips SET turnip_horse='Sir ''n'' Sausage' WHERE track=''

UPDATE fusion6618n_tips SET turnip_horse='Sir '

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