Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript post方法不发送全文_Javascript_Php_Jquery_Mysql_Ajax - Fatal编程技术网

Javascript post方法不发送全文

Javascript post方法不发送全文,javascript,php,jquery,mysql,ajax,Javascript,Php,Jquery,Mysql,Ajax,我有一个存储过程,可以同时向数据库发送和获取博客数据: CREATE DEFINER=`root`@`localhost` PROCEDURE `post_and_fetch_ans`( IN answerbody longtext, IN postid int, IN answerer int) BEGIN INSERT INTO `login`.`answers` (answer_body,userpost_post_id,users_user_id) VALU

我有一个存储过程,可以同时向数据库发送和获取博客数据:

CREATE DEFINER=`root`@`localhost` PROCEDURE `post_and_fetch_ans`(
    IN answerbody longtext,
    IN postid int,
    IN answerer int)
BEGIN
   INSERT INTO `login`.`answers` (answer_body,userpost_post_id,users_user_id) VALUES (answerbody,postid,answerer);
   SELECT * FROM `login`.`answers` WHERE userpost_post_id = postid  ORDER BY answer_date DESC LIMIT 1;
END
但我的问题是我在文本编辑器上写的文本数据量很大,只有几行被发送并存储到数据库中。我使用ajax将数据发送到php页面,该页面将存储到数据库中

$('#answerform').submit(function(event){
   event.preventDefault();
   var data='answer_body='+CKEDITOR.instances.content.getData()+'&userpost_post_id=<?php echo $contents[0]->post_id;?>&users_user_id=<?php echo $userdata->user_id; ?>';
   alert(data);

   $.ajax('../includes/verifyanswer.php',{
        data:data,
        type:"POST",
        datatype:'json',
        success:function(response){
            alert(response);

            var obj=$.parseJSON(response);

            $('#mainanswer').hide();
            $('#answerform').hide();
            $('#answerthisquestion').show();
            var str="<div class='styleanswer' >"+obj[0]['answer_body']+'</div><hr>';

            $('#answerwrapper').append(str);
            $('#answerwrapper pre code').each(function(i, block) {
                hljs.highlightBlock(block);
            });
        },
        error:function(response){
            alert(response);
        }
    });
}); 
这条线

$answer=$\u POST['answer\u body']

只包含比实际文本小得多的部分文本,而不是全文。因此,数据库中存储的文本较少

这个问题的一个例子是

我将此数量的文本发送到数据库中存储

但我只在DB中存储了这几行文本

祝贺Mathematics SE成为第一个解锁的站点 这顶帽子,活动开始不到18小时!也要进行代码审查 从技术上讲,Blender SE只需要三个用户即可获得 此帽子,即在获得帽子时,一个用户拥有16个或更多 更多的帽子,另外两个用户的帽子足够第一个用户使用 没有


几乎没有什么选择

撇号可能是SQL语句的结尾。你需要逃离它

您试图存储数据的字段太小


您没有在Javascript代码中正确编码POST数据。不要连接字符串,而是将data:选项设置为一个对象,jQuery将正确编码它

var data = {
    answer_body: CKEDITOR.instances.content.getData(),
    userpost_post_id: <?php echo $contents[0]->post_id;?>,
    users_user_id: <?php echo $userdata->user_id; ?>
};
问题 正如其他人所提到的,这个问题是由答案主体中的特殊字符引起的。当前存储答案的方式会导致特殊字符干扰SQL命令,并使您容易受到SQL注入的影响

解决方案1 您可以在PHP中使用mysqli\u real\u escape\u字符串

mysqli_real_escape_string-将字符串中的特殊字符转义为 在SQL语句中使用,并考虑 连接

解决方案2更好
通过使用带绑定参数的预处理语句,可以解决问题并防止SQL注入。检查其他字段以了解更多信息。

确保您的字段可以容纳更多字符,这可能就是它被截断的原因。如果点1==true,则该字段的数据类型为Longtext,这是否意味着他容易受到SQL注入的攻击?你能告诉我这个问题在哪一行吗?找不到it@AL-zami总是转义字符串中的特殊字符,以便在SQL语句中使用$answer=mysqli_real_escape_string$_POST['answer_body']@barts最有可能,但可能不是,因为他使用的是存储过程。@Al zami我会用更小的数据再试一次,但在那里保留一个撇号。尝试发送这是一个“测试”,看看存储了什么。如果它在撇号之前再次结束,那么您的问题是撇号。但是正如您所看到的,我的查询是参数化的调用login.post_和_fetch_ans。在将其发送到数据库之前,我将值绑定到它。那么问题是什么呢?如果我使用它,它可以使用引号存储数据,但作为响应,我得到一个错误:SyntaxError:JSON.parse:在我的ajax响应中,JSON数据的第1行第1列出现意外的数据结尾,这意味着您没有返回正确的JSON。确保脚本在回显json_encode$result之前或之后不会生成任何其他输出。您可以使用浏览器控制台的“网络”选项卡查看完整的AJAX响应,并查看返回的内容。
var data = {
    answer_body: CKEDITOR.instances.content.getData(),
    userpost_post_id: <?php echo $contents[0]->post_id;?>,
    users_user_id: <?php echo $userdata->user_id; ?>
};