Script de login en php |
Bienvenue invité ( Connexion | Inscription )
Script de login en php |
4 Aug 2004, 17:46
Message
#1
|
|
Adepte de Macbidouille Groupe : Membres Messages : 88 Inscrit : 9 Aug 2002 Lieu : 94 Membre no 3 115 |
Bonjour, est ce que quelqu'un serais capable de me donner un bon script de login en php ou de me dire d'ou viens l'erreur dans celui ci :
<?php function echappement ($data) { global $bd if (ini_get('magic_quotes_gpc')) { $data = stripslashes($data); } return mysql_escape_string (trim ($data)); } if (isset($_POST['submit'])) { require_once('mysql_connect.php'); if (empty($_POST['Pseudolog'])) { $u = FALSE; echo "Vous avez oublié d'indiquer votre nom d'utilisateur"; } else { $u = echappement($_POST['Pseudolog']); } if (empty($_POST['password'])) { $p = FALSE; echo " Vous avez oublié d'indiquer votre mot de passe"; } else { $p = echappement($_POST['password']); } if ($u && $p) { $lo = "SELECT id_utilisateur FROM utilisateur WHERE Pseudo = '$u' AND password = PASSWORD('$p')"; $result = @mysql_query ($lo); $ligne = mysql_fetch_row($result); if ($ligne) { session_start(); $_SESSION['id-user'] = $ligne[0]; ob_end_clean(); header ("Location : base_page_1.php"); exit(); } else { echo "Le mot de passe ou le pseudo que vous avez indiqué ne correspond pas a ceux de notre fichier"; } mysql_close(); } else { echo "Voulez vous reesayer ?"; } } ?> <form action="login.php" method="post" name="log"> <Fieldset> <h2>Login</h2><br> <h5>Votre navigateur doit accepter les cookies</h5><br> Pseudo : <input type="text" name="Pseudolog" value="<?php if (isset($_POST['Pseudolog'])) echo $_POST['Pseudolog']; ?>" /><br> Mot de passe : <input type="password" name="password"/><br> <center><input type="submit" name="submit" value="Login"></center> </form> Systématiquement j'ai le message d'erreur "Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /var/www/free.fr/7/e/itsnoway/login.php on line 41 Le mot de passe ou le pseudo que vous avez indiqué ne correspond pas a ceux de notre fichier" Merci d'avance !!! -------------------- Macbook unibody core 2 duo 2,4GHz, 2 Go RAM 250Go HD & Macmini 1,83Ghz 2Go RAM 60 Go HD
|
|
|
Guest_Faquin_* |
4 Aug 2004, 17:59
Message
#2
|
Guests |
c'est quoi ce password = PASSWORD('$p') dans ta requete?
|
|
|
4 Aug 2004, 18:18
Message
#3
|
|
Adepte de Macbidouille Groupe : Membres Messages : 193 Inscrit : 7 Feb 2004 Lieu : Expatrié à Ottawa - Carleton Raven for one year ! Membre no 14 428 |
La fonction PASSWORD() de mysql permet de crypter une chaine de carac'
Ce qui peut merder dans le cas present est que ta variable $p est entre simple quote, et meme si plus generalement elle est dans une chaine entre double quote, ca peut empecher PHP de l'interpreter. En clair, essaye plutot PASSWORD('".$p."'). Sinon, j'ai pas encore regardé le reste du code -------------------- "Les ordinateurs sont inutiles. Ils ne savent que donner des réponses." Pablo Picasso
Christian Corsano Étudiant en informatique MBP 15" 2.33ghz 2go RAM 160go HDD Glossy Screen |
|
|
5 Aug 2004, 20:43
Message
#4
|
|
Adepte de Macbidouille Groupe : Membres Messages : 88 Inscrit : 9 Aug 2002 Lieu : 94 Membre no 3 115 |
OK j'vais tenter ca, je vous dis si ca marche !! merci
-------------------- Macbook unibody core 2 duo 2,4GHz, 2 Go RAM 250Go HD & Macmini 1,83Ghz 2Go RAM 60 Go HD
|
|
|
5 Aug 2004, 20:50
Message
#5
|
|
Adepte de Macbidouille Groupe : Membres Messages : 88 Inscrit : 9 Aug 2002 Lieu : 94 Membre no 3 115 |
Heu bin ca fonctionne pas... apparement l'erreur viens de la ligne 41 ac la fonction indiquée ds le mess mais je ne sais pas pourquoi...
-------------------- Macbook unibody core 2 duo 2,4GHz, 2 Go RAM 250Go HD & Macmini 1,83Ghz 2Go RAM 60 Go HD
|
|
|
5 Aug 2004, 21:09
Message
#6
|
|
Adepte de Macbidouille Groupe : Membres Messages : 193 Inscrit : 7 Feb 2004 Lieu : Expatrié à Ottawa - Carleton Raven for one year ! Membre no 14 428 |
Ca serais cool que tu enleve l'echapement d'erreur sur le mysql_query (enleve le @)
et sort nous les resultats des fonctions mysql_error() et mysql_num_rows($result). (Met les juste apres le lancement de la requete). et montre nous la requete finale aussi (echo $lo) Comme ca on pourra savoir d'ou viens exactement le probleme... -------------------- "Les ordinateurs sont inutiles. Ils ne savent que donner des réponses." Pablo Picasso
Christian Corsano Étudiant en informatique MBP 15" 2.33ghz 2go RAM 160go HDD Glossy Screen |
|
|
9 Aug 2004, 11:08
Message
#7
|
|
Adepte de Macbidouille Groupe : Membres Messages : 88 Inscrit : 9 Aug 2002 Lieu : 94 Membre no 3 115 |
Heuu, j'ai viré le @ mais j'ai pas bien compris le reste (ui bon bah chui pas un boss en php non plus hein )
-------------------- Macbook unibody core 2 duo 2,4GHz, 2 Go RAM 250Go HD & Macmini 1,83Ghz 2Go RAM 60 Go HD
|
|
|
9 Aug 2004, 13:57
Message
#8
|
|
Oui ? Groupe : Membres Messages : 3 889 Inscrit : 24 Jun 2003 Lieu : BZH Membre no 8 224 |
Salut,
J'ai juste survolé le code pour l'instant, je regarderai plus tard, mais à première vue, y déja un truc qui cloche : session_start(); cette commande PHP doit impérativement être la premiere commande PHP à être exécutée, sinon, elle est ignorée... Ce message a été modifié par No6 - 9 Aug 2004, 14:25. -------------------- "Je sais que vous croyez comprendre ce que vous pensez que j'ai dit, mais je ne suis pas sûr que vous réalisiez que ce que vous avez entendu n'est pas ce que je pense."
(Alan Greenspan) |
|
|
9 Aug 2004, 18:35
Message
#9
|
|
Adepte de Macbidouille Groupe : Membres Messages : 193 Inscrit : 7 Feb 2004 Lieu : Expatrié à Ottawa - Carleton Raven for one year ! Membre no 14 428 |
Désolé No6, mais session_start ne doit pas necessairement être la premiere commande PHP.
La seule contrainte est lié au fait que session_start puisse utiliser (en fait dans la majorité des cas) un cookie pour stocker l'identifiant de session. Or les cookies sont définis par l'envoi de header HTTP, qui doivent imperativement preceder le contenu de la page. Donc session_start doit être appelé avant tout echo ou tout code HTML, mais pas forcement avant toute autre commande PHP. Le probleme dans le cas de ce code survient si une commande a retourné une erreur avant l'appel de session_start (tiens, je comprend mieux le @ devant le mysql_query maintenant ). Voila voila Ceci dit, ca ne fait pas avancer le schmilblick. Je crois que je vais rejeter un coup d'oeil au code. -------------------- "Les ordinateurs sont inutiles. Ils ne savent que donner des réponses." Pablo Picasso
Christian Corsano Étudiant en informatique MBP 15" 2.33ghz 2go RAM 160go HDD Glossy Screen |
|
|
9 Aug 2004, 18:40
Message
#10
|
|
Adepte de Macbidouille Groupe : Membres Messages : 88 Inscrit : 9 Aug 2002 Lieu : 94 Membre no 3 115 |
g mis la commande tout en haut du code php (juste sous la balise <?php) et ca me renvoie les messages d'erreur :
Warning: session_start(): open(/var/www/free.fr/7/e/itsnoway/sessions/.sess_a295686f39965fd37916798a14ad1a24, O_RDWR) failed: No such file or directory (2) in /var/www/free.fr/7/e/itsnoway/login.php on line 2 Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /var/www/free.fr/7/e/itsnoway/login.php:2) in /var/www/free.fr/7/e/itsnoway/login.php on line 2 Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /var/www/free.fr/7/e/itsnoway/login.php:2) in /var/www/free.fr/7/e/itsnoway/login.php on line 2 et : Warning: Unknown(): open(/var/www/free.fr/7/e/itsnoway/sessions/.sess_a295686f39965fd37916798a14ad1a24, O_RDWR) failed: No such file or directory (2) in Unknown on line 0 Warning: Unknown(): Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/www/free.fr/7/e/itsnoway/sessions) in Unknown on line 0 Si on m'avais dit que ct aussi compliqué d'utiliser les cookies !! -------------------- Macbook unibody core 2 duo 2,4GHz, 2 Go RAM 250Go HD & Macmini 1,83Ghz 2Go RAM 60 Go HD
|
|
|
9 Aug 2004, 18:50
Message
#11
|
|
Adepte de Macbidouille Groupe : Membres Messages : 193 Inscrit : 7 Feb 2004 Lieu : Expatrié à Ottawa - Carleton Raven for one year ! Membre no 14 428 |
En fait c'est pas les cookie le probleme !
Le cookie sert juste a identifier l'utilisateur, le probleme dans ton cas est que les données de sessions ne sont pas sauvegardées parce que PHP n'arrive pas a acceder au dossier de sauvegarde de la session. Pour savoir pourquoi, il faudrait que tu étudie les variables d'environnement suivantes : session.save_handler session.save_path pour ca lance un phpinfo() et recherche les valeurs de ces variables. Si le probleme est lié a ton hebergeur, je pourrais pas trop t'aider, vu que je n'ai jamais eu affaire a ce genre de probleme ... Je vais aller voir les forums de free, si c'est bien la bas que tu es... -------------------- "Les ordinateurs sont inutiles. Ils ne savent que donner des réponses." Pablo Picasso
Christian Corsano Étudiant en informatique MBP 15" 2.33ghz 2go RAM 160go HDD Glossy Screen |
|
|
9 Aug 2004, 20:28
Message
#12
|
|
Adepte de Macbidouille Groupe : Membres Messages : 193 Inscrit : 7 Feb 2004 Lieu : Expatrié à Ottawa - Carleton Raven for one year ! Membre no 14 428 |
Pris sur les pages d'aides de free :
QUOTE Les sessions Les sessions sont un moyen pour conserver des informations pendant une visite. PHP4 inclue un 'gestionnaire de session' simplifiant le mécanisme. Le gestionnaire de session est activé sur Free. Par défaut, il s'agit des sessions 'fichiers' mais vous pouvez bien sûr développer votre propre systême. Afin de permettre une gestion transparente des sessions, l'option --enable-trans-sid est activée. Elle permet une réécriture des URLs ou l'envoi de cookies permettant de suivre votre visiteur. important : Pour que vos sessions 'fichiers' (mode par défaut) fonctionnent, vous devez créer un répertoire "sessions" (en minuscules sans les guillemets) à la racine de votre site Web (ou du cas échéant, de votre site Web secondaire). Sinon un message d'erreur vous signalant l'impossibilite de sauvegarder les sessions apparaitra. Donc tu n'as plus qu'a creer un dossier nommé "session" comme cité plus haut pour que les sessions marchent... -------------------- "Les ordinateurs sont inutiles. Ils ne savent que donner des réponses." Pablo Picasso
Christian Corsano Étudiant en informatique MBP 15" 2.33ghz 2go RAM 160go HDD Glossy Screen |
|
|
10 Aug 2004, 22:17
Message
#13
|
|
Adepte de Macbidouille Groupe : Membres Messages : 88 Inscrit : 9 Aug 2002 Lieu : 94 Membre no 3 115 |
la création du dossier sessions a viré toutes les erreurs due a la commande session_start(); mais il reste toujours le problème de l'erreur due a mysql_fetch_row(); qui ne veut pas partir et bloque le fonctionnement de la page... je comprend pas ce qu'il veut, c'est pourtant bien la bonne commande qui est utilisée non ?
-------------------- Macbook unibody core 2 duo 2,4GHz, 2 Go RAM 250Go HD & Macmini 1,83Ghz 2Go RAM 60 Go HD
|
|
|
11 Aug 2004, 12:50
Message
#14
|
|
Adepte de Macbidouille Groupe : Membres Messages : 193 Inscrit : 7 Feb 2004 Lieu : Expatrié à Ottawa - Carleton Raven for one year ! Membre no 14 428 |
L'erreur sur mysql_fetch_row vient du fait que la requete SQL a retourné une erreur ou aucun enregistrement.
tu va nous faire ça : (c'est le detail de ce que je t'ai dis dans mon post du 5/08) CODE if ($u && $p) { $lo = "SELECT id_utilisateur FROM utilisateur WHERE Pseudo = '$u' AND password = PASSWORD('$p')"; echo $lo."\n"; $result = mysql_query ($lo); echo mysql_error()."\n"; if(mysql_num_rows($result) == 0){ echo "Utilisateur inconnu"; exit; } $ligne = mysql_fetch_row($result); Note ce que j'ai modifié : j'ai enlevé le @ devant mysql_query : ca devrais afficher une erreur supplementaire, au cas ou ca ne le fasse pas j'ai aussi affiché la derniere erreur mysql en date avec echo mysql_error() et avant j'ai affiché la requete exacte envoyé a la BdD. Enfin, pour etre sur que mysql_fetch_row ne soit pas embeté par des enregistrements vides (je crois avoir eu des problemes avec ca, c'est juste par securité), je teste le nombre d'enregistrement avant de lui refiler le resultat. J'espere que tu as tout compris, sinon, demande moi, c'est important que tu suive la demarche. -------------------- "Les ordinateurs sont inutiles. Ils ne savent que donner des réponses." Pablo Picasso
Christian Corsano Étudiant en informatique MBP 15" 2.33ghz 2go RAM 160go HDD Glossy Screen |
|
|
12 Aug 2004, 12:23
Message
#15
|
|
Adepte de Macbidouille Groupe : Membres Messages : 88 Inscrit : 9 Aug 2002 Lieu : 94 Membre no 3 115 |
J'ai inséré le code mais ca me donne une parse error a la ligne correspondant a echo "utilisateur inconnu"; c bizar je ne vois pas d'erreur moi (j'commence a me demander si chui pas mauvais en php)
-------------------- Macbook unibody core 2 duo 2,4GHz, 2 Go RAM 250Go HD & Macmini 1,83Ghz 2Go RAM 60 Go HD
|
|
|
12 Aug 2004, 12:50
Message
#16
|
|
Adepte de Macbidouille Groupe : Membres Messages : 193 Inscrit : 7 Feb 2004 Lieu : Expatrié à Ottawa - Carleton Raven for one year ! Membre no 14 428 |
Mon erreur me saute vraiment pas aux yeux, mais essaye plutot d'appliquer les changements toi meme, les uns apres les autres, en testant regulierement.
Si ca se trouve la parse error date de bien avant cette ligne, mais ne gene l'interpreteur qu'a ce point la (ca arrive souvent quand tu es trop pressé de tester ton code et que tu oublie betement un point-virgule ) -------------------- "Les ordinateurs sont inutiles. Ils ne savent que donner des réponses." Pablo Picasso
Christian Corsano Étudiant en informatique MBP 15" 2.33ghz 2go RAM 160go HDD Glossy Screen |
|
|
Guest_iboy_* |
16 Aug 2004, 16:38
Message
#17
|
Guests |
Et ouvrir une connexion à la base ?...
<?php // 1 - Connexion à la base de données MySQL // Avec par exemple localhost, root, "" $connect = mysql_connect($dbhost, $dbuser, $dbpass) or die ("A connection to the server cannot be established."); // 2 - Sélection de la base $connect = mysql_select_db($dbname) or die ("Database could not be selected."); // 3 - Requête sur la table ma_table de la base dont le nom est dbname $query="SELECT * from ma_table"; $result=mysql_query($query); // 4 - nombre de ligne de résultat $num=mysql_num_rows($result); // 5 - Les résultats while ($row=mysql_fetch_row($result)) { ... } // 6 - fermeture de la connexion mysql_close(); ?> Le 4 est facultatif, mais pas les autres ... Enfin pas les étapes 1, 2, 3 et 5. Ce message a été modifié par iboy - 16 Aug 2004, 16:41. |
|
|
16 Aug 2004, 17:59
Message
#18
|
|
Adepte de Macbidouille Groupe : Membres Messages : 156 Inscrit : 20 Jan 2003 Lieu : Colombes Membre no 5 726 |
QUOTE(Gregif @ 4 Aug 2004, 17:46) le message d'erreur "Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /var/www/free.fr/7/e/itsnoway/login.php on line 41 probleme de connexion à la base de données. Vérifer nom de la base / login user / mot de passe et que la variable obtenue lors de la connexion est bien la même que celle passée lors de l'exécution de la requete... TSUNAMi -------------------- Ibook 14' G3 8OO - 30 Go - 640Mo RAM
Codeur fou |
|
|
16 Aug 2004, 18:01
Message
#19
|
|
Adepte de Macbidouille Groupe : Membres Messages : 156 Inscrit : 20 Jan 2003 Lieu : Colombes Membre no 5 726 |
QUOTE(iboy @ 16 Aug 2004, 16:38) Et ouvrir une connexion à la base ?... oooppsss... effectivement je n'avais meme pas verifié ça dans le code avant de répondre... TSUNAMi qui court se cacher au fond des bois -------------------- Ibook 14' G3 8OO - 30 Go - 640Mo RAM
Codeur fou |
|
|
16 Aug 2004, 18:44
Message
#20
|
|
Adepte de Macbidouille Groupe : Membres Messages : 88 Inscrit : 9 Aug 2002 Lieu : 94 Membre no 3 115 |
Ah oui en effet j'aV oublié ce détail (important lol) seulement après avoir rajouté une connexion a la base le code me renvoie le message d'erreur "Voulez vous reessayer ?" qui se trouve tout a la fin :
<?php include ('mysql_connect.php'); function echappement ($data) { global $bd; if (ini_get('magic_quotes_gpc')) { $data = stripslashes($data); } return mysql_escape_string (trim ($data)); } if (isset($_POST['submit'])) { if (empty($_POST['Pseudolog'])) { $u = FALSE; echo "Vous avez oublié d'indiquer votre nom d'utilisateur"; } else { $u = echappement($_POST['Pseudolog']); } if (empty($_POST['password'])) { $p = FALSE; echo " Vous avez oublié d'indiquer votre mot de passe"; } else { $p = echappement($_POST['password']); } if ($u && $mp) { $lo = "SELECT id_utilisateur, prenom FROM utilisateurs WHERE nom_utilisateur='$u' AND mot_de_passe=PASSWORD('$p')"; $result = @mysql_query ($lo); $ligne = mysql_fetch_array ($result, MYSQL_NUM); if ($ligne) { $_SESSION['Pseudolog'] = $ligne[1]; $_SESSION['id_utilisateur'] = $ligne[0]; ob_end_clean(); header ("Location: http://itsnoway.free.fr/base_page_1.php"); exit(); } else { echo "Nous n'avons pas pu vous logger a cause d'un problème interne au serveur."; } mysql_close(); } else { echo "Voulez vous réessayer ?"; } } ?> Le code du fichier mysql_connect est le suivant : <?php # Listing 9.1 - mysql_connect.php DEFINE ('DB_USER', 'itsnoway'); DEFINE ('DB_PASSWORD', '*pass*'); DEFINE ('DB_HOST', 'sql.free.fr'); DEFINE ('DB_NAME', 'itsnoway'); if ($bd = @mysql_connect (DB_HOST, DB_USER, DB_PASSWORD)) { if (!mysql_select_db (DB_NAME)) { mon_gestionnaire (mysql_errno(),"Sélection de la base de donnée impossible :".mysql_error()); echo "certains problèmes techniques empèchent la connexion avec la base de donnée."; exit(); } } else { mon_gestionnaire (mysql_errno(),"Connexion impossible :".mysql_error()); echo "Connexion impossible"; exit(); } ?> Voila, merci encore pr ceux ki m'aident !! -------------------- Macbook unibody core 2 duo 2,4GHz, 2 Go RAM 250Go HD & Macmini 1,83Ghz 2Go RAM 60 Go HD
|
|
|
Nous sommes le : 28th April 2024 - 08:01 |