2012-02-28 24 views
5

Tôi tương đối mới đối với PHP và đã cạn kiệt Internet cố gắng tìm câu trả lời cho vấn đề này. Tôi đã xem xét vô số ví dụ nhưng mọi người dường như rất khác với hệ thống đăng nhập của tôi và tôi gặp khó khăn khi giải mã nó.Làm thế nào để bạn trả về lỗi biểu mẫu đăng nhập vào cùng một trang bằng cách sử dụng PHP?

Đây là mã của tôi cho đến nay:

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." 

?> 

Tôi đã thử chèn này vào index.html và thay đổi tên tập tin để index.php.

$submit = $_POST["login"]; 

if($submit) 
{ 

} 

... nhưng nó chỉ liên tục hiển thị một trong các lỗi ('Tên người dùng hoặc mật khẩu') xuống dưới cùng của trang bất cứ lúc nào.

Tôi muốn nó để nếu người dùng nhập sai tên người dùng hoặc mật khẩu hoặc để trống trường bắt buộc, lỗi sẽ xuất hiện trên cùng một trang, thay vì chuyển sang trang PHP trống, trống mới có lỗi tin nhắn ở góc trên cùng bên trái.

+1

Việc kiểm tra các khoảng trống được yêu cầu dễ dàng hơn với JavaScript (jQuery hoặc các khung công tác khác hoạt động tốt). Trước khi trả lời thông báo tên người dùng hoặc mật khẩu sai, trong đó tệp (có thể là div) bạn cần hiển thị thông báo đó? Làm rõ điều này, tôi sẽ đăng câu trả lời của tôi. –

Trả lời

4

Trong checklogin.php, thay vì lặp lại một lỗi, sử dụng này:

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

hoặc một cái gì đó tương tự, và trong trang index.html của bạn, chỉ cần có PHP tạo ra thông điệp HTML, một cái gì đó như thế này:

<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> 

Ngoài ra, hãy chắc chắn để die() hoặc exit() khi bạn sử dụng header để chuyển hướng trang, nếu không thì phần còn lại của kịch bản của bạn tiếp tục chạy.

+0

Cảm ơn tất cả, tôi đang xem xét tất cả các câu trả lời của bạn ngay bây giờ và tôi sẽ đăng phản hồi khi tôi nhận được một cái gì đó làm việc! Tôi rất mới với PHP để tìm ra những gì sửa chữa của bạn đang làm là mất một thời gian. –

+0

Phần còn lại của tập lệnh sau 'header' không nhất thiết phải tiếp tục chạy (và thường là không), nhưng nó có thể đơn giản là bỏ qua các tiêu đề đã thay đổi và không chuyển hướng (khiến cho kịch bản tiếp tục). Vì vậy, có, dừng kịch bản ngay sau khi thiết lập tiêu đề được khuyến khích mạnh mẽ. –

+0

Hi Travesty3. Tôi hiểu khái niệm của bạn về cách sử dụng một mảng để xuất ra một lỗi phụ thuộc vào những gì đã gây ra nó, nhưng trong if ($ _ GET ["loginFailed"] Tôi nhận được một lỗi nói rằng loginFailed là một chỉ mục không xác định. ? –

1

Bạn sẽ muốn làm cho trang index.html của mình thành trang PHP và có biểu mẫu gửi tới chính nó, tức là tới index.php. Bằng cách này, bạn trang chỉ mục của bạn có thể thực hiện kiểm tra đăng nhập cho các giá trị biểu mẫu và hiển thị đầu ra của trang một cách thích hợp hoặc sử dụng tiêu đề để chuyển hướng nếu mọi thứ đều hợp lệ.

Thật khó để nói hiệu quả mà nỗ lực của bạn có thể có mà không nhìn thấy nó trong bối cảnh đầy đủ, nhưng ý chính của tình huống là bạn cần biểu mẫu để tự gửi và xử lý xử lý đăng nhập của nó.

+0

Cảm ơn tất cả, tôi đang xem xét tất cả các câu trả lời của bạn ngay bây giờ và tôi sẽ đăng phản hồi khi tôi nhận được một cái gì đó làm việc! Tôi rất mới với PHP để tìm ra những gì sửa chữa của bạn đang làm là mất một thời gian. –

+0

http://stackoverflow.com/questions/9386301/login-form-redirecting-back-to-itself-on-submit – thescientist

2

Điều bạn có thể làm là chuyển hướng lại trang của bạn nếu dữ liệu không hợp lệ. Đặt lỗi vào phiên và hiển thị chúng trên trang:

ví dụ .:

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

và lỗi của bạn sẽ được hiển thị trên trang.

Trong PHP của bạn

$_SESSION["Login.Error"] = 'Invalid credentials';//redirect back to your login page 
+0

Cảm ơn tất cả, tôi đang xem xét tất cả các câu trả lời của bạn ngay bây giờ và tôi sẽ đăng thông tin phản hồi khi tôi nhận được một cái gì đó làm việc!Tôi rất mới với PHP để tìm ra những gì sửa chữa của bạn đang làm là mất một thời gian. –

1

Dường như bạn muốn/cần phải tích hợp nó với jQuery hoặc một số khác thư viện Javascript/AJAX để làm cho mọi việc chỉnh tề hơn. jQuery có một plugin để xác nhận biểu mẫu đó là rất dễ dàng để tích hợp vào dự án của bạn (rõ ràng là thư viện jQuery là yêu cầu tối thiểu). jQuery sitejQuery validation plugin. Bạn cũng có thể xem xét sử dụng Khung PHP như CodeIgniter cũng có thư viện xác nhận biểu mẫu rất hữu ích. CodeIgniter rất đáng sợ ngay từ đầu (giống như tất cả thư viện/khung lập trình dựa trên MVC) nhưng nó đáng giá. bạn có thể xem một số hướng dẫn trên netTuts + họ đã tạo ra một loạt các hướng dẫn được gọi là CodeIgniter From Scratch, không phải từ phiên bản mới nhất nhưng rất dễ thích ứng.

2

Trong checklogin.php, nếu người dùng nhập tên người dùng hoặc mật khẩu sai, sử dụng mã như thế này:

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

Nó sẽ bật lên thông báo lỗi tại cùng một trang (trang đăng nhập), thay vì đi đến một trang PHP trống.

+0

Điều này đang hoạt động (tôi đã sử dụng nó như một giải pháp thời gian). Nhưng tôi cần một giải pháp thanh lịch hơn thế này. – gihanchanuka

+0

@AlpiGC ý nghĩa của bạn về giải pháp thanh lịch là gì? – Ian

Các vấn đề liên quan