2010-06-28 7 views
0

Mon script d'adhésion fonctionne sauf ce fichier. Quand je tape le nom d'utilisateur et le mot de passe dans le formulaire de connexion, check.php me donne ce message "Veuillez entrer toutes les informations". Les seules informations sur le formulaire de connexion sont nom d'utilisateur et mot de passe. L'action du formulaire de connexion est postée sur check.phpUn fichier php ne fonctionne pas dans le script d'appartenance

J'ai besoin de ce script pour vérifier le nom d'utilisateur et le mot de passe crypté md5 dans ma base de données et rediriger vers la zone membre. J'utilise des mots de passe aléatoires. C'est le seul problème. Voici le script check.php. S'il vous plaît laissez-moi savoir ce que je dois faire pour que cela fonctionne. J'ai eu ce script de quelqu'un d'autre et ils ne savent pas comment le réparer non plus. Je ne connais pas php. Je veux juste copier et coller. Merci

============================ 

<? 
/* Check Username Script */ 
session_start(); // Start Session 

include 'database.php'; 
// Conver to simple variables 
$username = $_POST['username']; 
$password = $_POST['password']; 

if((!$username) || (!$password)){ 
    echo "Please enter ALL of the information! <br />"; 
    include 'login_form.html'; 
    exit(); 
} 

// Convert password to md5 hash 
$password = md5($password); 

// check if the user info validates the db 
$sql = mysql_query("SELECT * FROM users WHERE username='$username' AND password='$password' AND activated='1'"); 
$login_check = mysql_num_rows($sql); 

if($login_check > 0){ 
    while($row = mysql_fetch_array($sql)){ 
    foreach($row AS $key => $val){ 
     $$key = stripslashes($val); 
    } 
     // Register some session variables! 
     session_register('first_name'); 
     $_SESSION['first_name'] = $first_name; 
     session_register('last_name'); 
     $_SESSION['last_name'] = $last_name; 
     session_register('email_address'); 
     $_SESSION['email_address'] = $email_address; 
     session_register('special_user'); 
     $_SESSION['user_level'] = $user_level; 

     mysql_query("UPDATE users SET last_login=now() WHERE userid='$userid'"); 

     header("Location: members.php"); 
    } 
} else { 
    echo "You could not be logged in! Either the username and password do not match or you have not validated your membership!<br /> 
    Please try again!<br />"; 
    include 'login_form.html'; 
} 
?> 

Ceci est la seule partie du script que je pourrais copier ici. J'utilise des sessions. L'action est POST.

+0

Quel est exactement le problème, ne fonctionne pas est petit vage? n'y a-t-il pas d'avertissements ou d'erreurs php? c'est un peu difficile à voir si non formaté comme ci-dessus. – Redlab

+0

Pourquoi ne pas poster login_form.html? Est-ce que le nom d'utilisateur/les variables de publication sont "POSTED" par opposition à "GET" comme action de formulaire? – bpeterson76

Répondre

1

Cela ressemble à une faute de frappe, soit lorsque vous définissez les variables de mot de passe $ username $, ou dans votre formulaire. Vérifiez que le nom est correct sur les entrées de formulaire :)

aussi, il est préférable d'utiliser isset ($ username) au lieu de! $ Username. Ne pas donner un avertissement :)

0

s'il vous plaît poster le contenu de login_form.html. Je suppose que ce formulaire est soit en utilisant GET au lieu de POST ou les champs d'entrée ne sont pas nommés "nom d'utilisateur" et "mot de passe".

Autre chose: Ce code contient un très grave problème de sécurité:

$username = $_POST['username'] 
mysql_query("SELECT * FROM users WHERE username='$username' AND password='$password' AND activated='1'"); 

Cela signifie qu'un attaquant peut manipuler l'instruction SQL. Par exemple, le nom d'utilisateur:

admin'-- 

entraînera dans cette requête SQL:

SELECT * FROM users WHERE username='admin'--' AND password='egal' AND activated='1' 

qui signifie:

SELECT * FROM users WHERE username='admin' 

Et accordera l'accès si un utilisateur nommé "admin" existe, en ignorant le mot de passe.

Note: Filtrage pour - ne va pas aider, car il existe un certain nombre d'autres façons de s'amuser avec cela. Vous devez mysql_real_escape_string ($ username) pour échapper les caractères spéciaux dans l'entrée. Plus d'informations sont disponibles au http://php.net/manual/en/function.mysql-real-escape-string.php

1

Dans votre formulaire, assurez-vous que les champs de saisie qui demandent le nom d'utilisateur et le mot de passe sont associés au nom correct.

Par exemple:

<input type='text' name='username'> 
<input type='password' name='password'> 

La valeur après name= est ce qui passe comme nom de variable. Pour démontrer que, le champ de saisie:

<input type='text' name='thisIsMyName'> 

va apparaître dans le script PHP comme:

$_POST['thisIsMyName']; 

Si vous publiez le code HTML de la forme qui est soumis, nous pouvons vous donner de plus amples détails dessus.

Questions connexes