Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.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
使用php PDO提交Ajax表单并从服务器返回消息_Php_Jquery_Ajax_Pdo - Fatal编程技术网

使用php PDO提交Ajax表单并从服务器返回消息

使用php PDO提交Ajax表单并从服务器返回消息,php,jquery,ajax,pdo,Php,Jquery,Ajax,Pdo,我使用下面的php PDO和ajax程序在帖子上提交用户评论。 起初我这么做的时候,效果很好,但现在它停止工作了。我做错了什么?有人能帮我解决这个问题吗?或者决定一个更好的方法来实现它吗 问题 目前,当我提交回复时,它将发布到我的数据库,但不会从服务器返回消息。 示例:当我发布“hello”时,我希望它能立即显示出来,而无需重新加载页面 这里是AJAX <script> $(document).ready(function(){ $('#add-comment').submi

我使用下面的php PDO和ajax程序在帖子上提交用户评论。 起初我这么做的时候,效果很好,但现在它停止工作了。我做错了什么?有人能帮我解决这个问题吗?或者决定一个更好的方法来实现它吗

问题 目前,当我提交回复时,它将发布到我的数据库,但不会从服务器返回消息。 示例:当我发布
“hello”
时,我希望它能立即显示出来,而无需重新加载页面

这里是AJAX

<script>
$(document).ready(function(){
    $('#add-comment').submit(function()
    {
        var comment = $('#comment').val();
        var name = $('#anony').val();
        var rid = $('#rid').val();

        $('#response-out').html("<i class='fa fa-spinner fa-spin' style='font-size:19px;'></i>");
        $.ajax({
            type: 'POST',
            url: '/alter_reply.php', 
            data: 'comment='+comment+'&name='+name+'&rid='+rid,
        })
        .done(function(data){

            $('#response-out').html(data);

        })
        .fail(function() {

            alert( "Posting failed." );

        });
        return false;

    });
});
</script>
<?php

if($_POST){
$db_host = "localhost";
$db_user = "root";
$db_pass = "pass";
$db_name = "cods";

     try {
     $db_conn = new PDO("mysql:host={$db_host};dbname={$db_name}",$db_user,$db_pass);
     $db_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     $stmt = $db_conn->prepare("INSERT INTO replys(rid,mesreplys,rtime,rusername) VALUES(:rid,:mesreplys,:rtime,:rusername)");


$stmt->bindParam(':rid', $rid); 
$stmt->bindParam(':mesreplys', $comment);
$stmt->bindParam(':rtime', $timedate); 
$stmt->bindParam(':rusername', $user); 



$form = $_POST;
$rid = mysql_real_escape_string($form['rid']);
$comment = mysql_real_escape_string($form['comment']);
$timedate = date("Y-m-d H:i:s");
if(isset($_SESSION['username'])){
$user = $_SESSION['username'];
}else{
$anony_user = mysql_real_escape_string($form['name']);
$user = $anony_user;    
}


    $stmt->execute();

//I don't know how to do it again that why i echo back the submitted values
//if you can do it more better for me i will appricite
echo "<td><table>
                <tbody>
                    <tr>
                        <td class='comment-score'>
                                &nbsp;&nbsp;
                        </td>
                        <td>
                                &nbsp;
                        </td>
                    </tr>
                </tbody>
            </table>
        </td>";
     echo  "<td class='comment-text'>
            <div style='display: block;' class='comment-body'>";
                echo "<span class='comment-copy'>";
                echo "$comment"; 
                echo "</span> <a href='' class='comment-user'>";
                echo "$user"; 
                echo "</a> <span class='comment-date' dir='ltr'> @<a class='comment-link' href='#'><span title='' class='relativetime-clean'>";
                echo "$timedate"; 
        echo "</span></a></span></div></td>";

    }
catch(PDOException $e)
    {
    echo "Error:" . $e->getMessage();
    }
$db_conn = null;
}
?>

$(文档).ready(函数(){
$('#添加注释')。提交(函数()
{
var comment=$('#comment').val();
变量名称=$('#anony').val();
var rid=$('#rid').val();
$('#response out').html(“”);
$.ajax({
键入:“POST”,
url:“/alter_reply.php”,
数据:“comment=”+comment+”&name=“+name+”&rid=”+rid,
})
.完成(功能(数据){
$('#response out').html(数据);
})
.fail(函数(){
警报(“发布失败”);
});
返回false;
});
});
alter_reply.php

<?php

if($_POST){
$db_host = "localhost";
$db_user = "root";
$db_pass = "pass";
$db_name = "cods";

     try {
     $db_conn = new PDO("mysql:host={$db_host};dbname={$db_name}",$db_user,$db_pass);
     $db_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     $stmt = $db_conn->prepare("INSERT INTO replys(rid,mesreplys,rtime,rusername) VALUES(:rid,:mesreplys,:rtime,:rusername)");


$stmt->bindParam(':rid', $rid); 
$stmt->bindParam(':mesreplys', $comment);
$stmt->bindParam(':rtime', $timedate); 
$stmt->bindParam(':rusername', $user); 



$form = $_POST;
$rid = mysql_real_escape_string($form['rid']);
$comment = mysql_real_escape_string($form['comment']);
$timedate = date("Y-m-d H:i:s");
if(isset($_SESSION['username'])){
$user = $_SESSION['username'];
}else{
$anony_user = mysql_real_escape_string($form['name']);
$user = $anony_user;    
}


    $stmt->execute();

//I don't know how to do it again that why i echo back the submitted values
//if you can do it more better for me i will appricite
echo "<td><table>
                <tbody>
                    <tr>
                        <td class='comment-score'>
                                &nbsp;&nbsp;
                        </td>
                        <td>
                                &nbsp;
                        </td>
                    </tr>
                </tbody>
            </table>
        </td>";
     echo  "<td class='comment-text'>
            <div style='display: block;' class='comment-body'>";
                echo "<span class='comment-copy'>";
                echo "$comment"; 
                echo "</span> <a href='' class='comment-user'>";
                echo "$user"; 
                echo "</a> <span class='comment-date' dir='ltr'> @<a class='comment-link' href='#'><span title='' class='relativetime-clean'>";
                echo "$timedate"; 
        echo "</span></a></span></div></td>";

    }
catch(PDOException $e)
    {
    echo "Error:" . $e->getMessage();
    }
$db_conn = null;
}
?>

首先:请检查显示的php错误。
然后,我假设您正在使用FireBug之类的调试器来检查javascript和AJAX请求。
如果没有,请配置php错误并为浏览器安装调试器。
如果是,请确认AJAX没有返回JS错误或PHP错误

我的回答的目的是首先清理代码并尽量避免错误

Javascript:

<script>
$(document).ready(function(){
    $('#add-comment').submit(function()
    {
        var comment = $('#comment').val();        
        var rid = $('#rid').val();

        // Check if anony exist to avoid JS error
        if(0 < $('#anony').length)
        {
            var name = $('#anony').val();
            var dataToSend = 'comment='+comment+'&rid='+rid;
        }
        else
        {
            var name = '';
            var dataToSend = 'comment='+comment+'&rid='+rid;
        }

        var dataToSend = 

        $('#response-out').html("<i class='fa fa-spinner fa-spin' style='font-size:19px;'></i>");
        $.ajax({
            type: 'POST',
            url: '/alter_reply.php', 
            data: dataToSend,
        })
        .done(function(data){

            $('#response-out').html(data);

        })
        .fail(function() {

            alert( "Posting failed." );

        });
        return false;

    });
});
</script>

$(文档).ready(函数(){
$('#添加注释')。提交(函数()
{
var comment=$('#comment').val();
var rid=$('#rid').val();
//检查是否存在异常以避免JS错误
如果(0<$('anony')。长度)
{
变量名称=$('#anony').val();
var dataToSend='comment='+comment+'&rid='+rid;
}
其他的
{
变量名=“”;
var dataToSend='comment='+comment+'&rid='+rid;
}
var dataToSend=
$('#response out').html(“”);
$.ajax({
键入:“POST”,
url:“/alter_reply.php”,
数据:dataToSend,
})
.完成(功能(数据){
$('#response out').html(数据);
})
.fail(函数(){
警报(“发布失败”);
});
返回false;
});
});
PHP:

if(0setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常);
$stmt=$db_conn->prepare(“插入到应答(rid、mesreplys、rtime、rusername)值(:rid、:mesreplys、:rtime、:rusername)”);
//现在您有了第一个检索数据的功能,可以绑定了
$stmt->bindParam(':rid',$rid);
$stmt->bindParam(':mesreplys',$comment);
$stmt->bindParam(':rtime',$timedate);
$stmt->bindParam(':rusername',$user);
$stmt->execute();
}
捕获(PDO$e)
{
回显“错误:”..e->getMessage();
}
$db_conn=null;
//我不知道如何再做一次,这就是为什么我回显提交的值
//如果你能为我做得更好,我会通知你的
//清理HTML:你的标签在哪里交叉,你在跨距中包含跨距,不确定它是否有用
回音
''.
''.
''.
''.
'  '.
''.
''.
' '.
''.
''.
''.
''.
''.
“.$comment.”。
''.
''.
'@'.
''.
''.
''.
''.
''.
'';
}
其他的
{
回声“无数据”;
}

我终于找到了解决问题的办法 这就是我所做的,并且工作得很好

$(document).ready(function(e){
    $("#add-comment").submit(function(){
                var comment = $('#comment').val();
                var name = $('#anony').val();
                var rid = $('#rid').val();
    $.ajax({
    url:'/alter_reply.php',
    data:'comment='+comment+'&name='+name+'&rid='+rid,
    type: "POST",
    beforeSend: function(){
    $('#response-out').html("<i class='fa fa-spinner fa-spin' style='font-size:19px;'></i>");
    },
    success: function(data){
        $('#response-out').html(data);
    }
      });
   });
});
$(文档).ready(函数(e){
$(“#添加注释”).submit(函数(){
var comment=$('#comment').val();
变量名称=$('#anony').val();
var rid=$('#rid').val();
$.ajax({
url:“/alter_reply.php”,
数据:'comment='+comment+'&name='+name+'&rid='+rid,
类型:“POST”,
beforeSend:function(){
$('#response out').html(“”);
},
成功:功能(数据){
$('#response out').html(数据);
}
});
});
});

可能的副本请参见:
$rid=mysql\u real\u escape\u string($form['rid'])
$comment=mysql\u real\u escape\u string($form['comment'])
$anony\u user=mysql\u real\u escape\u字符串($form['name'])
,您在混合API。@RajdeepPaul当我删除
mysql\u real\u escape\u字符串时,您没有在alter\u reply.php页面的任何地方启动会话。在php脚本的最顶端添加这一行
。我确实启动了会话,但它发布得很好,但我希望它能够在不刷新页面的情况下回显数据
$(document).ready(function(e){
    $("#add-comment").submit(function(){
                var comment = $('#comment').val();
                var name = $('#anony').val();
                var rid = $('#rid').val();
    $.ajax({
    url:'/alter_reply.php',
    data:'comment='+comment+'&name='+name+'&rid='+rid,
    type: "POST",
    beforeSend: function(){
    $('#response-out').html("<i class='fa fa-spinner fa-spin' style='font-size:19px;'></i>");
    },
    success: function(data){
        $('#response-out').html(data);
    }
      });
   });
});