使用jQuery更新文本区域

时间:2018-07-31 18:23:33

标签: javascript php jquery

我正在尝试使用jquery更新数据,但是如果输入了textarea(在mysql中用\ r \ n表示),它将失败。

我的更新功能代码是

typedef std::shared_ptr<A> APtr;

我的更新功能是

<td><i class="fa fa-edit" onclick="upd('<?php echo $fetch_news ['title']; ?>',
                                                          '<?php echo $fetch_news ['detail']; ?>',
                                                          '<?php echo $fetch_news ['date']; ?>',
                                                          '<?php echo $fetch_news ['id']; ?>'
                                                          )"></i></td>

我的文本区域输入是

function upd(title,detail,date,id)
{
  $("#newsTitle").val(title);
  $("#newsDetails").val(detail);
  $("#newsDate").val(date);
  $("#id").val(id);
}

如果在插入文本区域数据时没有按下Enter键,则此代码可以正常工作

我得到的错误是

<div class="form-group"><textarea id="newsDetails" name="newsDetails" title="News Location (less than 200 words)" placeholder="News Details (less than 200 words)" required="" class="form-control"></textarea></div>

我的插入函数是

Uncaught SyntaxError: Invalid or unexpected token

插入查询为

$(function () {
      $("#form").on("submit", function(){
            $.ajax({
                url: "extra/logical.php?pg=news&tsk=ins",
                type: 'POST',
                data: new FormData(this),
                contentType: false,
                cache: false,
                processData: false,
                success: function(data) {
                  $("#showdata").html(data);
                  $("#newsTitle").val('');
                  $("#newsDetails").val('');
                  $("#newsDate").val('');
                  $("#id").val('');
                }
            });
            return false;
        });
    });

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

您可以阻止使用事件监听器在textarea中按Enter的默认操作。

<textarea placeholder="You can not press enter"></textarea>
<script>
document.querySelector("textarea").addEventListener("keypress", function(e){
  if(e.keyCode==13){
    e.preventDefault();
  }
});
</script>

在服务器端,使用PHP,您应将所有换行符替换为空的字符串,以使插入不会失败(来自this答案)。

str_replace("\r\n", "", "your insertion statement string");  

答案 1 :(得分:0)

首先,@ epascarello正确地说您需要对进入数据库的所有数据进行转义。您还以一种非常不安全的方式来进行此操作,这肯定会被黑客入侵。以这种方式创建SQL语句可以打开称为SQL Injection的代码,这可能是网站被黑客入侵的最常见方式。

您需要使用准备好的语句并保护代码以保存数据,并对输入的数据进行编码。

根据this guide中的示例以及此处的说明,PDO是处理保存到数据库的用户输入的唯一安全方法。这是因为在将数据放入查询之前,已在数据库服务器上 prepared 编写了prepared语句。

至于代码,请看一下以保存数据:

$host = 'localhost';
$db   = 'myDatabase';
$username = 'awesomeUser';
$pass = 'someTotallySecretPassword';
$charset = 'utf8';

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";

$opt = [ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC];

$pdo = new PDO($dsn, $username, $password, $opt);
$stmt = $pdo->prepare('INSERT INTO news SET title = :title, details = :details, date = :date');
$stmt->execute([
    'title' => urlencode($_POST["newsTitle"]), 
    'details' => urlencode($_POST["newsDetails"]),
    'date' => $_POST["newsDate"]
]);
$user = $stmt->fetch();

除非您的用例需要用户能够插入不同于新闻创建时间的日期,否则我建议您也可以在服务器上使用SQL或PHP自己创建日期。您正在创建的文章。如果用户确实需要插入一个任意日期,则还需要对此进行一些验证,以确保该日期有效。

现在,当您需要再次获取数据时,需要使用javascript解码数据库中的数据:

function decode(text)
{
    return decodeURIComponent(text.replace(/\+/g,' '));
}

function upd(title,detail,date,id)
{
  $("#newsTitle").val( decode(title) );
  $("#newsDetails").val( decode(detail) );
  $("#newsDate").val( date );
  $("#id").val( id );
}