【问题标题】:html form data is not inserting in MySQL database using PHP and PDOhtml 表单数据未使用 PHP 和 PDO 插入 MySQL 数据库
【发布时间】:2017-10-20 00:02:56
【问题描述】:

因为我是新来的,所以我想具体说明我的问题。如果您需要更多信息,请告诉我。

每当我尝试提交表单时,它都不会显示有关代码的任何错误。它只显示回显语句“FAILED”

我正在使用这个循环来查看是否提交了值。这工作正常。它表明所有值都已提交,但这些值没有插入到数据库中。

foreach ($_POST as $key => $value) {
    echo "($key) => ($value)<br/>";
}

我的html表单代码是:

        <div class="formstyle">
        <h2> Sign up </h2>
<center>
<form method = 'POST' name="form1" onSubmit="return validateForm()" action="">

   <table border='0'>
 <tr>
  <td><LABEL for="firstname">First Name:<sup style="color:#F00">*</sup> </LABEL></td>
         <td><INPUT type="text" name = "fname" id="fname" value="<?php echo $fname;?>"></td><td width="200px"><i style="color:red;" id="pointfn"></i></td>
 </tr>
 <tr>
  <td><LABEL for="lastname">Last Name:<sup style="color:#F00">*</sup> </LABEL></td>
  <td><INPUT type="text" name ="lname" id="lname" value="<?php echo $lname;?>"> </td><td width="200px"><i style="color:red;" id="pointln"></i></td>
 </tr>

 <tr>
   <td><LABEL for="gender">Gender:<sup style="color:#F00">*</sup> </LABEL></td> <td>
   <INPUT type="radio" name="gender" id="gender" <?php if (isset($gender) && $gender=="male") echo "checked";?> value="male"> Male
   <INPUT type="radio" name="gender" id="gender" <?php if (isset($gender) && $gender=="female") echo "checked";?> value="female"> Female</td><td width="200px"> <i style="color:red;" id="pointgendr"></i></td>
 </tr>

  <tr>
  <td><LABEL for="email">Email:<sup style="color:red;">*</sup> </LABEL></td>
  <td><INPUT type="text" name = "email" id="email" value="<?php echo $email;?>"></td><td width="200px"><i style="color:red;" id="pointemail"></i></td>
 </tr>

 <tr>
  <td><LABEL for="password">Password:<sup style="color:#F00">*</sup> </LABEL></td>
  <td><INPUT type="password" name ="password" id="password" value="<?php echo $password;?>"></td><td width="200px"><i style="color:red;" id="pointpassword"></i></td>
 </tr>

 <tr>
  <td></td><td><br/><INPUT type="submit" name = "register" value="Create Account">
  <INPUT type="reset" onClick="return confirmreset()"></td>
 </tr>

 <tr>
  <td></td><td style="font-size:12px;text-align:right;"><br/><i style="color:red;font-size:12px;align:right;" >* - Mandatory</i></td>
 </tr>
    </table>

     </form></center>  

这是将所有内容插入数据库的 php 代码

    require('connect.php');

$fname = $lname = $gender = $email = $password = "";

if(isset($_POST['register'])){

    $stmt = $pdo->prepare('INSERT INTO user(fname,lname,gender,email,password)
    VALUES (:fname, :lname, :gender, :email, :password)');
    $stmt->bindValue(':fname',$fname);
    $stmt->bindValue(':lname',$lname);
    $stmt->bindValue(':gender',$gender);
    $stmt->bindValue(':email',$email);
    $passwordHash = password_hash($password, PASSWORD_BCRYPT, array("cost" => 12));
    $stmt->bindValue(':password',$passwordHash);
    $stmt->execute();


    $email_stmt = $pdo->prepare("SELECT email FROM user WHERE email = :email");
    $email_stmt->bindParam(':email', $email);
    $email_stmt->execute();

    if ($email_stmt->rowCount()>0){
        echo 'Email Already Exists. Use Different Email OR Login ';
        } else {
        //Successful Registration 
        echo 'Registration Successful';
    } 
} else {
    echo 'FAILED';
}

?>

任何帮助将不胜感激。干杯。

【问题讨论】:

  • 这些是你的变量吗?您对帖子的变量初始化似乎很粗略
  • 这表明isset($_POST['register']) 是空的。您认为这有什么价值?
  • @Akintunde 是的,所有这些都是变量。它说目前所有这些都是空的 $fname = $lname = $gender = $email = $password =
  • @Andy 所有这些值 fname、lname、gender、email 和密码。

标签: php html mysql database pdo


【解决方案1】:

看起来你不需要这个表单的 foreach。我认为您应该尝试例如:

echo  $_POST['fname'];

http://php.net/manual/en/reserved.variables.post.php

这个name = "fname"也应该是这个name="fname"

【讨论】:

  • 它说 Undefined index: fname 和所有其他变量
【解决方案2】:

您必须将 POST'S 放入变量中。 试试这个

    require('connect.php');

$fname = $lname = $gender = $email = $password = "";

if(isset($_POST['register'])){

    $fname = $_POST['fname'];
    $lname = $_POST['lname'];
    $gender = $_POST['gender'];
    $email = $_POST['email'];
    $password = $_POST['password'];

    $stmt = $pdo->prepare('INSERT INTO user(fname,lname,gender,email,password)
    VALUES (:fname, :lname, :gender, :email, :password)');
    $stmt->bindValue(':fname',$fname);
    $stmt->bindValue(':lname',$lname);
    $stmt->bindValue(':gender',$gender);
    $stmt->bindValue(':email',$email);
    $passwordHash = password_hash($password, PASSWORD_BCRYPT, array("cost" => 12));
    $stmt->bindValue(':password',$passwordHash);
    $stmt->execute();


    $email_stmt = $pdo->prepare("SELECT email FROM user WHERE email = :email");
    $email_stmt->bindParam(':email', $email);
    $email_stmt->execute();

    if ($email_stmt->rowCount()>0){
        echo 'Email Already Exists. Use Different Email OR Login ';
        } else {
        //Successful Registration 
        echo 'Registration Successful';
    } 
} else {
    echo 'FAILED';
}

?>

【讨论】:

  • 它说所有变量都是未定义的并且一个致命错误:未捕获的异常 'PDOException' 带有消息 'SQLSTATE[23000]:完整性约束违规:
  • @Arsh 您可能已经在数据库中注册了相同的电子邮件。如果可以,请先清除数据库数据。 (为了更好地理解发布整个错误消息)
  • 是的,我需要将 POSTS 放入变量中。当我在绑定两个值的地方添加 POST 时,它起作用了。谢谢你:)
【解决方案3】:

您正在检查使用插入后是否收到电子邮件

试试这个

 if(isset($_POST['register'])){

    $password = $_POST['password'];
    $fname = $_POST['fname'];
    $email = $_POST['email'];
    $lname = $_POST['lname'];
    $gender = $_POST['gender'];
    $passwordHash = password_hash($password, PASSWORD_BCRYPT, array("cost" => 12));

    //validate form here

    $email_stmt = $pdo->prepare("SELECT email FROM user WHERE email = :email");
    $email_stmt->bindParam(':email', $email);
    $email_stmt->execute();
    $result = $email_stmt->fetch(PDO::FETCH_ASSOC);

    if (empty($result)) {

        $stmt = $pdo->prepare('INSERT INTO user(fname,lname,gender,email,password)
        VALUES (:fname, :lname, :gender, :email, :password)');
        $stmt->bindValue(':fname',$fname);
        $stmt->bindValue(':lname',$lname);
        $stmt->bindValue(':gender',$gender);
        $stmt->bindValue(':email',$email);
        $stmt->bindValue(':password',$passwordHash);


        if ($stmt->execute()) {

            echo 'Registration Successful';
            }

            else {
                echo 'FAILED';
        } 
    }   


    else {
       echo 'Email Already Exists. Use Different Email OR Login ';

    } 
}

【讨论】:

  • 我试过你给定的代码。这对我来说似乎超级合法。但它没有显示任何消息天气它是成功还是失败。我认为 $stmt 没有执行。但我不确定。我是新手。
  • 您发现的有关电子邮件检查的错误是正确的。我也在努力,但到目前为止没有运气
  • 如果您收到任何错误消息,我再次测试它工作正常
  • 所以,我已经多次尝试过您的代码,但它终于奏效了。这是我实现的代码,有一个用于电子邮件的 if 语句。 if ($email_stmt->rowCount()>0){ echo '电子邮件已经存在。使用不同的电子邮件或登录'; }
  • 很高兴我能帮助 Arch :)
猜你喜欢
  • 2016-06-03
  • 1970-01-01
  • 1970-01-01
  • 2014-06-21
  • 2013-10-01
  • 1970-01-01
  • 2014-04-04
  • 2015-10-24
  • 1970-01-01
相关资源
最近更新 更多