2010-11-17 102 views
0

我的兩難是這樣的:我有一個PHP頁面,其中包含一個textarea,用戶可以在其中輸入任何類型的文本。下面的代碼是在我的PHP頁面的頂部,以檢查用戶是否已經按下「提交」按鈕的形式,和錯誤檢查所有用戶輸入:如何保留PHP頁面刷新時的textarea內容?

<?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的,但後來就失敗了其他檢查的一個頁面如此形式/ pa ge刷新並顯示錯誤,我想保留用戶在textarea中寫的內容。但隨着我的代碼,所顯示的存儲的文本變成:

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

我怎樣才能「拯救」 textarea的內容,所以它是相同的什麼用戶寫的PHP頁面被刷新之前?想不到一個解決方案。 !:(非常感謝提前

回答

5

您應該回顯原始$_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 />'; 
+0

好神,爲什麼我沒有想到只使用$ _POST值...現在我覺得很愚蠢。非常感謝您的回答,並感謝所有其他人! – BeeDog 2010-11-17 09:11:14

1

如果\r\n是唯一的問題,你可以執行str_replace()您發送回瀏覽器之前:

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

如果有其他的問題,這種方法可能不是最理想的一個。

2

只是跳過徵收$loc = mysqli_real_escape_string($dbc, trim($_POST['location']));

htmlentities($loc)htmlentities($_POST['location'])應該是足夠好返回哪些用戶剛剛提交

1

你可以嘗試用

htmlentities(stripslashes($loc)) 

更換

htmlentities($loc) 

,因爲它可能mysqli_real_escape()誰打破\ r \ n。

或者你可以嘗試輸出的原始POST數據

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

如果你的形式方法後,你可以簡單地給你的用戶原始post數據. $_POST['location'] .和使用您的「清除」輸入只是將其插入到db

1

使用Cookie。 這裏是谷歌示例代碼。 這裏的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> 

0

添加包裝您的textarea

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

變爲:

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

您還可以使用包裝:關,硬,軟,物理

你的TextInput現在應該正是包裝爲你寫的。