2010-11-17 3 views
0

Mon dilemme est le suivant: J'ai une page PHP avec un formulaire qui inclut un textarea où l'utilisateur peut entrer n'importe quel type de texte. Le code ci-dessous est à la partie supérieure de ma page PHP, pour vérifier si oui ou non l'utilisateur a appuyé sur le bouton « Soumettre » pour la forme, et à vérifier l'erreur toutes les entrées utilisateur:Comment conserver le contenu de textarea lorsque la page PHP est actualisée?

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

Le code ci-dessous est le code HTML/PHP pour la forme, et la zone de texte spécifique:

... 
// 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 />'; 
... 

Quand je rentre, disons que:

Testing testing... 

... 

<>// HELLO!!! 

Dans la zone de texte, mais échouent l'une des autres vérifications la page de sorte que le formulaire/pa ge est rafraichie et montre une erreur, je veux retenir ce que l'utilisateur a écrit dans la zone de texte. Mais avec le code que j'ai, le texte stocké qui est affiché se transforme en:

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

Comment puis-je « sauver » le contenu textarea il est donc identique à ce que l'utilisateur écrit avant que la page PHP est actualisée? Je ne peux pas penser à une solution. :(! Un grand merci à l'avance

Répondre

5

Vous devez renvoyer la valeur $_POST['location'] d'origine (avec htmlentities), et non la version rognée et mysql_real_escaped de celle-ci.

$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

Bon dieu, pourquoi n'ai-je pas pensé à simplement utiliser la valeur de $ _POST ... maintenant je me sens très stupide. Merci beaucoup pour cette excellente réponse, et merci à tous! – BeeDog

1

Si le \r\n sont le seul problème que vous pouvez effectuer un str_replace() avant de l'envoyer au navigateur:

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

S'il y a d'autres problèmes, cette méthode pourrait ne pas être le plus idéal.

2

sauter simplement imposer $loc = mysqli_real_escape_string($dbc, trim($_POST['location']));

htmlentities($loc) ou htmlentities($_POST['location']) devrait être assez bon pour retourner ce que l'utilisateur vient de soumettre

1

Vous pouvez essayer de remplacer

htmlentities($loc) 

avec

htmlentities(stripslashes($loc)) 

car il est probablement mysqli_real_escape() qui casse \ r \ n.

Ou vous pourriez essayer de sortir les données brutes POST

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

si votre méthode formulaire est post, vous pouvez simplement donner vos données brutes POST utilisateur . $_POST['location'] . et utilisez votre « effacé » entrée juste pour l'insérer db

1

Utilisez Cookie. Voici un exemple de code googling. est ici 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

Ajouter wrap à votre textarea

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

devient:

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

Vous pouvez également utiliser une pellicule: off, dur, doux, physique

Votre textinput doit maintenant être enveloppé exactement comme vous l'avez écrit.

Questions connexes