我的困境是这样的:我有一个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代码,特别是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!!!
进入textarea,但是然后在页面上的其他一个检查失败,因此表单/页面被刷新并显示错误,我想保留用户在textarea中写的内容。但是使用我的代码,显示的存储文本变为:
Testing testing...\r\n\r\n...\r\n\r\n<>// HELLO!!!
如何“保存”textarea内容,使其与用户在刷新PHP页面之前所写的内容完全相同?想不出解决方案。 :(非常感谢提前!
答案 0 :(得分:5)
您应该回显原始$_POST['location']
值(使用htmlentities
),而不是它的trimmed和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 />';
答案 1 :(得分:2)
只需跳过强加于$loc = mysqli_real_escape_string($dbc, trim($_POST['location']));
htmlentities($loc)
或htmlentities($_POST['location'])
应足以返回刚刚提交的用户
答案 2 :(得分:1)
如果\r\n
是唯一的问题,您可以在将其发送回浏览器之前执行str_replace():
$loc = str_replace("\\r\\n", "\n", $loc);
如果还有其他问题,这种方法可能不是最理想的方法。
答案 3 :(得分:1)
您可以尝试替换
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 />';
答案 4 :(得分:1)
如果您的表单方法是发布的,您可以简单地为您的用户提供原始发布数据. $_POST['location'] .
并使用您的“已清除”输入只是将其插入到数据库
答案 5 :(得分:1)
使用Cookie。 这是谷歌搜索示例代码。 这是html&gt;&gt;
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>
答案 6 :(得分:0)
将换行添加到textarea
<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
您的textinput现在应该与您编写的完全相同。