通过settimer-function将textarea.value存储到MySQL数据库而不会丢失换行符

时间:2013-10-13 20:54:06

标签: javascript php html mysql dom

在网站EasyNote中,我遇到了换行问题。

在on body上我设置了一个计时器,每3秒自动上传一个音符,如下所示:

<body onload="setInterval(uploadNote,3000);current = 1;">

uploadNote的代码是:

function uploadNote() {
    var note = current+document.getElementById(\'note\').value;  //current is the number of the note selected\' because echoed
    xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function()
    {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200){}
    }
    xmlhttp.open("GET","uploadnote.php?q="+note,true);
    xmlhttp.send();
}

然后就是这个php代码:

$note = $_GET["q"]; //contains both notenumber as first digit and note

echo($note."\n"); //for debugging reasons

$notenumber = substr($note, 0, 1);
$notecontent = substr($note, 1, strlen($note));

$notecontent = str_replace("'","''",$notecontent);
$notecontent = nl2br($notecontent);

echo($notecontent); //for debugging reasons

$request = 'UPDATE notes SET note'.$notenumber.' = "'.$notecontent.'" WHERE mail LIKE "'.$email.'"';
$result = mysql_query($request);

现在,问题是,textarea中的换行符被完全删除,因此php-snippet的结果是没有换行符的文本的两倍,也在数据库中。 但是,当我直接在数据库中插入换行符时,在textarea中显示换行符没有问题。

非常感谢帮助。

编辑: 更新了uploadNote()函数:

function uploadNote() {
    var note = current+document.getElementById(\'note\').value;
    xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function()
    {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200){}
    }
    xmlhttp.open("POST","uploadnote.php",true);
    xmlhttp.send("note="+note);
}

和php:

$note = $_POST["note"];

echo($note."\n");

$notenumber = substr($note, 0, 1);
$notecontent = substr($note, 1, strlen($note));

$notecontent = mysql_real_escape_string($notecontent);

echo($notecontent);

$request = 'UPDATE notes SET note'.$notenumber.' = "'.$notecontent.'" WHERE mail LIKE "'.$email.'"';
$result = mysql_query($request);

现在的问题是没有任何作用。该注释不会在MySQL数据库中更新。

1 个答案:

答案 0 :(得分:0)

您的代码存在问题:

  1. 请勿使用GET请求来更改服务器上的内容,请使用POST。
  2. 数据库查询需要转义变量部分。对写入SQL的值使用mysql_real_escape_string()
  3. 将数据保存到数据库时,请勿使用任何以html为中心的格式。将代码输出回浏览器时可以使用它。
  4. 在textarea中,您不能使用任何HTML标记,因此使用<br>作为换行符是错误的。