Это моя страница входа:
«Это форма, форма action =» «не установлена (может быть проблема?)
< form action = «» method = «POST»>
Имя пользователя: < input type = «text» name = «user»>
Пароль: < input type = «password» name = «pass»>
< input type = «submit» value = «Логин» name = «submit» />
< / Form>»
$query=mysql_query("SELECT * FROM login WHERE username='".$user."' AND password='".$pass."'");
$numrows=mysql_num_rows($query);
if($numrows!=0)
{
while($row=mysql_fetch_assoc($query))
{
$dbusername=$row['username'];
$dbpassword=$row['password'];
}
if($user == $dbusername && $pass == $dbpassword)
{
session_start();
$_SESSION['sess_user']=$user;
/* Redirect browser */
header("Location: member.php");
}
} else {
echo "Invalid username or password!";
}
вторая страница
<?php
session_start();
if(!isset($_SESSION["sess_user"])){
header("location:login.php");
} else {
Всякий раз, когда я нажимаю кнопку «Войти», вместо страницы, перенаправляющей меня, возвращается форма. Помогите, пожалуйста,
заранее спасибо
Почему бы не попробовать это так:
<?php
session_start();
$query = mysql_query("SELECT * FROM login WHERE username='" . $user . "' AND password='" . $pass . "'");
$numrows = mysql_num_rows($query);
if ($numrows > 0) {
while ($row = mysql_fetch_assoc($query)) {
$dbusername = $row['username'];
$dbpassword = $row['password'];
}
$_SESSION['sess_user'] = $user;
header("Location: http://peopleinvestment.ro/filip/member.php");
} else {
echo "Invalid username or password!";
}
это также умнее и короче, потому что вы проверяете 2 раза, если имя пользователя и пароль совпадают
Я действительно нашел другой способ:
в принципе :
echo "<script>
top.location='admin.php'
</script>"
Я думаю, что header () вызывает много ошибок. Так что вместо этого я использую это:
<meta http-equiv='refresh' content="0; url=yoururlhere"
Оставьте это как есть, и он перенаправит вас на новую страницу 🙂 Работает так же, как заголовок. Это должно исправить ваши проблемы.
РЕДАКТИРОВАТЬ
Хорошо, вот некоторые обновления, которые помогут сделать его более безопасным, и это должно решить вашу проблему! 🙂
Сначала давайте начнем с файла подключения к базе данных:
<?php
$db_username = ""; //Input your database username here
$db_password = ""; //Input your database password here
$db_host = ""; //Input your database host here
$db_name = ""; //Input your database name here
$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
try {
$connection = new PDO("mysql:host={$db_host};dbname={$db_name};charset=utf8", $db_username, $db_password, $options);
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $ex) {
echo "Can not connect to database.";
}
header('Content-Type: text/html; charset=utf-8');
?>
Выше будет подключен к вашей базе данных для вас! 🙂
Хорошо, теперь давайте работать с PHP (пожалуйста, поместите это в верхней части, перед вашими входами):
<?php
//Grabs the database connection
require("path to database connection file");
$user = $_POST["user"];
$pass = $_POST["pass"];
$query="SELECT * FROM login WHERE username=:username AND password=:password";
$params->execute(array(':username' => $user,
':password' => $pass));
try{
$stmt = $connection->prepare($query);
$result = $stmt->execute($params);
}
catch(PDOException $ex){
echo ("Failed to run query: " . $ex->getMessage());
}
$fetch = $stmt->fetch();
if($fetch) {
while($row=mysql_fetch_assoc($query)){
$usernamefetch=$fetch['username'];
$passwordfetch=$fetch['password'];
}
if($user == $usernamefetch && $pass == $passwordfetch)
session_start();
$_SESSION['sess_user']=$user;
?>
<meta http-equiv='refresh' content="0; url=page_to_redirect_to"<?php
{
else {
echo "Invalid username or password!";
}
}
else {
echo "Invalid username or password!";
}
?>
И это код, и он должен работать отлично! 🙂 Единственное, что вы должны изменить — это тег mets, на который нужно перенаправить. Тогда, конечно, ваш простой HTML:
<form action="" method="POST">
Username: <input type="text" name="user">
Password: <input type="password" name="pass">
<input type="submit" value="Login" name="submit" />
</form>
Пожалуйста, протестируйте этот код, я думаю, что теперь он будет работать намного лучше! 🙂 Не говоря уже о том, что это будет намного безопаснее.
РЕДАКТИРОВАТЬ
Наконец-то я получил это на 100% !!! 🙂 Хорошо, теперь используйте это:
<?php
$db_username = "peoplein"; //Input your database username here
$db_password = "xxxxxxx"; //Input your database password here
$db_host = "localhost"; //Input your database host here
$db_name = "xxxxxxxx"; //Input your database name here
$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
try {
$connection = new PDO("mysql:host={$db_host};dbname={$db_name};charset=utf8", $db_username, $db_password, $options);
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $ex) {
echo "Cannot connect to database.";
}
header('Content-Type: text/html; charset=utf-8');
?>
<!doctype html>
<html>
<head>
<title>Login</title>
</head>
<body>
<?php
if (isset($_POST["user"])) {
$user = $_POST["user"];
}
else {
$user = "";
}
if (isset($_POST["pass"])) {
$pass = $_POST["pass"];
}
else {
$pass = "";
}
$query="SELECT * FROM login WHERE username=:username";
$params=(array(':username' => $user));
try{
$stmt = $connection->prepare($query);
$result = $stmt->execute($params);
}
catch(PDOException $ex){
echo ("Failed to run query: " . $ex->getMessage());
}
$fetch = $stmt->fetch();
$passwordfetch=$fetch['password'];
if (password_verify($pass, $passwordfetch)) {
session_start();
$_SESSION['sess_user']=$user;
?>
<meta http-equiv='refresh' content="0; url=http://peopleinvestment.ro/filip/admin.php">
<?php
}
else {
echo "Invalid Information";
}
?>
<center>
<h3>Login</h3>
<form action="" method="POST">
Username: <input type="text" name="user">
Password: <input type="password" name="pass">
<input type="submit" value="Login" name="submit" />
</form>
</body>
</html>
НЕ ИЗМЕНЯЙТЕ НИЧЕГО, кроме db_password и db_name. Теперь следующая вещь, которую вы должны изменить. Прежде всего, если кто-то когда-либо попадал в вашу базу данных, ваши пароли НЕ защищены, потому что они не «хешированы». Теперь вы можете хешировать эти пароли, выполнив это право перед отправкой их в базу данных:
password_hash($pass, PASSWORD_DEFAULT);
Таким образом, непосредственно перед тем, как пользователь собирается зарегистрироваться, он автоматически вводит password_hash, а затем вводит его в базу данных. Теперь это ДОЛЖНО быть сделано, иначе приведенный выше код НЕ будет работать. Тем не менее, если вы решите не использовать password_hash (плохая идея), то вы можете просто использовать этот код: http://pastebin.com/SJisBwnB. Это должно исправить ваши проблемы, если какие-либо ошибки все еще возникают или если у вас есть какие-либо вопросы, просто сделайте еще один комментарий! 🙂 Это отлично сработало для меня.