У меня есть следующая форма входа (login.php), в которой я прошу ввести имя пользователя и пароль.
<form action="processlogin.php" method="post"> <input type="text" name="username"> <input type="password" name="password"> <input type="submit" value="Login"> </form>
Ниже приведен фрагмент кода из файла processlogin.php
if(!$_POST["username"] || !$_POST["password"]) { $msg = "You left one or more of the required fields."; echo $msg; //header("Location:http://localhost/login.php"); }
Этот код проверяет, не заполнены ли все обязательные поля. Если нет, отображается сообщение об ошибке.
До сих пор все в порядке.
Моя проблема заключается в том, что сообщение об ошибке отображается на простой белой странице. Я хочу показать его выше формы входа в файл login.php. Как мне изменить свой код, чтобы получить мою функциональность.
Я бы предпочел Jquery Validation или Ajax на основе аутентификации. Но все же вы можете сделать это так:
Поместите сообщение об ошибке в сеанс следующим образом:
$_SESSION['Error'] = "You left one or more of the required fields.";
Чем просто показать это так:
if( isset($_SESSION['Error']) ) { echo $_SESSION['Error']; unset($_SESSION['Error']); }
сif( isset($_SESSION['Error']) ) { echo $_SESSION['Error']; unset($_SESSION['Error']); }
В этом случае вы можете назначить несколько сообщений в разных операциях.
header("Location:http://localhost/login.php?x=1")
В login.php
if(isset($_GET('x'))){ //your html for error message }
Вы можете отобразить сообщение в таблице или пробеле выше формы.
<span> <?php if(isset($_REQUEST[$msg])) echo $msg; ?> </span> <form> </form>
А также не echo $ msg на странице действия формы.
Попробуй это:
HTML:
<form action="processlogin.php" method="post"> <input type="text" name="username"> <input type="password" name="password"> <input type="submit" value="Login"> <span> <?php if(isset($_GET['msg'])) echo $_GET['msg']; ?> </span> </form>
PHP:
if(!$_POST["username"] || !$_POST["password"]) { $msg = "You left one or more of the required fields."; header("Location:http://localhost/login.php?msg=$msg"); }
Надеюсь, это поможет вам,
В processlogin.php,
if(!$_POST["username"] || !$_POST["password"]) { $msg = "You left one or more of the required fields."; $msgEncoded = base64_encode($msg); header("location:login.php?msg=".$msgEncoded); }
в файле login.php,
$msg = base64_decode($_GET['msg']); if(isset($_GET['msg'])){ if($msg!=""){ echo $msg; } }
<?php if($_SERVER['REQUEST_METHOD'] == "POST") { if(!$_POST["username"] || !$_POST["password"]) { $msg = "You left one or more of the required fields."; echo $msg; //header("Location:http://localhost/login.php"); } } ?> <form action="<?php echo $PHP_SELF;?>" method="post"> <input type="text" name="username"> <input type="password" name="password"> <input type="submit" value="Login"> </form>
Используйте только одну страницу (ваш login.php
), чтобы отобразить форму, а также проверить ее данные при отправке. Поэтому вам не нужны переменные $ _SESSION, и у вас есть все в одном и том же файле, который принадлежит вместе.
<?php $msg = null; if(isset($_GET['send'])) { if(!$_POST["username"] || !$_POST["password"]){ $msg = "You left one or more of the required fields."; //header("Location:http://localhost/login.php"); } } ?> <?php echo ($msg !== null)?'<p>ERROR: ' . $msg . '</p>':null; ?> <form action="?send" method="post"> <input type="text" name="username"> <input type="password" name="password"> <input type="submit" value="Login"> </form>
используйте следующие функции:
<?php session_start(); define(FLASH_PREFIX,'Flash_') function set_flash($key,$val){ $_SESSION[FLASH_PREFIX.$key]=$val; } function is_flash($key){ return array_key_exits(FLASH_PREFIX.$key,$_SESSION); } function get_flash($key){ return $_SESSION[FLASH_PREFIX.$key]; } function pop_flash($key){ $ret=$_SESSION[FLASH_PREFIX.$key]; unset($_SESSION[FLASH_PREFIX.$key]); return $ret; } ?>
с<?php session_start(); define(FLASH_PREFIX,'Flash_') function set_flash($key,$val){ $_SESSION[FLASH_PREFIX.$key]=$val; } function is_flash($key){ return array_key_exits(FLASH_PREFIX.$key,$_SESSION); } function get_flash($key){ return $_SESSION[FLASH_PREFIX.$key]; } function pop_flash($key){ $ret=$_SESSION[FLASH_PREFIX.$key]; unset($_SESSION[FLASH_PREFIX.$key]); return $ret; } ?>
И когда вы хотите отправить сообщение на другую страницу, используйте
set_flash('err_msg','one field is empty'); header('location: another.php'); exit();
another.php
<html> . . . <body> <?php if(is_flash('err_msg')){?> <span class="err_msg"><?php echo pop_flash('err_msg'); ?></span> <?php } ?> . . . </body></html>