Как сохранить содержимое textarea при обновлении страницы PHP?

Моя дилемма такова: у меня есть страница PHP с формой, которая включает текстовое поле, где пользователь может вводить любой текст. Код, приведенный ниже, находится в верхней части моей страницы PHP, чтобы проверить, нажал ли кнопка «Отправить» для формы, и проверить ошибку на всех пользователях:

<?php // check if user has pressed the Submit button earlier if (isset($_POST['submit'])) { ... $loc = mysqli_real_escape_string($dbc, trim($_POST['location'])); ... 

Код ниже – это код HTML / PHP для формы, а textarea – это:

 ... // location texarea entry echo '<label for="location">Meeting location: </label><br />'; echo '<textarea name="location" id="location" cols="40" rows="5">' . htmlentities($loc) . '</textarea><br />'; // submit button echo '<input type="submit" value="Submit" name="submit"/><br />'; ... 

Когда я войду, скажем:

 Testing testing... ... <>// HELLO!!! 

В текстовое поле, но затем пропустите одну из других проверок на странице, чтобы обновить форму / страницу и показать ошибку, я хочу сохранить то, что пользователь написал в текстовом поле. Но с кодом, который у меня есть, сохраненный текст, который отображается, превращается в:

 Testing testing...\r\n\r\n...\r\n\r\n<>// HELLO!!! 

Как я могу «сохранить» содержимое textarea, чтобы он был идентичен тому, что написал пользователь до обновления страницы PHP? Не могу придумать решение. 🙁 Спасибо заранее!

Вы должны повторить исходное значение $_POST['location']htmlentities ), а не обрезанное и mysql_real_escaped.

 $loc = null; if (/* POST */) { $loc = $_POST['location']; ... $query = 'INSERT INTO ... "' . mysql_real_escape_string(trim($loc)) . '"'; ... } echo '<textarea name="location" id="location" cols="40" rows="5">' . htmlentities($loc) . '</textarea><br />'; 

просто пропустите наложение на $loc = mysqli_real_escape_string($dbc, trim($_POST['location']));

htmlentities($loc) или htmlentities($_POST['location']) должно быть достаточно хорошим, чтобы вернуть только что отправленного пользователя

Если \r\n – единственная проблема, вы можете выполнить str_replace (), прежде чем отправить ее обратно в браузер:

 $loc = str_replace("\\r\\n", "\n", $loc); 

Если есть и другие проблемы, этот метод может быть не самым идеальным.

Вы можете попытаться заменить

 htmlentities($loc) 

с

 htmlentities(stripslashes($loc)) 

так как это, вероятно, mysqli_real_escape (), который разбивает \ r \ n.

Или вы можете попытаться вывести необработанные данные POST

 echo '<textarea name="location" id="location" cols="40" rows="5">' . $_POST['location'] . '</textarea><br />'; 

если ваш метод формы – это сообщение, вы можете просто предоставить своим пользователям необработанные данные . $_POST['location'] . . $_POST['location'] . и используйте свой «очищенный» ввод, чтобы вставить его в db

Используйте Cookie. Вот пример кода для Google. Вот html >>

http://skymong9.egloos.com/1797665

 <HTML> <HEAD> <TITLE>BLUE-B</TITLE> <script> function ReadCookie (Name) { var search = Name + "=" if (document.cookie.length > 0) { offset = document.cookie.indexOf(search) if (offset != -1) { offset += search.length end = document.cookie.indexOf(";", offset) if (end == -1) end = document.cookie.length return (document.cookie.substring(offset, end)) } else return (""); } else return (""); } function WriteCookie (cookieName, cookieValue, expiry) { var expDate = new Date(); expDate.setTime (expDate.getTime() + expiry); document.cookie = cookieName + "=" + escape (cookieValue) + "; expires=" + expDate.toGMTString() + "; path=/"; } function getCookies() { document.noteForm.note.value = unescape(ReadCookie("note")); } </script> </head> <body> <form NAME="noteForm"> <textarea ROWS="5" COLS="40" NAME="note" WRAP="VIRTUAL"></textarea> <input TYPE="button" VALUE="Save Text" onClick="WriteCookie('note', document.noteForm.note.value, 2678400000)"> <INPUT TYPE="button" VALUE="새로고침" onClick='parent.location="javascript:location.reload()"'> </form> <script> window.onload=function() { getCookies(); } </script> 

Добавить обертку в текстовое поле

 <textarea name="location" id="location" cols="40" rows="5"> 

будет выглядеть так:

 <textarea name="location" id="location" cols="40" rows="5" wrap="virtual"> 

Вы также можете использовать wrap: off, hard, soft, physical

Теперь ваш текст должен быть завернут так, как вы его написали.