我的目录中有2个文件:一个是js/form-validation-reg.js
,一个是HTML/registeruser.php
。 javascript文件验证我已经检查过的另一个html文件中的表单;所有值都一直传递到ajax,但值似乎没有发送到registeruser.php
以便在我的数据库中发送。
form-validation-reg.js:
//data string creation
var dataString = 'name='+ name
+ '&pass=' + pass
+ '&nationality=' + nationality
+ '&contactno=' + contactno
+ '&dateofbirth=' + dateofbirth
+ '&eaddress=' + eaddress
+ '&address=' + address
+ '&gender=' + gender
+ '&monthlysub=' + monthlysub;
//ajax
$.ajax({
type:"POST",
url: "HTML/registeruser.php",
data: dataString,
success: success(),
error:function(jqXHR, textStatus, errorThrown){
alert("Error type" + textStatus + "occured, with value " + errorThrown);
}
});
});
没有显示错误,我也尝试将网址设置为“../HTML/registeruser.php”,但它仍然无法正常工作。 PHP文件(注意:我还确保我的数据库详细信息正确。):
$name = stripslashes(strip_tags($_POST['name']));
$pass = stripslashes(strip_tags($_POST['pass']));
$nationality = stripslashes(strip_tags($_POST['nationality']));
$contactno = stripslashes(strip_tags($_POST['contactno']));
$dateofbirth = stripslashes(strip_tags($_POST['dateofbirth']));
$eaddress = stripslashes(strip_tags($_POST['eaddress']));
$address = stripslashes(strip_tags($_POST['address']));
$gender = stripslashes(strip_tags($_POST['gender']));
$monthlysub = stripslashes(strip_tags($_POST['monthlysub']));
$mysqli = new mysqli("localhost", "root", "","testdb")or exit("Error connecting to the database.");
$stmt = $mysqli->prepare("INSERT INTO user
(name, password, nationality, contactno, dateofbirth, email, address, gender, monthlysub)
VALUES (?,?,?,?,?,?,?,?,?)");
$stmt->execute();
$stmt->bind_param("sssssssss", $name, $pass, $nationality, $contactno, $dateofbirth, $eaddress, $address, $gender, $monthlysub);
$stmt->fetch();
$stmt->close();
$mysqli->close();
答案 0 :(得分:4)
尝试:
success: success,
而不是:
success: success(),
答案 1 :(得分:0)
不确定这是否有帮助,但是您的dataString变量看起来像是在构建它以进入使用get而不是post的URL。可能是你的php脚本不知道如何解析传递给它的内容,因为它正在查找post变量。由于您传递了密码,因此出于安全考虑,您不希望使用get。
答案 2 :(得分:0)
您需要在$ stmt-> execute();
之前调用$ stmt-> bind_param如果仍然存在问题,那么您需要将其分解以查看问题所在:
1)确保调用Javascript。在您的Javascript中添加alert()并重新加载页面。如果弹出警报,那么你就可以了,你可以排除任何包含URL问题。
2)如果您使用的是Firefox,请安装firebug,然后点击F12并查看控制台。您将看到HTML / registeruser.php被调用,您还将能够看到要发送的参数和其他信息。您也可以在Chrome中执行此操作。如果URL被调用并且您收到200响应,那么那里没有问题,这是您可以排除的另一件事。
3)此时我们排除了Javascript和Ajax调用。所以现在我们专注于数据库连接,然后是SQL查询。在registeruser.php上建立连接之后,执行您知道有记录的表的select语句,将它们回显以确保您确实有连接并且已连接到正确的数据库。
4)回显您的SQL语句以确保它具有所有参数。
顺便说一下,你还应该检查你的错误处理,而不是使用exit你应该检查mysqli错误,所以在新的mysqli调用之后再加上这个:
if (mysqli_connect_errno()) {
printf("Error connecting to the database: %s\n", mysqli_connect_error());
exit();
}
答案 3 :(得分:0)
您可以使用自动执行此操作的库,例如http://phery-php-ajax.net已自动在jQuery和PHP之间建立桥梁
phery.remote('registeruser', {
'name': name,
'pass': pass,
'nationality': nationality,
'contactno': contactno,
'dateofbirth': dateofbirth,
'eaddress': eaddress,
'address': address,
'gender': gender,
'monthlysub': monthlysub,
});
Phery::instance()->set(array(
'registeruser' => function($data){
$data = array_map('strip_tags', $data);
/* rest of mysql code */
return PheryResponse::factory(); // do any DOM manipulation, redirect, etc
}
))->process();