为什么这段代码不能将数据插入数据库?

时间:2015-11-19 11:37:32

标签: php html sql forms

这是我的注册表单我使用javascript和php验证表单,javascript代码很好地显示验证错误消息然而有些错误的PHP代码,当javascript被禁用时php代码应该通过refrshing页面显示表单验证错误消息在表单提交,但没有出现错误消息,也没有插入数据。单击“提交”时,将重新加载页面,但不显示表单。

<?php
 error_reporting('E_ALL ^ E_NOTICE');
 if(isset($_POST['reg'])){
 $fn = ucfirst($_POST['fname']);
 $ln = ucfirst($_POST['lname']);
 $un = $_POST['username'];
 $em = $_POST['email'];
 $pswd = $_POST['password'];
 $d= date("Y-m-d");
if (strlen($fn) < 2 || strlen($fn) > 15) {
$error =  "First name must be 2 to 15 characters long";
 }
elseif (strlen($ln) < 2 || strlen($ln) > 15) {
$error =  "Last name must be 2 to 15 characters long";
}
elseif($em==""){
$error =  "Email cannot be empty";
}
elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$er = "Invalid email format";
}
elseif($pswd==""){
$error =  "Fill your password";
}
elseif($pswd!=$pswd2){
$error =  "Password and Confirm password do no match";
}
else{

$pswd = password_hash($pswd, PASSWORD_DEFAULT);
$stmt = $db->prepare("INSERT INTO table1 (username,firstname,lastname,email,password) VALUES (:username,:firstname,:lastname,:email,:password)");  
$stmt->execute(array(':username'=>$un,':firstname'=>$fn,':lastname'=>$ln,':email'=>$em,':password'=>$pswd));
}
if ($stmt->rowCount() == 1) {
 header("Location:login.php");
} 
else {
echo "Error occured please try again.";
}
}
?>

<form action="" method="post">
<input type="text" name="fname" id="fn" placeholder="First Name"/><br />
<input type="text" name="lname" id="ln"  placeholder="Last Name"/><br />
<input type="text" name="username" id="un" placeholder="Username" class="username" /><br />
<input type="email" name="email" id="em" placeholder="Email"/> <br />
<input type="password" name="password" id="pswd" placeholder="Password"/><br />
<input type="password" name="password2" id="pswd2" placeholder="Confirm Password"/><br />
<input type="submit" id="submit" name="reg" value="Create an Account">
<center><div id="er"><?php echo $error ?></div></center>
</form>

3 个答案:

答案 0 :(得分:3)

你应该回复$error而不是$er

<center><div id="er"><?php echo $error; ?></div></center>

答案 1 :(得分:1)

你犯了一个错误:

$stmt->execute(array(':username'=>$un,':firstname'=>$fn,':lastname'=>$ln,':email'=>$em,':password'=>$pswd));

您应该使用&#39;用户名&#39;而不是&#39;:用户名&#39;。像这样:

$stmt->execute(array('username'=>$un,'firstname'=>$fn,'lastname'=>$ln,'email'=>$em,'password'=>$pswd));

答案 2 :(得分:0)

您的代码中存在一些不一致之处。

在开始时,您将$_POST['email']分配给$em,但稍后您会针对名为$email的变量进行验证,此变量此时并不存在。

$em = $_POST['email'];
.
.
.
elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    $er = "Invalid email format"; //should maybe be $error
}

然后是密码验证:

elseif($pswd!=$pswd2){
    $error =  "Password and Confirm password do no match";
}

$pswd2从未在您的代码中定义过。

$stmt ist在验证的else块中定义,但您在验证后使用它来获取行计数。因此,如果您的任何if语句为真,则会导致错误。

如果将代码的这一部分更改为:

,那会更好
else{
    $pswd = password_hash($pswd, PASSWORD_DEFAULT);
    $stmt = $db->prepare("INSERT INTO table1 (username,firstname,lastname,email,password) VALUES (:username,:firstname,:lastname,:email,:password)");
    $stmt->execute(array(':username'=>$un,':firstname'=>$fn,':lastname'=>$ln,':email'=>$em,':password'=>$pswd));

    if ($stmt->rowCount() == 1) {
        header("Location:login.php");
    }
    else {
        echo "Error occured please try again.";
    }
}

毕竟,似乎您没有错误报告激活。