确认密码并在注册表格中检查有效的电子邮件php

时间:2016-03-14 16:33:21

标签: 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 = 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>

2 个答案:

答案 0 :(得分:1)

您可以这样编写验证规则:

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,您可以添加所需的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>

答案 1 :(得分:1)

电子邮件:

检查有效期的电子邮件地址可以这样做。

<?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");
  }
?>

但是,您无法判断电子邮件地址是否真实。这就是您需要使用激活密钥向用户发送电子邮件的原因。

生成一个唯一的哈希并将其存储在数据库表中,其中插入时带有时间戳,并带有用户ID或电子邮件地址。

电子邮件中的链接是指在30分钟内检查有效性数据的页面?然后你知道电子邮件地址是有效的。

密码:

主要取决于您使用的PHP版本。如果PHP 7运气好,那真的很容易。

2个功能,password_verify()password_hash()1 2

首先在数据库列中注册存储散列密码。 现在登录,使用用户提交的密码,并将其与数据库中的散列密码进行比较。

如果你使用的是PHP版本&lt; 5.5.0,我建议您查看现有的登录系统,因为很难开发安全可靠的登录系统。

安全

改进用户提交数据的验证可能是明智之举。 例如,如果我要创建一个值为<script>alert(document.cookie)</script>的用户名,或者包含托管在某处的脚本,我可以窃取cookie。如果我有会话cookie,我可以登录您的帐户。

  1. 检查最小,最大长度的用户名。]
  2. 使用正则表达式过滤允许的字符。
  3. 不要以纯文本格式存储密码。
  4. 确保数据长度不超过表格列长度。
  5. 始终验证mysqli_stmt_execute($query)是否成功运行。 (错误日志可以提供对onces系统的重要洞察(但是,您可以禁用错误报告)