我有如下的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);
?>
答案 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_*
函数,请查看mysqli
或PDO
以获取更好的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)
之后,它的效果非常好。