-2

我的目录中有 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);
                           }

    });
});  

没有显示错误,我也尝试将 url 设置为“../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();
4

4 回答 4

4

尝试:

success: success,

代替 :

success: success(),
于 2012-11-11T18:21:42.667 回答
0

不确定这是否有帮助,但您的 dataString 变量看起来就像您正在构建它以进入一个使用 get 而不是 post 的 URL。可能是您的 php 脚本不知道如何解析传递给它的内容,因为它正在查看 post 变量。由于您要传递密码,但出于安全原因,您不想使用 get 。

于 2012-11-11T18:57:15.723 回答
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();
于 2012-11-12T03:30:02.097 回答
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();
}
于 2012-11-11T19:33:41.320 回答