2011-08-05 6 views
0

J'ai un formulaire de connexion pointant vers le fichier '../exe/form-exec.php'.La validation du formulaire de connexion PHP a échoué

<form id="loginForm" name="loginForm" method="post" action="../exe/login-exec.php"> 
    <table width="300" border="0" align="center" cellpadding="2" cellspacing="0"> 
    <tr> 
     <td width="112"><b>Login</b></td> 
     <td width="188"><input name="login" type="text" class="textfield" id="login" /></td> 
    </tr> 
    <tr> 
     <td><b>Password</b></td> 
     <td><input name="password" type="password" class="textfield" id="password" /></td> 
    </tr> 
    <tr> 
     <td>&nbsp;</td> 
     <td><input type="submit" name="Submit" value="Login" /></td> 
    </tr> 
    </table> 
</form> 

Où login-exec.php doit valider les entrées où se connecter & mot de passe a été le terrain et sinon retourner au fichier de formulaire avec $errflag.

login-exec.php du fichier:

//Start session 
    session_start(); 

    //Include database connection details 
    require_once('../inc/config.php'); 

    //Array to store validation errors 
    $errmsg_arr = array(); 

    //Validation error flag 
    $errflag = false; 



..... 



//Input Validations 
    if($login == '') { 
     $errmsg_arr[] = 'Login ID missing'; 
     $errflag = true; 
    } 
    if($password == '') { 
     $errmsg_arr[] = 'Password missing'; 
     $errflag = true; 
    } 

    //If there are input validations, redirect back to the login form 
    if($errflag) { 
     $_SESSION['ERRMSG_ARR'] = $errmsg_arr; 
     session_write_close(); 
     header("location: ../form/login-form.php"); 
      exit(); 
} 

Et en partie fonctionne correctement - il revient à la forme - mais aucune erreur est affiché. Toute suggestion très appréciée.

+0

Où est votre code PHP qui affiche les messages d'erreur? –

+0

Il n'y en a pas. Pardon. Je fais quelques exercices avec PHP - c'est nouveau pour moi. PHP vérifiant le tableau de '$ errmsg_arr' devrait être placé dans login-form.php, n'est-ce pas? – Iladarsda

Répondre

1

sur la même page que votre formulaire HTML, faire quelque chose de similaire à ceci:

session_start(); 
foreach ($_SESSION['ERRMSG_ARR'] as $msg) { 
    echo $msg . "<br />"; 
} 
etc... 

Pour afficher réellement les messages.

+0

Cela fonctionne. Mais, tout de suite sur la page de connexion, une erreur s'affiche - même sans entrer de données. Juste une supposition que le tableau est sauvé de l'échec précédent de connexion. Comment changer ça? – Iladarsda

+0

Quel message d'erreur obtenez-vous? –

+0

Si la session est morte: 'Remarque: Indéfini index: ERRMSG_ARR dans C: \ wamp \ www \ form \ login-form.php sur la ligne 3' et' Attention: Argument invalide fourni pour foreach() dans C: \ wamp \ www \ form \ login-form.php sur la ligne 3' ** Si la session est en direct mais que la connexion est terminée - message d'erreur immédiatement.** Si ignorer l'erreur lorsque la session est morte et appuyez sur «Soumettre» erreur correcte msg est affiché sans erreurs. – Iladarsda

0

Lors de l'obtention des données soumises à partir d'un formulaire avec la méthode POST, il est préférable d'utiliser $_POST['login'] au lieu de $login car si register_globals est off il ne fonctionnera pas. Cela pourrait être votre problème.

+0

Oui. register_globals = off, je vais essayer de le changer. – Iladarsda

+1

@Pete: Non, laissez register_globals désactivé. Cette fonctionnalité a été dépréciée à partir de PHP 5.3.0. S'appuyer sur cette fonctionnalité est fortement déconseillé. – scube

+0

bien sûr, vous devriez le laisser! – Pierre

1

Vous l'$_SESSION['ERRMSG_ARR'] mais valorisante puis quand vous revenez à la forme que vous n'êtes pas le contrôle/l'utiliser ... essayez d'ajouter ceci au code forme

<?php 
session_start(); 
if(!is_null($_SESSION['ERRMSG_ARR'])) { 
    echo '<div class="errmsg">Error...</div>'; 
} 
?> 
<form id="loginForm" name="loginForm" method="post" action="../exe/login-exec.php"> 
    <table width="300" border="0" align="center" cellpadding="2" cellspacing="0"> 
    <tr> 
... 

Quoi qu'il en soit ce type de manipulation validation (en utilisant des paramètres de session) est fortement découragée ...

Essayez de suivre une place design patterns;)

+0

Cela retournera 'Notice: Variable indéfinie: _SESSION dans C: \ wamp \ www \ form \ login-form.php sur la ligne 2'. Désolé, je suis nouveau à PHP - premier système de connexion de mon – Iladarsda

+0

Quelles autres options pouvez-vous suggérer pour la gestion des erreurs? – Iladarsda

+0

Je suggérerais d'utiliser n'importe quel framework PHP en premier lieu;) ou utiliser une validation ajax. Quoi qu'il en soit, si c'est à des fins de "pratique", vous pouvez simplement mettre la validation et le code du formulaire dans le même fichier et rendre le formulaire à lui-même. Donc, vous devrez vérifier les paramètres de $ _POST et s'ils sont corrects transmettre la page à la page souhaitée (ou afficher directement l'erreur) – VAShhh

Questions connexes