Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 确认密码并检查注册表中的有效电子邮件_Php_Email_Passwords - Fatal编程技术网

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的注册表格。我想添加密码确认和检查有效的电子邮件,什么是最好的方式去做这件事?我四处查看了一下,但似乎什么都不适合我。我想为客户端和服务器端都添加一个。我的代码:

<?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验证()
    。将其作为基础,唯一剩下的就是找到一个