AJAX调用返回成功消息,但是后期数据永远不会插入到db中

时间:2014-02-13 13:56:10

标签: php jquery mysql ajax

我有如下的suggestion.php表单并调用ajax方法。我总是得到“谢谢你”的提醒,但是帖子数据永远不会插入数据库。我非常确定我的连接字符串是正确的,因为它有时插入记录但大部分时间都没有插入。

请帮忙。 问候, 亚历

suggestion.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);
?>

4 个答案:

答案 0 :(得分:2)

只要脚本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,这些API都已准备好语句,因此您无需打开sql-injection漏洞。


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

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

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

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

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

答案 1 :(得分:0)

我认为您的数据没有传递给php文件,因为您要将数据发布两次(在表单标记内)

  

行动= “suggestion.php”

和jQuery ajax

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

更好地使用任何人发布值..更改表单标记并尝试

 <form class="suggestion" >

        </form>

我认为它会起作用..

答案 2 :(得分:0)

可能是您在表上设置了唯一索引,有时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);

答案 3 :(得分:0)

非常感谢你的所有建议。这是因为Single quote

添加$dbc->real_escape_string($title)之后,它的效果非常好。