Garfield Posté 18 Octobre 2007 Posté 18 Octobre 2007 Bonjour, Voila mon problème, je débute en php et je voudrais faire un espace membre. Pour cela, aprés des recherches, il est conseillé d'utiliser les "sessions". J'ai donc fait ceci mais ca ne parche pas : <?php include("conf.php);// Controle if($_POST["login"] != "" && $_POST["pass"] != ""){ $username = $_POST["login"]; $password = sha1($_POST["pass"]);// Connexion au serveur mysql $connexion = mysql_connect($mysql_link,$mysql_user,$mysql_password); mysql_select_db('forum',$connexion);// Récupération des données de la table $sql = "select * from users WHERE username='$login' AND password='$password'";// Envoi $requete = _AT_mysql_query($sql, $connexion) or die($sql."<br>".mysql_error());// On récupère le résultat $result = mysql_fetch_object($requete);// Si la requête s'est bien passée if(is_object($result)) {// Début de la sessions session_start();// Enregistrement d'une variable de session $_SESSION['login'] = $username; header('Location: page1.php');} else { header('Location: index.php');}}// Fermeture mysql_close();?> La page reste désesperément blanche. Je pense qu'il manque déja des "or die" mais je ne sais déja pas trop où les mettre. Si quelqu'un pouvait m'aider et m'expliquer mon erreur, svp ! Merci
Sammuel Posté 18 Octobre 2007 Posté 18 Octobre 2007 (modifié) Tu as déjà une erreur en première ligne : include("conf.php); à remplacer par include('conf.php'); Sinon tu peux remplacer : // Récupération des données de la table $sql = "select * from users WHERE username='$login' AND password='$password'"; // Envoi $requete = _AT_mysql_query($sql, $connexion) or die($sql."<br>".mysql_error()); par // Récupération des données de la table + Envoi $requete = mysql_query("SELECT username FROM users WHERE username = "'.mysql_real_escape_string($login).'" AND password = "'.mysql_real_escape_string($password).'""); Tout en haut de ta page PHP, tu peux ajouter ces 2 lignes pour tester ton code : @ini_set('display_errors',1);error_reporting(E_ALL); Elles te retourneront les éventuelles erreurs, au lieu d'une page blanche. Autres suggestions... remplacer : if($_POST["login"] != "" && $_POST["pass"] != "") par if(isset($_POST['login']) && !empty($_POST['login']) && isset($_POST['pass']) && !empty($_POST['pass'])) mysql_close(); par mysql_close($connexion); $connexion = mysql_connect($mysql_link,$mysql_user,$mysql_password);mysql_select_db('forum',$connexion); par $connexion = mysql_connect($mysql_link,$mysql_user,$mysql_password);$db_selected = mysql_select_db('forum',$connexion); if(!$db_selected){ die('Impossible de séctionner la base de donnée.'); } Cela évitera d'afficher des infos sur ta requete SQL au cas ou ta base de données serait innaccessible... Modifié 18 Octobre 2007 par Sammuel
Garfield Posté 18 Octobre 2007 Auteur Posté 18 Octobre 2007 Okay, j'ai donc modifié comme ceci : <?php@ ini_set('display_errors',1);error_reporting(E_ALL); include('conf.php');// Controle if(isset($_POST['login']) && !empty($_POST['login']) && isset($_POST['pass']) && !empty($_POST['pass'])){ $username = $_POST["login"]; $password = sha1($_POST["pass"]);// Connexion au serveur mysql $connexion = mysql_connect($mysql_link,$mysql_user,$mysql_password); $db_selected = mysql_select_db('forum',$connexion); if(!$db_selected){ die('Impossible de séctionner la base de donnée.'); }// Récupération des données de la table + Envoi $requete = mysql_query("SELECT username FROM users WHERE username = "'.mysql_real_escape_string($login).'" AND password = "'.mysql_real_escape_string($password).'"");// On récupère le résultat $result = mysql_fetch_object($requete) or die($sql."<br>".mysql_error());// Si la requête s'est bien passée if(is_object($result)) {// Début de la sessions session_start();// Enregistrement d'une variable de session $_SESSION['login'] = $username; header('Location: index.php'); }else { header('Location: erreur.php'); }}// Fermeture mysql_close($connexion);?> Et j'ai toujours une page blanche :s J'ai tester avec $username à la place de $login dans WHERE username = "'.mysql_real_escape_string($login).'" rien non plus
NorSeb Posté 18 Octobre 2007 Posté 18 Octobre 2007 Bonjour, Tu peux peut-être compter le nombre d'enregistrements renvoyés par ta requète grace à la fonction mysql_num_rows(). En gros tu fais un if (mysql_num_rows($requete) > 0) pour vérifier que tu as des résultats. Tu peux aussi utiliser la fonction mysql_error()
Sammuel Posté 18 Octobre 2007 Posté 18 Octobre 2007 (modifié) En PHP, quand ca ne fonctionne pas, il suffit de faire des tests à différents niveaux du code. Faire un test comme NorSeb t'a indiqué par exemple ! Ou sinon, tu fais un : echo "SELECT username FROM users WHERE username = "'.mysql_real_escape_string($login).'" AND password = "'.mysql_real_escape_string($password).'""; Tu sélectionnes la ligne de code que ca affiche, et tu testes directement dans PHPmyadmin, dans l'onglet 'SQL'. Et tu regardes si ca te retourne ou non un enregistrement. Modifié 19 Octobre 2007 par Sammuel
Garfield Posté 19 Octobre 2007 Auteur Posté 19 Octobre 2007 Super, merci beaucoup cà fonctionne impecable J'aurais juste une petite question technique : vaut il mieux utiliser MD5 ou SHA1 ?
pluriels Posté 19 Octobre 2007 Posté 19 Octobre 2007 (modifié) sha-1 est censé être plus sûr. Pour ton programme, si tu cherches à faire de la sécurité : - utilises un grain de sel que toi seul puisse connaitre : $password = sha1($_POST["pass"]."pluriels"); - de la même manière, il faut crypter ta session pour éviter le vol de session - tu peux aussi vérifier l'ip ou le host distant ainsi que le navigateur. si l'ip ou le navigateur change en cours de session, c'est que quelqu'un tente de récupérer la session d'un autre Modifié 19 Octobre 2007 par pluriels
Garfield Posté 19 Octobre 2007 Auteur Posté 19 Octobre 2007 Okay merci, je reste sur SHA1 alors Oui au fur et à mesure je constate les manques et je tente de corriger
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant