我正在尝试使用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;
});
});
任何帮助将不胜感激。
答案 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 );
}