Php 确认密码并检查注册表中的有效电子邮件
所以我得到了一份php的注册表格。我想添加密码确认和检查有效的电子邮件,什么是最好的方式去做这件事?我四处查看了一下,但似乎什么都不适合我。我想为客户端和服务器端都添加一个。我的代码:Php 确认密码并检查注册表中的有效电子邮件,php,email,passwords,Php,Email,Passwords,所以我得到了一份php的注册表格。我想添加密码确认和检查有效的电子邮件,什么是最好的方式去做这件事?我四处查看了一下,但似乎什么都不适合我。我想为客户端和服务器端都添加一个。我的代码: <?php error_reporting(E_ALL); define('DB_HOST', 'localhost'); define('DB_NAME', 'Users'); define('DB_USER', 'root'); define('DB_PASSWORD', ''); $con = m
<?php
error_reporting(E_ALL);
define('DB_HOST', 'localhost');
define('DB_NAME', 'Users');
define('DB_USER', 'root');
define('DB_PASSWORD', '');
$con = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); //Use MySQLi as MySQL is depreciated.
if (isset($_POST['submit'])) {
{
$error = false;
if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
echo "Invalid email format";
$error = true
}
}
{
if ($_POST['password'] !== $_POST['cpass']) {
echo "Password and confirm password fields do not match!";
$error = true;
}
}
//No need for functions, do it all here as otherwise you'll have to declare globals.
if (!$error) {
$query = mysqli_prepare($con, "SELECT * FROM Websiteusers WHERE email = ?"); //Preparing the SQL query (We don't insert values directly into the query)
mysqli_stmt_bind_param($query, "s", $_POST['email']); //Bind the email to the SQL query
mysqli_stmt_execute($query); //Execute the query
mysqli_stmt_store_result($query); //Store the results
if(mysqli_stmt_num_rows($query)) //Is the number of rows 0?
{
//Yes
echo "Det verkar som att du redan är registrerad";
}
else
{
//No
$query = mysqli_prepare($con, "INSERT INTO WebsiteUsers (firstname,efternamn,email,password) VALUES (?, ?, ?, ?)"); //Preparing the SQL query (We don't insert values directly into the query)
mysqli_stmt_bind_param($query, "ssss", $_POST['firstname'], $_POST['efternamn'], $_POST['email'], $_POST['password']); //Bind the params to the SQL query
mysqli_stmt_execute($query); //Execute the query
echo "Din registrering är slutförd";
}
}
}
?>
<!DOCTYPE HTML>
<html lang="sv">
<head>
<title>Registrera Dig</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<table>
<form method="POST" action="test.php">
<img class="bild">
<tr> <td class="ett">Namn</td><tr><td> <input class="två" type="text" name="firstname"></td> </tr></tr>
<tr> <td class="tre">Efternamn</td><tr><td> <input class="fyra"type="text" name="efternamn"></td></tr> </tr>
<tr> <td class="fem">Email</td><tr><td> <input class="sex"type="text" name="email"></td></tr></tr>
<tr> <td class="sju">Lösenord</td><tr><td> <input class="åtta"type="password" name="password"></td> </tr></tr>
<tr> <td class="nio" >Bekräfta lösenord </td> <tr><td><input class="tio" type="password" name="cpass"></td></tr> </tr>
<tr> <td><input class="skapa" id="button" type="submit" name="submit" value="Skapa konto"></td> </tr>
</form>
</table>
<img src="logo.png">
</body>
您可以这样编写验证规则:
if (isset($_POST['submit'])) {
if ($_POST['pass'] !== $_POST['cpass']) {
echo "Password and confirm password fields do not match!";
}
if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
echo "Invalid email format";
}
/*Other code*/
}
关于HTML,您可以添加诸如required之类的HTML属性,以处理空白验证。此外,输入型电子邮件的电子邮件将很方便
<input class="två" type="text" name="firstname" required>
<input class="fyra"type="text" name="efternamn" required>
<input class="sex" type="email" name="email" required>
<input class="åtta"type="password" name="password" required>
<input class="tio" type="password" name="cpass" required>
您可以这样编写验证规则:
if (isset($_POST['submit'])) {
if ($_POST['pass'] !== $_POST['cpass']) {
echo "Password and confirm password fields do not match!";
}
if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
echo "Invalid email format";
}
/*Other code*/
}
关于HTML,您可以添加诸如required之类的HTML属性,以处理空白验证。此外,输入型电子邮件的电子邮件将很方便
<input class="två" type="text" name="firstname" required>
<input class="fyra"type="text" name="efternamn" required>
<input class="sex" type="email" name="email" required>
<input class="åtta"type="password" name="password" required>
<input class="tio" type="password" name="cpass" required>
电子邮件:
检查电子邮件地址的有效性可以这样做
<?php
$email = "com@com.com";
if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
echo("$email is a valid email address");
} else {
echo("$email is not a valid email address");
}
?>
但是,您无法判断电子邮件地址是否真实。这就是为什么您需要使用激活密钥向用户发送电子邮件
生成一个唯一的hasha并将其存储在一个数据库表中,该表在insert上有一个时间戳,并带有一个用户id或电子邮件地址
电子邮件中的链接将指向一个页面,用于在30分钟内检查此数据的有效性?然后你知道电子邮件地址是有效的
密码:
主要取决于您使用的PHP版本。如果PHP7你很幸运,因为这真的很容易
2个函数,password\u verify()
,password\u hash()
首先,在注册时,将哈希密码存储在数据库列中。
现在登录时,使用用户提交的密码,并将其与数据库中的哈希密码进行比较
如果您使用的是PHP<5.5.0版本,我建议您查看一下现有的登录系统,因为很难开发安全可靠的登录系统
安全
改进用户提交数据的验证可能是明智的。
例如,如果我要创建一个值为:alert(document.cookie)
的用户名,或者包含一个托管在某个地方的脚本,我可以窃取cookie。如果我有你的会话cookie,我可以登录到你的帐户
检查用户名的最小、最大长度。]
使用正则表达式筛选允许的字符
不要以纯文本形式存储密码
确保数据长度不超过表列长度
始终验证mysqli\u stmt\u execute($query)
是否成功运行。(错误日志可以提供对onces系统的重要了解(不过,您可以禁用错误报告)
电邮:
检查电子邮件地址的有效性可以这样做
<?php
$email = "com@com.com";
if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
echo("$email is a valid email address");
} else {
echo("$email is not a valid email address");
}
?>
但是,您无法判断电子邮件地址是否真实。这就是您需要使用激活密钥向用户发送电子邮件的原因
生成一个唯一的hasha并将其存储在一个数据库表中,该表在insert上有一个时间戳,并带有一个用户id或电子邮件地址
电子邮件中的链接将引用一个页面,在30分钟内检查此数据的有效性?然后您就知道电子邮件地址是有效的
密码:
这主要取决于你使用的PHP版本。如果PHP7你运气好,那真的很容易
2个函数,password\u verify()
,password\u hash()
首先,在注册时,将哈希密码存储在数据库列中。
现在登录时,使用用户提交的密码,并将其与数据库中的哈希密码进行比较
如果您使用的是PHP<5.5.0版本,我建议您查看一下现有的登录系统,因为很难开发安全可靠的登录系统
安全
改进用户提交数据的验证可能是明智的。
例如,如果我要创建一个值为:alert(document.cookie)
的用户名,或者包含一个托管在某个地方的脚本,我可以窃取cookie。如果我有你的会话cookie,我可以登录到你的帐户
检查用户名的最小、最大长度。]
使用正则表达式筛选允许的字符
不要以纯文本形式存储密码
确保数据长度不超过表列长度
始终验证是否成功运行了mysqli\u stmt\u execute($query)
。(错误日志可以提供对onces系统的重要了解(不过,您可以禁用错误报告)
很好,它工作得很好,你知道电子邮件的任何方式吗?请看我编辑的帖子。我已经为所有字段添加了“必需”属性,并为电子邮件输入type=“email”。你能看看我更新的代码,看看问题出在哪里吗?即使我给出正确的电子邮件和密码,它也不会注册我。如果(isset($_POST['submit'])多次。只需在顶部指定一次。好的,修复了一个小问题,即它回显无效电子邮件,密码不匹配,但它仍然为我注册,我更新了上面的代码。它工作得很好,你知道电子邮件的任何方式吗?请查看我编辑的帖子。我添加了“必需”属性,并为电子邮件输入type=“email”。请查看我的更新代码,看看问题出在哪里,即使我提供了正确的电子邮件和密码,它也不会为我注册。如果(isset($\u POST['submit']),则无需写此项多次。只需在顶部指定一次。好的,修复了一个小问题,即它回显无效电子邮件,密码不匹配,但它仍然注册我,我更新了上面的代码。好的,谢谢指针,你知道任何好的,或者我可以在哪里查看?password\u hash()
和password\u verify()
是从PHP 5.5.0开始提供的。对于5.5.0>PHP>=5.3.7,有必要添加此功能。@Przemek我不知道这一点,谢谢你的有用评论。@Markus没有从我的头上开始,但快速搜索发现它看起来很可靠,但依赖于密码\u散列()
和密码\u验证()
。将其作为基础,唯一剩下的就是找到一个