我想在我的注册表格中添加额外的字段,如出生日期,城市,国家和婚姻状况。我是PHP和PDO的新手。
这是我的代码:
PHP :
<?php
require 'core/init.php';
$general->logged_in_protect();
if (isset($_POST['submit'])) {
if (empty($_POST['username']) || empty($_POST['password']) || empty($_POST['email'])) {
$errors[] = 'All fields are required.';
} else {
if ($users->user_exists($_POST['username']) === true) {
$errors[] = 'That username already exists';
}
if (!ctype_alnum($_POST['username'])) {
$errors[] = 'Please enter a username with only alphabets and numbers';
}
if (strlen($_POST['password']) <6) {
$errors[] = 'Your password must be atleast 6 characters';
} else if (strlen($_POST['password']) >18) {
$errors[] = 'Your password cannot be more than 18 characters long';
}
if (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false) {
$errors[] = 'Please enter a valid email address';
} else if ($users->email_exists($_POST['email']) === true) {
$errors[] = 'That email already exists.';
}
}
if (empty($errors) === true) {
$username = htmlentities($_POST['username']);
$password = $_POST['password'];
$email = htmlentities($_POST['email']);
$users->register($username, $password, $email);
header('Location: register.php?success');
exit();
}
}
HTML :
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" href="css/style.css">
<title>Register</title>
</head>
<body>
<div class="nav-bar" style="box-shadow:0 0 5px 0 rgba(0, 0, 0, 0.4);">
<?php include 'includes/menu.php'; ?>
</div>
<!-- NAV BAR DIV closes here -->
<div id="main-wrap" style="box-shadow:0 0 5px 0 rgba(0, 0, 0, 0.4);">
<div id="container">
<h1>Register</h1>
<?php if (isset($_GET['success']) && empty($_GET['success'])) { echo 'Thank you for registering. Please check your email.'; } ?>
<form method="post" action="">
<h4>Username:</h4>
<input type="text" name="username" value="<?php if (isset($_POST['username'])) echo htmlentities($_POST['username']); ?>">
<h4>Password:</h4>
<input type="password" name="password" />
<h4>Email:</h4>
<input type="text" name="email" value="<?php if (isset($_POST['email'])) echo htmlentities($_POST['email']); ?>" />
<br>
<input type="submit" name="submit" value="Register" />
</form>
<?php if (empty($errors) === false){ echo '<p>' . implode('</p><p>', $errors) . '</p>'; } ?>
</div>
<!-- Container DIV closes here -->
</div>
<!-- Main Wrap DIV closes here -->
</body>
</html>
如何添加额外字段?
答案 0 :(得分:1)
这是一个非常开放的问题。您需要使用代码来处理将输入添加到数据库,但这需要一个单独的问题。
对于PHP,您需要决定如何验证每个字段,然后为每个问题添加另一个if
块。对于HTML,您需要为每个字段添加另一个输入。
对于出生日期,您应该确保它是有效日期。然后你可能也想验证年龄。
您可以在出生日期使用这样的PHP代码:
//test date
try {
$max_date = new DateTime('13 years ago');
$birth_date = new DateTime($_POST['birth_date']);
if ($birth_date > $max_date) { {
$errors[] = 'You must be at least 13 years old.';
}
} catch (Exception $e) {
$errors[] = 'Birth date is not a valid date.';
}
然后,您可以使用以下内容格式化MySQL的日期:
$birth_date->format('Y-m-d');
相关的PHP手册页:
您可以在出生日期使用这样的HTML代码:
<h4>Birth Date:</h4>
<input type="text" name="birth_date" value="<?php if (isset($_POST['birth_date'])) echo htmlentities($_POST['birth_date']); ?>" />
您还可以将输入格式化为日期的每个部分的单独字段,并使用下拉菜单。我发现这是必要的,因为DateTime
类可以处理各种格式。但是,我通常添加jQuery Datepicker以使其更加用户友好。
以上应该给你一个很好的起点。你可以为每个领域做类似的事情。如果您希望此处的人员提供帮助,您需要显示更多个人努力。
如果您对如何验证其他输入有特定问题,您应该发布一个单独的问题(首先搜索答案后)。展示你尝试过的东西。描述结果并解释它与预期结果的不同之处。
我将两个if
块组合成用户名。如果用户名已存在,则无需验证格式。
if ($users->user_exists($_POST['username']) === true) {
$errors[] = 'That username already exists';
} else if (!ctype_alnum($_POST['username'])) {
$errors[] = 'Please enter a username with only alphabets and numbers';
}
将empty($errors)
的返回值与true或false进行比较是多余的。返回值始终是布尔值。您只需if (empty($errors))
或if (!empty($errors))
。
您应该在HTML中使用label
元素而不是h4
元素,以使HTML更加语义化。然后,您可以根据需要使用CSS来设置它们的样式。
<label for="fld-password">Password:</label>
<input type="password" id="fld-password" name="password" />