PHP MySQL, la fonction de login
Je suis en utilisant ceci:
function authUser($username, $password){
connectDB();
$sql = "SELECT id, username FROM users where username = '".$username."' and password = '".$password."'";
$result = mysql_query($sql);
$num_rows = mysql_num_rows($result);
if ($num_rows > 0){
while ($row = mysql_fetch_array($result)){
$username = $row['username'];
session_start();
session_register('username');
return $username;
}
}
closeConn();
}
Avec une combinaison de cela:
$auth = authUser($username, $password);
if (isset($username)){
header( "Location: index.php" );
}
Puis sur la index.php (où je me rediriger si une connexion réussie) je suis en train de echo $nom d'utilisateur. Mais rien n'est montrant? Des idées? Est-il le problème?
EDIT:
ont maintenant changé donc:
if ($num_rows > 0){
while ($row = mysql_fetch_array($result)){
$_SESSION['username'] = $row['username'];
return true;
}
}
Est ce que le droit?
- Merci de ne pas stocker les mots de passe en clair dans la base de données. Chaque fois que vous faites cela, un mignon petit chaton meurt.
- Je reçois des fonctionnalités de base alors je vais utiliser md5...chaton sauvé.
Vous devez vous connecter pour publier un commentaire.
Je voudrais changer:
dans:
parce que vous voulez vous connecter et obtenir UNE personne sur
Veuillez noter que vous êtes toujours re-diriger à
index.php
, non seulement sur une connexion réussie;$username
est défini, à la fois sur une réussite et un non-connexion réussie.session_start()
avant tout est retournée au navigateur.Vous devez utiliser
session_start()
sur la page d'index ainsi.Assurez-vous que index.php a un
session_start()
appelé au début du script, et aussi, essayez d'utiliser$_SESSION['username']
au lieu de simplement$username
. Beaucoup de serveurs sont aujourd'hui mis en place de sorte que vous devez appeler la variable complète (avec $_SESSION) plutôt que de simplement la version abrégée. Lire sur Register Globals à http://php.net/manual/en/security.globals.php. Si vous avez encore des problèmes, prendre lasession_start()
de la authUser fonction et le déplacer vers la première ligne du script.Variables ne sont pas globaux entre la page cas, vous avez besoin de mettre la variable $_SESSION si vous voulez qu'il soit accessible sur plusieurs pages.
D'abord, session_register est obsolète. utiliser $_SESSION:
Seconde, votre authUser() la fonction retourne un nom d'utilisateur (en cas de succès) ou rien. Ensuite ce code:
doit être modifié pour
Et une chose de plus, la vérification des mots de passe en clair est une très mauvaise chose 🙂 d'Envisager de hachage avec MD5().
Bonne chance!
Si vous utilisez
mysql_fetch_array
alors vous devriez utiliser un tableau, comme ceci:$row[0]
Vous pouvez utiliser
mysql_fetch_assoc()
à l'utilisation de la table nom de la colonne ($row['username']
)mysql_fetch_array($result, MYSQL_ASSOC)
oumysql_fetch_array($result, MYSQL_BOTH)
pour retourner un tableau associatif index (basé sur les noms de colonne) et la valeur par défaut estMYSQL_BOTH
de toute façon, de sorte que les OP de l'utilisation de la fonction est fine. Reportez-vous à php.net/manual/en/function.mysql-fetch-array.php