2012-02-28 59 views
5

我对PHP比较陌生,并且已经用尽了互联网来试图找到这个问题的答案。我已经看过无数的例子,但人们似乎对我的登录系统非常不同,我无法破译它。如何使用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页面,并显示错误消息在左上角。

+1

使用JavaScript(jQuery或其他框架可以很好地工作)检查所需的空白更容易。在回答错误的用户名或密码信息之前,您需要在哪个文件(可能是div)中显示该信息?澄清这一点,我会发布我的答案。 – 2012-02-28 15:51:27

回答

4

在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重定向页面,否则你的脚本的其余部分继续运行。

+0

谢谢大家,我现在正在审核您的所有答案,我会在发布反馈意见时有用的东西!我对PHP非常陌生,因此弄清楚你的修补程序正在花费一些时间。 – 2012-02-28 16:05:02

+0

'header'后面的脚本的其余部分不一定会继续运行(通常不会),但从技术上来说,可以简单地忽略已更改的头并不重定向(这会导致脚本继续)。所以是的,强烈建议在设置标题后立即停止脚本。 – 2012-02-28 16:06:46

+0

嗨Travesty3。我理解你使用数组来输出错误的概念,这取决于导致错误的原因,但是在if($ _ GET [“loginFailed”]中,我收到一个错误,说loginFailed是一个未定义的索引。 ? – 2012-02-28 16:17:43

1

你会想让你的index.html页面成为一个PHP页面,并将表单提交给自己,即index.php。通过这种方式,您的索引页可以对表单值执行登录检查,并适当地显示页面的输出,或者如果所有事情都得到验证,则使用标题进行重定向。

很难说出你的尝试可能没有在完整的上下文中看到它的效果,但情况的要点是你需要表单提交给自己并处理它的登录处理。

+0

谢谢大家,我现在正在审核您的所有答案,并在我找到工作时发布反馈意见!我对PHP非常陌生,因此弄清楚你的修补程序正在花费一些时间。 – 2012-02-28 16:05:12

+0

http://stackoverflow.com/questions/9386301/login-form-redirecting-back-to-itself-on-submit – thescientist 2012-02-28 16:23:24

2

你可以做的是,如果数据无效,重定向回你的页面。把错误为会话和网页上显示它们:

例如为:

<?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 
+0

感谢所有人,我现在正在回顾您的所有答案,并且在我开始工作时发布反馈意见!我对PHP非常陌生,因此弄清楚你的修补程序正在花费一些时间。 – 2012-02-28 16:04:53

1

它看起来像你想/需要将其与jQuery或其他一些JavaScript/AJAX库 整合,使事情变得更加像样。 jQuery有一个用于表单验证的插件,很容易集成到你的项目中(显然,jQuery库是最低要求)。 jQuery sitejQuery validation plugin。 你也可以考虑使用像CodeIgniter这样的PHP框架,它也有一个非常有用的表单验证库。 CodeIgniter在一开始就很可怕(就像所有基于MVC的编程库/框架一样),但它是值得的。您可以在netTuts +上观看一些教程,他们已经创建了一系列名为CodeIgniter From Scratch的教程,不是来自最新版本,但很容易适应。

2

在checklogin.php,如果用户输入错误的用户名或密码,可以使用这样的代码:

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

这将在同一页面(登录页)弹出错误信息,而不是去一个空白的PHP页面。

+0

这是工作(我用它作为一个时间解决方案)。但我需要一个比这更优雅的解决方案。 – gihanchanuka 2015-05-22 06:26:13

+0

@AlpiGC优雅的解决方案是什么意思? – Ian 2015-05-26 02:02:31

相关问题