我遇到此错误:未能运行查询:SQLSTATE[23000]:完整性约束冲突:1048列“membersince”不能为空
在这里我试着运行我的注册页。
这是密码。我遗漏了什么吗?我检查了我的数据库表/输入名是否都正确命名为“membersince”,那么到底是什么问题呢?:(

   <?php
    require("config.php");
    if(!empty($_POST))
    {


       // =====================================================

        // Check if the username is already taken
        $query = "
            SELECT
                1
            FROM users
            WHERE
                username = :username
        ";
        $query_params = array( ':username' => $_POST['username'] );
        try {
            $stmt = $db->prepare($query);

            $result = $stmt->execute($query_params);

        }
        catch(PDOException $ex){ die("Failed to run query: " . $ex->getMessage()); }
        $row = $stmt->fetch();
        if($row){ die("This username is already in use"); }


        $query = "
            SELECT
                1
            FROM users
            WHERE
                email = :email
        ";
        $query_params = array(
            ':email' => $_POST['email']
        );
        try {
            $stmt = $db->prepare($query);
            $result = $stmt->execute($query_params);
        }
        catch(PDOException $ex){ die("Failed to run query: " . $ex->getMessage());}
        $row = $stmt->fetch();
        if($row){ die("This email address is already registered"); }



        $query = "
            SELECT
                1
            FROM users
            WHERE
                nric = :nric
        ";
        $query_params = array( ':nric' => $_POST['nric'] );
        try {
            $stmt = $db->prepare($query);
            $result = $stmt->execute($query_params);
        }
        catch(PDOException $ex){ die("Failed to run query: " . $ex->getMessage()); }
        $row = $stmt->fetch();
        if($row){ die("This NRIC is already in use"); }


                $query = "
            SELECT
                1
            FROM users
            WHERE
                mobilenumber = :mobilenumber
        ";
        $query_params = array( ':mobilenumber' => $_POST['mobilenumber'] );
        try {
            $stmt = $db->prepare($query);
            $result = $stmt->execute($query_params);
        }
        catch(PDOException $ex){ die("Failed to run query: " . $ex->getMessage()); }
        $row = $stmt->fetch();
        if($row){ die("This Mobile Number is already in use"); }





        //---------------------------------------------------- Add row to database
        $query = "
            INSERT INTO users (
                username,
                password,
                salt,
                email,
                name,
                gender,
                dateofbirth,
                nric,
                address,
                postalcode,
                mobilenumber,
                profession,
                membersince



            ) VALUES (
                :username,
                :password,
                :salt,
                :email,
                :name,
                :gender,
                :dateofbirth,
                :nric,
                :address,
                :postalcode,
                :mobilenumber,
                :profession,
                :membersince


            )
        ";

        // Security measures
        $salt = dechex(mt_rand(0, 2147483647)) . dechex(mt_rand(0, 2147483647));
        $password = hash('sha256', $_POST['password'] . $salt);
        for($round = 0; $round < 65536; $round++){ $password = hash('sha256', $password . $salt); }
        $query_params = array(
            ':username' => $_POST['username'],
            ':password' => $password,
            ':salt' => $salt,
            ':email' => $_POST['email'],
            ':name' => $_POST['name'],
            ':gender' => $_POST['gender'],
            ':dateofbirth' => $_POST['dateofbirth'],
            ':nric' => $_POST['nric'],
            ':address' => $_POST['address'],
            ':postalcode' => $_POST['postalcode'],
            ':mobilenumber' => $_POST['mobilenumber'],
            ':profession' => $_POST['profession'],
            ':membersince' => $_POST['membersince'],
        );
        try {
            $stmt = $db->prepare($query);

            $result = $stmt->execute($query_params);
        }
        catch(PDOException $ex){ die("Failed to run query: " . $ex->getMessage()); }
        header("Location: successful.php");
        die("Redirecting to successful.php");
    }

?>
<!-- Author: Michael Milstead / Mode87.com
     for Untame.net
     Bootstrap Tutorial, 2013
-->




<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description" content="">
    <meta name="author" content="">
    <link rel="shortcut icon" href="../../assets/ico/favicon.png">

    <title>Sign Up -</title>

    <!-- Bootstrap core CSS -->
    <link href="css/bootstrap.css" rel="stylesheet">

    <!-- Custom styles for this template -->
    <link href="jumbotron.css" rel="stylesheet">


    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
<script src="../../assets/js/html5shiv.js"></script>
<script src="../../assets/js/respond.min.js"></script>
<![endif]-->
  </head>

<body>
  <?php
if (empty($_SESSION['user']))
 {
 include_once("header.php");
 }
else     {
      include_once("header2.php");
      }?>

<div class="page-header">
      <div class="container">

    <h1> Register  </h1>


    <form action="register2.php" method="post" role="form">
    <div class="form-group">
        <label>Username:</label>
        <input type="text" name="username" value="" maxlength="20" autofocus required/>

        </div>
                 <div class="form-group">
        <label>Email: <strong style="color:darkred;">*</strong></label>
        <input type="email" name="email" value="" maxlength="20" required/>
              </div>

                             <div class="form-gtroup">
        <label>Password:</label>
        <input type="password" name="password" value="" maxlength="20" required/> <br /><br />
                                </div>

         <div class="form-group">
          <label>Name:</label>
        <input type="text" name="name" value="" maxlength="20" required/>
                           </div>





                                 <div class="form-group">
                                 <label>Gender:</label>
                         <div class="radio">

  <label>
    <input type="radio" name="gender" id="male" value="male" required>
    Male
  </label>
</div>
<div class="radio">
  <label>
    <input type="radio" name="gender" id="female" value="female" required>
    Female
  </label>
</div>
            </div>

                              <div class="form-group">

                               <label>Date of Birth:</label>
                               <input type="date" name="dateofbirth" value="" max="1997-12-31" required>
                                   </div>


                        <div class="form-group">
        <label>NRIC:</label>
        <input type="text" name="nric" value="" maxlength="9" required/>
                              </div>

                                 <div class="form-group">
        <label>Address:</label>
        <input type="text" name="address" value="" maxlength="50" />
                               </div>

                                <div class="form-group">
        <label>Postal Code:</label>
        <input type="text" name="postalcode" value="" maxlength="6" pattern="[1-9]{6}" title="Postal code must be 6 digit!" required/>
                          </div>


                                <div class="form-group">
        <div class="input-group">
  <span class="input-group-addon">+65</span>
  <input type="text" name="mobilenumber" value="" class="form-control" placeholder="Mobile Number" maxlength="8" pattern="[1-9]{8}" title="Mobile Number must be 6 digit!" required>
</div>
 </div>



                    <div class="form-group">
        <label>Profession:</label>
        <input type="text" name="profession" value="" maxlength="20" required>


                </div>

                        <div class="form-group">
            <input class="text" name="membersince" value=" <?php> $todaysdate = date("Y-m-d"); echo $todaysdate?>" type="text" disabled>
                       </div>

        <input type="submit" class="btn btn-info" value="Register" />
         <input type="reset" class="btn btn-info" value="Reset">


    </form>








</div>
</div>

      <?php include_once("footer.php");?>
</body>
</html>

最佳答案

我有一个类似的问题,但我修复了它,所以想分享,也许这将是有用的人。。。
通常当你遇到
完整性约束冲突:1048列名
如果未设置变量,通常会发生这种情况,在您的情况下,导致此问题的键是

<input class="text" name="membersince"
       value=" <?php> $todaysdate = date("Y-m-d"); echo $todaysdate?>"
       type="text" disabled>

因此,如果您在这里看到,您正在为这个特定的字段使用disabled属性,因此,您的form元素不会将这个字段的值发送到服务器,因此。。。当您在查询中使用以下内容时
':membersince' => $_POST['membersince']

将导致null,因为membersince数组中没有$_POST键。因此,请确保您分配的变量应该设置。

07-28 05:54