2015-11-08 4 views
-1

Итак, у меня есть небольшая проблема с апострофами в MySQL при возврате строк в текстовые поля, чтобы они могли редактироваться.Исходные строки в строке MySQL, за исключением тех случаев, когда они возвращаются как значение текстового ввода

Проблема состоит в том, что строки, содержащие апостроф (') в строке столбца, будут echo в виде текста на странице, но при эхом в качестве значения текстового поля строка вырезается в апострофе и закончилась косой чертой.

Я удалил косую черту, используя stripslashes($nam) с $nam, являясь переменной, которую я загружаю в колонку «Имя», используя mysqli_fetch_assoc. Но остальная часть строки еще не возвращается.

Опять же, когда эхо на странице, в которой перечислены все строки, нет проблем, полная строка выводится так, как должна быть, с апострофами и без добавленных косых черт.

Это когда строка вторит на странице: This is when the string is echoed onto the page

Это когда строка перекликается как значение текстового поля: This is when the string is echoed as the value of the text box

инструменты разработчика Chrome, я могу видеть проблема заключается в том, что апостроф закрывает тег value слишком рано, а остальная часть строки обрабатывается как свойство HTML. Chrome developer tools

Так как же я этого не происходило, в настоящее время мой код (а значительно сократить версии, чтобы избежать заполнения страницы с бессмысленным несвязанным кодом), который я использую, чтобы эхо:

while($row = mysqli_fetch_assoc($result)): 
    $nam = $row["Name"]; 
    $nam = mysqli_real_escape_string($mysqli, $nam); 
    $nam = mysqli_real_escape_string($mysqli, $nam); 
    echo "<label for='Name'>Name</label></td> 
    <td><input type='text' name='Name' id='Name' placeholder='Item Name' value='".$nam."' required></td>"; 
endwhile; 

ответ

0

Я начал набирать этот вопрос и подумал: «Я лучше попробую это, прежде чем публиковать, потому что иначе это может выглядеть очень плохо, если это так, как простое исправление».

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

Ответ:

Ранее я использовал кавычку " инкапсулировать, что я хотел бы повторить, и апостроф ' установить значение, так что в этом случае, мой код был:

echo "<input type='text' name='Name' id='Name' placeholder='Item Name' value='".$nam."' required>"; 

Ключевым моментом является код: value='".$nam."'.

Поскольку строка возвращала апостроф, я полагаю, что PHP признавал этот апостроф как конец свойства value и сократил мою строку короче, отсюда и странный исходный код разработчика Chrome Developer Tools, который включал остальную часть моей строки, без апострофа ,

Чтобы исправить это, я просто изменил апострофы для кавычек и сбежал от них с помощью обратной косой черты \. Для тех, кто не знает, ускорение выполняется путем установки обратной косой черты перед символом, который вам нужно убежать, и это устраняет любые особые способности этого персонажа. Если бы я не избежал кавычки, тогда кавычка закончила бы мой echo и оставила бы меня с синтаксической ошибкой.Убегая его, я говорю PHP, что кавычка является частью HTML, я хочу echo, а не конец echo.

Так что мой новый код теперь:

echo "<input type='text' name='Name' id='Name' placeholder='Item Name' value=\"".$nam."\" required>"; 

Так что урок я узнал: Не пытайтесь избежать побега кавычки, просто используя их, чтобы инкапсулировать echo.