IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> Script de login en php
Options
Gregif
posté 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&eacute; d'indiquer votre nom d'utilisateur";
}
else
{ $u = echappement($_POST['Pseudolog']);
}

if (empty($_POST['password']))
{ $p = FALSE;
echo " Vous avez oubli&eacute; 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&eacute; 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 !!!
wink.gif


--------------------
Macbook unibody core 2 duo 2,4GHz, 2 Go RAM 250Go HD & Macmini 1,83Ghz 2Go RAM 60 Go HD
Go to the top of the page
 
+Quote Post
Guest_Faquin_*
posté 4 Aug 2004, 17:59
Message #2





Guests






c'est quoi ce password = PASSWORD('$p') dans ta requete?
Go to the top of the page
 
+Quote Post
cybercc
posté 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 wink.gif


--------------------
"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
Go to the top of the page
 
+Quote Post
Gregif
posté 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 wink.gif


--------------------
Macbook unibody core 2 duo 2,4GHz, 2 Go RAM 250Go HD & Macmini 1,83Ghz 2Go RAM 60 Go HD
Go to the top of the page
 
+Quote Post
Gregif
posté 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... unsure.gif 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
Go to the top of the page
 
+Quote Post
cybercc
posté 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
Go to the top of the page
 
+Quote Post
Gregif
posté 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 huh.gif (ui bon bah chui pas un boss en php non plus hein rolleyes.gif )


--------------------
Macbook unibody core 2 duo 2,4GHz, 2 Go RAM 250Go HD & Macmini 1,83Ghz 2Go RAM 60 Go HD
Go to the top of the page
 
+Quote Post
No6
posté 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...
cool.gif

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)
Go to the top of the page
 
+Quote Post
cybercc
posté 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 biggrin.gif ).

Voila voila

Ceci dit, ca ne fait pas avancer le schmilblick.
Je crois que je vais rejeter un coup d'oeil au code. wink.gif


--------------------
"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
Go to the top of the page
 
+Quote Post
Gregif
posté 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 !! unsure.gif


--------------------
Macbook unibody core 2 duo 2,4GHz, 2 Go RAM 250Go HD & Macmini 1,83Ghz 2Go RAM 60 Go HD
Go to the top of the page
 
+Quote Post
cybercc
posté 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
Go to the top of the page
 
+Quote Post
cybercc
posté 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
Go to the top of the page
 
+Quote Post
Gregif
posté 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 ? sad.gif


--------------------
Macbook unibody core 2 duo 2,4GHz, 2 Go RAM 250Go HD & Macmini 1,83Ghz 2Go RAM 60 Go HD
Go to the top of the page
 
+Quote Post
cybercc
posté 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
Go to the top of the page
 
+Quote Post
Gregif
posté 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) huh.gif


--------------------
Macbook unibody core 2 duo 2,4GHz, 2 Go RAM 250Go HD & Macmini 1,83Ghz 2Go RAM 60 Go HD
Go to the top of the page
 
+Quote Post
cybercc
posté 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 rolleyes.gif )


--------------------
"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
Go to the top of the page
 
+Quote Post
Guest_iboy_*
posté 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.
Go to the top of the page
 
+Quote Post
Tsunami
posté 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 blink.gif


--------------------
Ibook 14' G3 8OO - 30 Go - 640Mo RAM
Codeur fou
Go to the top of the page
 
+Quote Post
Tsunami
posté 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 ph34r.gif


--------------------
Ibook 14' G3 8OO - 30 Go - 640Mo RAM
Codeur fou
Go to the top of the page
 
+Quote Post
Gregif
posté 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&eacute; d'indiquer votre nom d'utilisateur";
}
else
{ $u = echappement($_POST['Pseudolog']);
}

if (empty($_POST['password']))
{ $p = FALSE;
echo " Vous avez oubli&eacute; 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&eacute;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&eacute;lection de la base de donn&eacute;e impossible :".mysql_error());
echo "certains probl&egrave;mes techniques emp&egrave;chent la connexion avec la base de donn&eacute;e.";
exit();
}
}
else
{ mon_gestionnaire (mysql_errno(),"Connexion impossible :".mysql_error());
echo "Connexion impossible";
exit();
}
?>
Voila, merci encore pr ceux ki m'aident !! wink.gif


--------------------
Macbook unibody core 2 duo 2,4GHz, 2 Go RAM 250Go HD & Macmini 1,83Ghz 2Go RAM 60 Go HD
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 28th April 2024 - 08:01