2012-02-28 7 views
5

Soy relativamente nuevo en PHP y he agotado Internet tratando de encontrar una respuesta a este problema. He visto innumerables ejemplos, pero las personas parecen tener sistemas de inicio de sesión muy diferentes a los míos y tengo problemas para descifrarlo.¿Cómo devuelve errores de formulario de inicio de sesión a la misma página utilizando PHP?

Aquí está mi código hasta ahora:

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

?> 

me han tratado de insertar esto en index.html y cambiar el nombre del archivo a index.php.

$submit = $_POST["login"]; 

if($submit) 
{ 

} 

... pero solo muestra constantemente uno de los errores ('nombre de usuario o contraseña incorrecta') hasta la parte inferior de la página en todo momento.

Lo quiero para que si el usuario ingresa un nombre de usuario o contraseña incorrectos, o deja un campo obligatorio en blanco, el error aparezca en la misma página, en lugar de ir a una nueva y fea página PHP con el error mensaje en la esquina superior izquierda.

+1

La comprobación de los espacios en blanco necesarios es más fácil con JavaScript (jQuery u otros marcos funcionan bien). Antes de responder un nombre de usuario o contraseña erróneo, ¿en qué archivo (puede ser div) necesita mostrar ese mensaje? Aclara esto, publicaré mi respuesta. –

Respuesta

4

En checklogin.php, en lugar de eco de un error, utilice la siguiente:

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

o algo similar, y en su página index.html, simplemente tiene PHP generar el mensaje HTML, algo como esto:

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

Además, asegúrese de que die() o exit() cuando se utiliza header para redirigir a la página, de lo contrario el resto de la secuencia de comandos continúa ejecutándose.

+0

Gracias a todos, estoy revisando todas sus respuestas ahora y publicaré comentarios cuando llegue algo trabajando! Soy muy nuevo en PHP, por lo que averiguar qué están haciendo las correcciones es tomarse un tiempo. –

+0

El resto de la secuencia de comandos después de 'header' no necesariamente se ejecuta (y generalmente no), pero es teóricamente posible simplemente ignorar los encabezados modificados y no redirigir (lo que hace que la secuencia de comandos continúe). Así que sí, es muy recomendable detener el script justo después de configurar el encabezado. –

+0

Hola Travesty3. Entiendo su concepto de usar una matriz para generar un error dependiendo de lo que la causó, pero en el if ($ _ GET ["loginFailed"] recibo un error que dice que loginFailed es un índice indefinido. ¿De dónde viene esta condición? ? –

1

Desea hacer de su página index.html una página PHP, y hacer que el formulario se envíe a sí mismo, es decir, a index.php. De esta forma, su página de índice puede hacer la verificación de inicio de sesión de los valores de formulario y mostrar el resultado de la página de manera apropiada, o usar encabezados para redirigir si todo se valida.

Es difícil saber el efecto que su intento puede haber tenido sin verlo en el contexto completo, pero la esencia de la situación es que necesita el formulario para enviarse a sí mismo y manejar su proceso de inicio de sesión.

+0

¡Gracias a todos, estoy revisando todas sus respuestas ahora y publicaré comentarios cuando obtengo algo que funciona! Soy muy nuevo en PHP, por lo que averiguar qué están haciendo las correcciones es tomarse un tiempo. –

+0

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

2

Lo que puede hacer es redirigir a su página si los datos no son válidos. Ponga errores en la sesión y los mostrará en la página:

ej .:

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

y su error será visible en la página.

En su PHP

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

Gracias a todos, estoy revisando todas sus respuestas ahora y publicaré comentarios cuando obtengo algo en funcionamiento.Soy muy nuevo en PHP, por lo que averiguar qué están haciendo las correcciones es tomarse un tiempo. –

1

Parece que quiere/necesita para integrarlo con jQuery o alguna otra biblioteca de Javascript/AJAX para hacer las cosas más presentable. jQuery tiene un complemento para la validación de formularios que es muy fácil de integrar a su proyecto (obviamente, la biblioteca jQuery es un requisito mínimo). jQuery site y jQuery validation plugin. También puede considerar el uso de un Framework PHP como CodeIgniter que también tiene una biblioteca de validación de formularios muy útil. CodeIgniter da miedo al principio (como toda la biblioteca/framework de programación basada en MVC) pero vale la pena. Puede ver algunos tutoriales en netTuts + que han creado una serie de tutoriales llamados CodeIgniter From Scratch, no es de la última versión, pero es fácil de adaptar.

2

En checklogin.php, si el usuario introduce un nombre de usuario o contraseña incorrecta, utilice el código como el siguiente:

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

Se mostrará el mensaje de error en la misma página (página de inicio de sesión), en lugar de ir a una página PHP en blanco.

+0

Esto está funcionando (lo usé como una solución temporal). Pero necesito una solución elegante que esta. – gihanchanuka

+0

@AlpiGC ¿cuál es su significado para una solución elegante? – Ian

Cuestiones relacionadas