2014-09-05 4 views
-1

Я создаю веб-сайт, защищенный паролем, но я не могу заставить его работать правильно. Я установил его для перехода на домашнюю страницу, если пароль правильный & на другую страницу, если пароль неверен. Я написал код, но каждый раз, когда я его запускаю, он переходит на страницу, отображающую, если пароль неверен. Я знаю, что чего-то не хватает в коде, но я не уверен, что это такое.Проверка базовой формы PHP

HTML

<table> 
<form action="index.php" method="post"> 
<tr> 
<td><input type="password" name="password" /></td> 
<td><input type="submit" name="submit" value="Request Permission" /></td> 
</tr> 
</form> 
</table> 

PHP

$pass = $_POST['password']; 

if ($pass == "Password") { 
header('Location:home.php'); 
} else { 
header('Location:wrong.php'); 
exit; 
} 

Можете ли вы мне помочь?

+0

Sidenote: 'heade г ('Location: home.php'); exit; ' –

+0

В коде нет ничего плохого. «Пароль» и «пароль» - это не одно и то же, так должно быть. См. Мой выше комментарий о добавлении 'exit;' в ваш первый заголовок. Кроме того, хэш ваши пароли, вы будете взломаны с помощью текстовых паролей. –

ответ

2

Вы не проверяете, отправлена ​​ли форма. Ты просто идешь прямо в свою логику.

И простой способ проверить, получила ли страница форму отправки формы, чтобы проверить способ запроса.

if('POST' === $_SERVER['REQUEST_METHOD']) { 
    $pass = $_POST['password']; 

    if ($pass == "Password") { 
    header('Location:home.php'); 
    } else { 
    header('Location:wrong.php'); 
    exit; 
    } 
} 

Вы также можете проверить, если $_POST['submit'] установлен и имеет значение.

FYI, возможно, захочет поставить exit после первого звонка header(). Кроме того, это не отличный способ проверить пароли. Можете рассмотреть возможность использования базы данных и хэширования паролей. Вы также должны добавить некоторую проверку данных (т. Е. Убедитесь, что поле пароля не пустое).

+0

что вы делаете ... сравнивая '$ pass' с' Password' –

+0

Я тестировал код OP, я неспособен воспроизвести, но мой тест был успешным при использовании простых эхо (правильно/неправильно). –

0
if ($_POST['password'] AND $_POST['password'] == "Password") 
{ 
    header('Location:home.php'); 
} else 
{ 
    header('Location:wrong.php'); 
    exit; 
} 
0

добавить это вокруг PHP:

if(isset($_POST['submit'])) { 

} 

Это будет работать нормально, то, на странице загрузки код считывается, и, как $ _POST [ «пароль»] не имеет никакого значения в этом вы перенаправляетесь на wrong.php.

0

Попробуйте

if('POST' === $_SERVER['REQUEST_METHOD']) { 
    $pass = $_POST['password']; 

    if ($pass == "Password") { 
    header('Location:home.php'); 
    } else { 
    header('Location:wrong.php'); 
    exit; 
    } 
} 
else{ 
    echo'<table> 
    <form action="index.php" method="post"> 
    <tr> 
    <td><input type="password" name="password" /></td> 
    <td><input type="submit" name="submit" value="Request Permission" /></td> 
    </tr> 
    </form> 
    </table>'; 
} 
0

Рассмотрим следующую систему со следующими страницами:

index.php - здесь мы имеем нашу форму Войти

<?php 
    session_start(); 

    if ((isset($_POST['password']) && $_POST['password'] == "Password") || $_SESSION['auth'] == 1) 
    { 
     header('Location:home.php'); 
    } 
    else 
    { 
     header('Location:wrong.php'); 
    } 
?> 

<table> 
<form action="index.php" method="post"> 
<tr> 
<td><input type="password" name="password" /></td> 
<td><input type="submit" name="submit" value="Request Permission" /></td> 
</tr> 
</form> 
</table> 

Ваш файл home.php

<?php 
    session_start(); 
    if ($_GET['logout'] == 1) 
    { 
     session_destroy(); 
    } 

    if ($_SESSION['auth'] == 1) 
    { 
     //show stuff to the logged in user 
     //display log-out option 
     echo '<a href="home.php?logout=1">Logout</a>'; 
    } 
    else 
    { 
     //redirect the user to the login page 
     header('Location:index.php'); 
    } 
?> 
Смежные вопросы