Как вы возвращаете ошибки формы входа на ту же страницу, используя PHP? - PullRequest
5 голосов
/ 28 февраля 2012

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

Вот мой код:

index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Video for Education Log In</title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>



<body>
<div id="wrapper">
<div id="header">
    <div id="logo">
        videoedu.edu    </div>
    <div id="menu">
        <ul>
            <li><a href="account.html" class="menua">Create Account</a></li>
            <li><a href="about.html" class="menua">About Us</a></li>
        </ul>
    </div>
</div>
<br><br><br><br>
<div id="page">

<div id="content">
    <h2>Video for Education helps you connect and share with the videos in your life.</h2>
    <h3>Upload Share Create Using video for your education purposes. Lecturers Welcome
    Upload Share Create Using video for your education purposes. Lecturers Welcome
    Upload Share Create Using video for your education purposes. Lecturers Welcome</h3>
    <div class= "form">
    <form name="login" method="post" action="checklogin.php">
        Username: <input type="text" name="myusername" id="myusername" class="textb"/><br />
        Password  :  <input type="password" name="mypassword" id="mypassword" class="textb"/><br />
        <br>
        <input type="submit" name="login" value="Login" id="login" class="texta" />
    </form>
    </div>
</div>
</div>
</div>
</body>
</html>

checklogin.php

<?php

$host = "localhost";
$username = "root";
$password = "";
$db_name = "test";
$tbl_name = "members";

mysql_connect("$host", "$username", "$password")or die("Cannot connect.");
mysql_select_db("$db_name")or die("Cannot select DB.");

$myusername=$_POST["myusername"];
$mypassword=$_POST["mypassword"];


    if ($myusername&&$mypassword)
    {

    $myusername = stripslashes($myusername);
    $mypassword = stripslashes($mypassword);
    $myusername = mysql_real_escape_string($myusername);
    $mypassword = mysql_real_escape_string($mypassword);

    $sql = "SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
    $result = mysql_query($sql);

    $count = mysql_num_rows($result);

    if($count == 1){
    session_register("myusername");
    session_register("mypassword"); 
    header("location:login_success.php");
        }
    else 
        {
    echo "Wrong Username or Password";
        }
    }

    else

    echo "You have left one or more fields blank.";

?>

login_success.php

<? 
session_start();
if( !isset( $_SESSION['myusername'] ) ){
header("location:account.html");
}

echo "Welcome, ".$_SESSION['myusername']." - You are now logged in.<br>";

echo "<a href=logout.php>Logout</a>"
?>

<html>
<body>

</body>
</html>

logout.php

<?php

session_start();

session_destroy();

echo "You have been logged out, <a href='index.php'>click here</a> to return."

?>

Я пытался вставить это в index.html и изменить имя файла на index.php.

$submit = $_POST["login"];

if($submit)
{

}

... но это просто постоянноотображает одну из ошибок («Неверное имя пользователя или пароль») внизу страницы.

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

Ответы [ 5 ]

5 голосов
/ 28 февраля 2012

В checklogin.php, вместо отображения ошибки, используйте это:

die(header("location:index.html?loginFailed=true&reason=password"));

или что-то подобное, и на своей странице index.html просто сделайте, чтобы PHP генерировал сообщение HTML, что-то вроде этого:

    <input type="submit" name="login" value="Login" id="login" class="texta" /><br /><br />
    <?php $reasons = array("password" => "Wrong Username or Password", "blank" => "You have left one or more fields blank."); if ($_GET["loginFailed"]) echo $reasons[$_GET["reason"]]; ?>
</form>

Кроме того, обязательно die() или exit(), когда вы используете header для перенаправления страницы, в противном случае остальная часть вашего скрипта продолжает работать.

2 голосов
/ 19 февраля 2014

В checklogin.php, если пользователь вводит неправильное имя пользователя или пароль, используйте код, подобный следующему:

echo "<script language=\"JavaScript\">\n";
echo "alert('Username or Password was incorrect!');\n";
echo "window.location='login.php'";
echo "</script>";

Вместо этого на этой же странице (странице входа в систему) появится сообщение об ошибке.перехода на пустую страницу PHP.

2 голосов
/ 28 февраля 2012

Что вы можете сделать, это перенаправить обратно на свою страницу, если данные неверны.Добавьте ошибки в сеанс и отобразите их на странице:

например:

<?php if(isset($_SESSION['Login.Error'])  { echo $_SESSION['Login.Error'];
 unset($_SESSION['Login.Error']); } ?>
<form ....

, и ваша ошибка будет видна на странице.

В вашем PHP

 $_SESSION["Login.Error"] = 'Invalid credentials';//redirect back to your login page
1 голос
/ 28 февраля 2012

Похоже, вам нужно / нужно интегрировать его с jQuery или какой-либо другой библиотекой Javascript / AJAX, чтобы сделать вещи более презентабельными.В jQuery есть плагин для проверки формы, который очень легко интегрировать в ваш проект (очевидно, библиотека jQuery является минимальным требованием). Сайт jQuery и Плагин проверки jQuery .Вы также можете рассмотреть возможность использования PHP Framework, например CodeIgniter , который также имеет очень полезную библиотеку проверки формы.CodeIgniter поначалу пугает (как и все библиотеки / фреймворки на основе MVC), но это того стоит.Вы можете посмотреть некоторые учебные пособия по netTuts + они создали серию учебных пособий под названием CodeIgniter From Scratch , не из последней версии, но их легко адаптировать.

1 голос
/ 28 февраля 2012

Вы хотели бы сделать вашу страницу index.html страницей PHP, и чтобы форма отправлялась сама себе, то есть в index.php. Таким образом, ваша индексная страница может выполнить проверку входа для значений формы и соответствующим образом отобразить выходные данные страницы или использовать заголовки для перенаправления, если все проверено.

Трудно сказать, какой эффект могла оказать ваша попытка, если не рассматривать ее в полном контексте, но суть ситуации в том, что вам нужна форма для отправки себе и обработки обработки входа в систему.

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