Как сохранить текстовое содержимое при обновлении страницы PHP? - PullRequest
0 голосов
/ 17 ноября 2010

Моя дилемма заключается в следующем: у меня есть страница PHP с формой, которая включает textarea , где пользователь может вводить любой текст. Приведенный ниже код находится в верхней части моей страницы 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 для формы, а в частности текстовое поле:

...
// 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!!!

Как я могу "сохранить" содержимое текстовой области, чтобы оно совпадало с тем, что написал пользователь перед обновлением страницы PHP? Не могу придумать решение. :( Большое спасибо заранее!

Ответы [ 7 ]

5 голосов
/ 17 ноября 2010

Вы должны повторить исходное значение $_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 />';
2 голосов
/ 17 ноября 2010

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

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

1 голос
/ 17 ноября 2010

Используйте 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>

1 голос
/ 17 ноября 2010

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

1 голос
/ 17 ноября 2010

Вы можете попробовать заменить

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 />';
1 голос
/ 17 ноября 2010

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

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

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

0 голосов
/ 14 сентября 2014

Добавьте wrap в текстовую область

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

становится:

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

Вы также можете использовать обтекание: выкл, жесткий, мягкий, физический

Ваш текстовый ввод должен быть перенесен в точности так, как вы его написали.

...