仅允许指定的电子邮件地址使用PHP

时间:2018-12-04 20:21:28

标签: javascript php html login

我正在创建一个网页,只有使用@example.com@subdomain.example.com的用户才能访问该页面。public_html文件夹具有一个index.php页面,然后其余内容位于example.com/content中,因此理想情况下/content子目录应该不可访问。

这是登录页面的HTML;

<form action="./login.php" method="post">
<input type="text" id="email" placeholder="Enter your work email address." name="email" required=""><br>
<input type="submit">
</form>

login.php的PHP是;

  <?php

    $email = 'email@subdomain.example.com';

    $domains = array('example.com', 'subdomain.example.com');

    $pattern = "/^[a-z0-9._%+-]+@[a-z0-9.-]*(" . implode('|', $domains) . ")$/i";

    if (preg_match($pattern, $email)) {
        echo '<script>
           window.location = "http://example.com/content/"
      </script>';
    } else {
        echo 'This is not a valid Company email address. Please go back and try again.';
    }
    ?>

<?php
$email = $_POST["email"];
$timestamp =date('l jS \of F Y h:i:s A');
$text = "Email: ".$email." At: ".$timestamp."\n";
$file = fopen("./users.txt","a+ \n");
 fwrite($file, $text);
 fclose($file);
?>

这个想法是,公司人员可以登录,但前提是他们的电子邮件地址与列表匹配,因此我将指定steve@example.comigor@example.comjon@example.com所有的人都可以登录。只应授予预定的电子邮件访问权限。如果电子邮件在@之前和@example.com之后均有效,则应将用户重定向到example.com/content,直到他们输入自己的电子邮件后才能访问example.com/content电子邮件地址。我还将存储一些东西,以便将jon2018@example.com设为jon2018@example.com = Jon,以便在页面上打印欢迎消息Hi, Jon

人员列表和他们登录的时间保存到.txt文件中。我只需要弄清楚为什么;

1当前,无论输入文本框如何,任何人都可以登录。

2如何将登录限制为仅预定的电子邮件地址,并验证它们是否为有效的电子邮件地址。

3存储Hi消息允许的电子邮件地址和名称,尽管可以跳过。

4确保在某人登录之前/content不可访问(理想情况下是一条消息,然后重定向到登录页面)。

我知道我也可以实现密码,但是我不具备执行此操作的能力或知识,因此,对我选择的电子邮件方法的任何帮助将不胜感激。我希望我已经对此进行了足够详细的解释。

任何帮助将不胜感激,在此先感谢:)

UPDATE 1

$users = array("jon@example.com", "igor@example.com", "steve@example.com");
if(($users = $users === TRUE){
header("Location: http://example.com/content/");
}else{
die('This is not a valid Company email address. Please go back and try again.');
}

如果我只是基于电子邮件对用户进行身份验证,而不与姓名相关联(即跳过欢迎消息),那么该工作方式将与上面的代码段(包括子域)相似。我只是不能使用SQL,因为它太复杂了。

1 个答案:

答案 0 :(得分:0)

尝试使用会话,可以检查here

您可以重定向到没有javascript的页面,而不是:

echo '<script>
window.location = "http://example.com/content/"
</script>';

使用

header("Location: http://example.com/content/");

首先,您需要类似允许接收电子邮件的数组或数据库之类的东西,    被存储。我建议使用ID,全名,电子邮件的数据库。然后,您可以使用电子邮件简单地对数据库执行sql查询,如果它返回的是真正的重定向,否则返回。示例:(首先建立连接(Google会帮助您),然后执行以下操作:

$sql = "SELECT * FROM users WHERE email=$email;";
if(($result = $dbConnection->query($sql)) === TRUE){
header("Location: http://example.com/content/");
}else{
//use die instead of echo
die('This is not a valid Company email address. Please go back and try again.');
}

并且如果您不想仅使页面可访问,则输入了有效的电子邮件。您基本上可以做同样的事情。单击“提交”按钮后,将在文本框中输入的电子邮件存储起来,如下所示:

$_SESSION['email'] = $email;

http://example.com/content/页上。您检查是否允许电子邮件访问此页面。所以:

$sql = "SELECT * FROM users WHERE email=$_SESSION['email']";
if($dbConnection->query($sql) != TRUE){
die("Not allowed to access this page, please enter an email at the Main Page");
//or simply redirect to the mainpage with header();
}else{
//show whatever you want to show
}

使用$ _SESSION要做的就是在每个php页面的顶部包含 session_start(); ! (必须先启动它,然后再进行输出,因此基本上是文件的第一行)

对于“嗨,乔恩”消息,只需进行选择或使用上面的消息,即可重定向到另一页,然后将名称保存到$ _SESSION变量中,如下所示:

$sql = "SELECT * FROM users WHERE email=$email;";
if(($result = $dbConnection->query($sql)) === TRUE){
$data = $result->fetch_assoc();
$_SESSION['Name'] = $data['FullName'];
header("Location: http://example.com/content/");
}else{
//use die instead of echo
die('This is not a valid Company email address. Please go back and try 
again.');
}

然后,您可以在http://example.com/content/上使用$_SESSION['Name']来访问变量。仅当您在文件开头使用session_start();时!