【问题标题】:AJAX call return success message but post data never insert into dbAJAX 调用返回成功消息,但发布数据从不插入数据库
【发布时间】:2014-02-13 13:56:09
【问题描述】:

我有如下的建议.php 表单并调用 ajax 方法。我总是收到“谢谢”提醒,但发布数据从未插入数据库。我很确定我的连接字符串是正确的,因为它有时会插入记录,但大多数时候没有插入。

请帮忙。 问候, 亚历克斯

建议.php

<form class="suggestion" role="form" method="POST" action="suggestion_add.php">
      <div class="form-group"><label name="warnning" id="urlwarnning">Currently we only support YouTube as well as Vimeo videos</label></div>
      <div class="form-group"><input name="url" id="url" type="text" class="form-control" placeholder="URL" required></div>
      <div class="form-group"><input name="title" id="title" type="text" class="form-control" placeholder="Title" required></div>
      <div class="form-group"><textarea id="desc" name="desc" class="form-control" rows="5" placeholder="Description.." required></textarea></div>
      <div class="form-group"><input name="name" id="name" type="text" class="form-control" placeholder="Name" required></div>
      <div class="form-group"><input name="email" id="email" type="text" class="form-control" placeholder="Email ID" required></div>
      <button class="btn btn-lg btn-primary btn-block" type="submit">SUBMIT</button>
    </form>

功能

$(function () {
    $(document).on('submit', ".suggestion", function(e) {
        var name=$("#name").val();
        var email=$("#email").val();
        var url=$("#url").val();
        var title=$("#title").val();
        var desc=$("#desc").val();
        var formURL = $(this).attr("action");
        var youtube_regExp = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/;
        var vimeo_regExp = /https?:\/\/(?:www\.)?vimeo.com\/(?:channels\/|groups\/([^\/]*)\/videos\/|album\/(\d+)\/video\/|)(\d+)(?:$|\/|\?)/;
        var match = url.match(youtube_regExp);
        if (match&&match[2].length==11){
            var vid = match[2];
            var src = "youtube";
            var check = 1;
        }else{
            var match = url.match(vimeo_regExp);
            if (match){
                var vid = match[3];
                var src = "vimeo";
                var check = 1;
            }else{
                alert("not a valid url");
                var check = 0;

            }
        }
        if(check == 1){
            var data="title="+title+"&desc="+desc+"&src="+src+"&vid="+vid+"&name="+name+"&email="+email;

            $.ajax(
            {
                url : "suggestion_add.php",
                type: "POST",
                data : data,
                success:function(data, textStatus, jqXHR)
                {
                    $("#name").val("");
                    $("#email").val("");
                    $("#url").val("");
                    $("#title").val("");
                    $("#desc").val("");
                    alert("Thank you !");

                },
                error: function(jqXHR, textStatus, errorThrown)
                {
            alert(errorThrown);
                }
            });
        }else{
            alert("Check again!");
        }
        e.preventDefault();
    });

});

suggestion_add.php

<?php
include("config.php");
$con=mysql_connect($db_host,$db_uname,$db_pwd,$db_name);
mysql_select_db($db_name);
$src=$_POST['src'];
$name=$_POST['name'];
$email=$_POST['email'];
$title=$_POST['title'];
$desc=$_POST['desc'];
$vid=$_POST['vid'];
$query="INSERT INTO `suggestion` (`id`,`src`,`vid`,`title`,`desc`,`name`,`email`)VALUES (NULL,'$src','$vid','$title','$desc','$name','$email');";
$result=mysql_query($query);
?>

【问题讨论】:

  • 您正在使用已弃用的 mysql_* 函数,您的代码容易受到 SQL 注入的攻击
  • 只是几个建议:使用 PDO 防止 SQL 注入,您可以使用 jQuery 的 Serialize() 方法使提交表单数据更容易。
  • 您好,感谢您的建议。我稍后会更改准备好的语句,但我不知道为什么我的代码没有插入记录。
  • 你得到正确答案了吗?如果是,请将其标记为正确。否则,请随时对答案发表评论,以获得澄清和/或更多帮助。

标签: php jquery mysql ajax


【解决方案1】:

只要脚本suggestion_add.php 运行,就会调用成功。
我建议您在脚本末尾打印一些内容,例如:

header("Content-type: application/json");
die(json_encode(array("success" => $result))); 
// Where $result is true if query is OK else false.
// If you want the errror message to be passed to the javascript 
// function too you can add "error" => $error to the array too, 
// and then print it in the 'success' function.

然后在您的“成功”功能检查中:

success:function(data){
  if(data.success){
     //Do success
  } else {
     //Do failure
  }
}

另外,不要使用已弃用的 mysql_* 函数,请查看 mysqliPDO 以获得更好的 API,它们都有准备好的语句,这样您就不会打开 sql 注入漏洞。


编辑:
使用 jquery ajax 功能时不必将数据设置为 post 请求,可以这样做:

var data = {
  "title": title,
  "desc": desc,
  "src": src,
  "vid": vid,
  "name": name,
  "email": email
}

然后将对象data 作为data 参数传递。

编辑2:
如果您不知道如何从旧的已弃用的mysql_* api 中获取 mysql 错误,请使用mysql_error 函数。
类似的东西:

$result = mysql_query($query) or die(array("success" => false, "error" => mysql_error());

【讨论】:

    【解决方案2】:

    我认为你的数据没有传递到 php 文件,因为你发布了两次数据(在表单标签内)

    action="suggestion.php"

    在 jQuery ajax 中

     $.ajax(
                {
                    url : "suggestion_add.php",
                    type: "POST",
                    data : data,
                    success:function(data, textStatus, jqXHR)
                    {
    }});
    

    最好使用任何人来发布值.. 更改表单标签并尝试

     <form class="suggestion" >
    
            </form>
    

    我认为它会起作用..

    【讨论】:

    • 感谢 Eshwer。我已经按照您的建议进行了尝试,但没有成功。
    • k 试试这个.. 没有太大区别,但尝试 "INSERT INTO 建议 (id,src,vid,title,desc,name,email)VALUES ('$src','$vid',' $title','$desc','$name','$email');"
    【解决方案3】:

    会不会是你在表上设置了唯一索引,有时mysql不能插入重复键?

    你可以这样做看看mysql是否有错误:

    $result=mysql_query($query) or die('Query failed: ' . mysql_error());
    

    更新:

    $con = mysql_connect($db_host,$db_uname,$db_pwd) or die (mysql_error());
    mysql_select_db($db_name, $con);
    

    【讨论】:

    • 嗨,谢谢你的建议。我已经在脚本中添加了该代码,但我什么也没看到。
    • 您可以在 mysql_connect(...) 中执行相同的操作,以确保没有连接错误。
    • 好的,我终于收到了这个错误信息。查询失败:未选择数据库
    • 尝试检查您的 $db_name 是否正确并检查我的帖子更新。
    【解决方案4】:

    非常感谢您的所有建议。这是因为Single quote 而发生的。

    在我添加$dbc-&gt;real_escape_string($title) 后,它运行良好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-28
      • 2018-01-19
      • 1970-01-01
      • 2019-11-12
      • 2016-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多