Разрешить отправлять форму с помощью PHP только указанным адресам электронной почты - PullRequest
0 голосов
/ 04 декабря 2018

Я создаю веб-страницу, которая должна быть доступна только людям, использующим @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>

И PHP для login.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.com, igor@example.com и jon@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 голосов
/ 05 декабря 2018

Попробуйте поработать с сеансами, вы можете проверить здесь .

Вы можете перенаправить на страницу без JavaScript, поэтому вместо:

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

используйте

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

Сначала вам нужно что-то вроде массива или базы данных, где хранятся разрешенные электронные письма.Я бы порекомендовал базу данных с ID, FullName, E-Mail.Затем вы можете просто сделать 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.');
}

И если вы не хотите, чтобы страница была доступна только после ввода действительного адреса электронной почты.сделайте то же самое. После того, как нажали кнопку отправки, сохраните E-Mail, введенный в текстовое поле, сделайте так:

$_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, это включить session_start (); в верхней части каждой страницы php! (это нужно запуститьперед выводом, поэтому в основном первая строка вашего файла)

Для сообщения «Привет, Джон» просто выберите или используйте тот, который выше, где вы перенаправляете на другую страницу и сохраняете имяв переменную $ _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(); в начале файла!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...