хорошо, поэтому я хочу войти в систему как пользователь и администратор, моя таблица пользователя называется «sollicitant», а мой администратор – «bedrijf» (это голландский lol извините). код, который я имею сейчас, работает только для 1 таблицы, но как я могу получить sql-запрос, который выглядит в обеих таблицах для входа?
<?php if(isset($_POST['email'])) { $inputEmail = htmlspecialchars($_POST['email']); $inputWachtwoord = htmlspecialchars($_POST['wachtwoord']); $servername = "localhost"; $databasename = "vacaturebank."; $username = "root"; $password = ""; try { $conn = new PDO("mysql:host=$servername; dbname=$databasename", $username, $password); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e) { echo "Connection failed: " . $e->getMessage(); return; } try { $stmt = $conn->prepare("SELECT * FROM sollicitant WHERE email = '$inputEmail'"); $stmt->execute(); $result = $stmt->setFetchMode(PDO::FETCH_ASSOC); $row = $stmt->fetch(); $rowCount = $stmt->rowCount(); if ($rowCount) { if ($inputWachtwoord == $row['wachtwoord']) echo "<br/>Successvol ingelogd"; else echo "<br/>Gebruikersnaam en wachtwoord komen niet overeen."; header("Location: inloggen.html"); } else { echo "<br/>Login failed, no record found"; } } catch(PDOException $e) { echo "Error: " . $e->getMessage(); } $conn = null; session_start(); $_SESSION["login"] = true; $_SESSION["email"] = $inputEmail; } ?>
Вам нужно указать обе таблицы с столбцом email
:
SELECT * FROM sollicitant, bedrijf WHERE sollicitant.email = '$inputEmail' AND bedrijf.email = '$inputEmail'
Другая возможность заключается в использовании явного JOIN с псевдонимом «(« Псевдоним »только для того, чтобы сократить его, вам не нужно их использовать):
SELECT * FROM sollicitant s, bedrijf b ON s.email = b.email WHERE s.email = '$inputEmail'
Это означает, что вам нужно учитывать только eamil в одном столбце одной таблицы, поскольку JOIN
гарантирует, что вы получите только те строки, у которых есть соответствующее письмо. Если запрос пуст, письмо не существует в обоих случаях.
Если вы хотите решить, куда идти, исходя из роли пользователя, вы должны объединить всех пользователей в одну таблицу с столбцом, который определяет роль пользователя:
SELECT * FROM users WHERE email = '$inputEmail'
Затем PHP, как только вы извлекли данные:
if('sollicitant' == $row['role']) { header('Location: sollicitant.php'); exit(); } elseif ('bedrijf' == $row['role']) { header('Location: befrijf.php'); exit(); } else { echo 'There is a problem with your login.'; }
… как говорили другие …
Маленький Бобби говорит, что ваш сценарий подвержен риску инъекций SQL. , Даже экранирование строки небезопасно!
Я ненавижу, когда люди говорят: «Я не так далеко …» или «Этот сайт не будет публичным …» или «Это только для школы, поэтому безопасность не имеет значения …» . Если учителя и профессора не говорят о безопасности с первого дня, они делают это неправильно. Бросьте вызов им. Они учат неаккуратным и опасным методам кодирования, которые ученикам придется отучить позже. Я также ненавижу, когда люди говорят: «Я добавлю безопасность позже …» или «Безопасность сейчас не важна …» или «Игнорировать риск безопасности …» .
Никогда не храните простые текстовые пароли! Для обеспечения безопасности паролей используйте встроенные функции PHP . Если вы используете версию PHP менее 5.5, вы можете использовать пакет совместимости password_hash()
. Нет необходимости выходить из паролей или использовать любой другой механизм очистки перед их хэшированием. Это меняет пароль и вызывает ненужное дополнительное кодирование.