我遇到此错误:未能运行查询: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
键。因此,请确保您分配的变量应该设置。