Aenoa Posté 28 Octobre 2010 Posté 28 Octobre 2010 (modifié) bonsoir, je code actuellement un site web où les utilisateurs peuvent s'inscrire et commander des serveurs virtuels de TS3 gratuitement, et j'ai un problème lorsque l'utilisateur entre un password composé de chiffres : Cela m'affiche la page traitant la requête (login.php) toute blanche, sans code... Voici mes scripts: (partie php) page de connexion elseif($_GET['page'] == login) { $pagecontent = "<p class=\"INFORMATION\">Connexion</p><br /> Veuillez entrer vos identifiants de connexion si dessous.<br /> <form method=\"post\" action=\"login.php\"> Pseudonyme: <input type=\"text\" size=\"32\" name=\"nameconnect\" /><br /> Mot de passe: <input type=\"password\" size=\"25\" name=\"password\" /><br /> <input type=\"submit\" value=\"Connexion\" /> <input type=\"reset\" value=\"Recommencer\" /> </form>"; Partie script php de la page login.php session_start(); $basepos = "Connexion"; $absolutpos = "Interface de connexion"; if(isset($_POST['nameconnect']) && isset($_POST['password'])) { mysql_connect('********', '*******', '********'); mysql_select_db('*******'); $passwd = sha1(addslashes($_POST['password'])); $account = strtoupper($_POST['nameconnect']); $preconnect = mysql_query('SELECT * FROM ts3s_members WHERE pseudo=\''.$account.'\''); $connect = mysql_fetch_array($preconnect); //$preconnect1 = mysql_query('SELECT * FROM ts3s_servers WHERE uid=\''.$connect['id'].'\' DESC 1'); //$connect1 = mysql_fetch_array($preconnect1); if($connect['password'] == $passwd) { $server = mysql_fetch_assoc(mysql_query('SELECT * FROM ts3s_servers WHERE uid=\''.$connect['id'].'\'')) or die(mysql_error()); $_SESSION['pseudo'] = $connect['pseudo']; $_SESSION['mail'] = $connect['mail']; $_SESSION['SID'] = $server['SID']; $_SESSION['sport'] = $server['sport']; $_SESSION['ip_insc'] = $connect['ip_insc']; mysql_query('UPDATE ts3s_members SET ip_actual = \''.$_SERVER['REMOTE_ADDR'].'\' WHERE pseudo = \''.$_SESSION['pseudo'].'\''); $_SESSION['ip_actual'] = $_SERVER['REMOTE_ADDR']; $_SESSION['sexe'] = $connect['sexe']; $_SESSION['birthdate'] = $connect['birthdate']; $_SESSION['sslots'] = $server['sslots']; $_SESSION['sip'] = $server['sip']; $_SESSION['PKEY'] = $server['pkey']; $_SESSION['secure_level'] = $connect['secure_level']; $pagecontent = "Connexion réussie. Bienvenue.<br />Redirection...<br /><script type=\"text/javascript\"> window.setTimeout(\"location=('index.php');\",3000)</script>"; mysql_close(); } elseif($connect['password'] != sha1(strtoupper($_POST['password']))) { $pagecontent = "Le mot de passe n'est pas correct. Veuillez réessayer."; mysql_close(); } else { $pagecontent = "Erreur. Veuillez réessayer plus tard."; } } else { $pagecontent = "Une erreur est survenue.<br />Veuillez entrer votre adresse mail et mot de passe si vous ne l'avez pas fait."; } Pouvez vous m'aider à trouver mon erreur ? Vu que la connexion avec ou sans casse, avec chiffres et lettres, et lettres uniquement fonctionne ? Merci d'avance, Aenoa Modifié 28 Octobre 2010 par Aenoa
Message populaire. SStephane Posté 28 Octobre 2010 Message populaire. Posté 28 Octobre 2010 Hello, J'ai pas poussé très loin dans la lecture de ton code, mais essaie un : if($connect['password'] === $passwd) en place de if($connect['password'] == $passwd) rapidement à vue de nez hein 1
Aenoa Posté 28 Octobre 2010 Auteur Posté 28 Octobre 2010 l'erreur est toujours présente, cela me fait une page sans code source, et cela fonctionne avec un autre compte ne mettant pas de chiffres... a noter que si je met des chiffres au hasard, cela m'affiche une erreur de mot de passe incorrect, mais au moins cela m'affiche quelque chose....
Message populaire. SStephane Posté 28 Octobre 2010 Message populaire. Posté 28 Octobre 2010 Voilà, j'ai vite fait repris ton code, ton souci viendrait de ta 3e requête, ce ne serait pas lié à des nombres dans le pass, mais plutôt à des comptes je dirais. (Un problème d'intégrité de ta base si c'est le cas dû à une absence de clé étrangère). <?phpsession_start();$basepos = "Connexion";$absolutpos = "Interface de connexion";if (isset($_POST['nameconnect']) && isset($_POST['password'])) { mysql_connect('********', '*******', '********'); mysql_select_db('*******'); $passwd = sha1($_POST['password']); $account = strtoupper($_POST['nameconnect']); $sql = "SELECT * FROM ts3s_members WHERE pseudo='%s' AND password='%s'"; $sql = sprintf($sql, mysql_real_escape_string($account), mysql_real_escape_string($passwd) ); $preconnect = mysql_query($sql); if (mysql_num_rows($preconnect)) { //ta couille vient probablement de cette requête $connect = mysql_fetch_array($preconnect); $sql = "SELECT * FROM ts3s_servers WHERE uid='%s' "; $sql = sprintf($sql, mysql_real_escape_string($connect['id'])); $query = mysql_query($sql); if(mysql_num_rows($query)) { $server = mysql_fetch_assoc($query); $_SESSION['pseudo'] = $connect['pseudo']; $_SESSION['mail'] = $connect['mail']; $_SESSION['SID'] = $server['SID']; $_SESSION['sport'] = $server['sport']; $_SESSION['ip_insc'] = $connect['ip_insc']; mysql_query('UPDATE ts3s_members SET ip_actual = \'' . $_SERVER['REMOTE_ADDR'] . '\' WHERE pseudo = \'' . $_SESSION['pseudo'] . '\''); $_SESSION['ip_actual'] = $_SERVER['REMOTE_ADDR']; $_SESSION['sexe'] = $connect['sexe']; $_SESSION['birthdate'] = $connect['birthdate']; $_SESSION['sslots'] = $server['sslots']; $_SESSION['sip'] = $server['sip']; $_SESSION['PKEY'] = $server['pkey']; $_SESSION['secure_level'] = $connect['secure_level']; $pagecontent = "Connexion réussie. Bienvenue.<br />Redirection...<br /><script type=\"text/javascript\"> window.setTimeout(\"location=('index.php');\",3000)</script>"; } else { $pagecontent = "AYAYAYA"; } } elseif ($connect['password'] != sha1(strtoupper($_POST['password']))) { $pagecontent = "Le mot de passe n'est pas correct. Veuillez réessayer."; }}else{ $pagecontent = "Une erreur est survenue.<br />Veuillez entrer votre adresse mail et mot de passe si vous ne l'avez pas fait.";}?> Le cas échéant, si j'ai raison, t'auras un message cette fois. 1
Aenoa Posté 28 Octobre 2010 Auteur Posté 28 Octobre 2010 (modifié) je me suis basé sur ton code, en modifiant les %s et les logs de connexion, et ajoutant une valeur 0 ou 1 nommée IAS (Is Active Server) pour savoir si il a un serveur TS actif. Si oui, il exécute. sinon, pas grave. ça m'envoi sur la page d'erreur serveur. Dorenavant, il accepte la connexion mais reste sans accepter les variables $_SESSION de la valeur $connect session_start();$basepos = "Connexion";$absolutpos = "Interface de connexion";if (isset($_POST['nameconnect']) && isset($_POST['password'])) { mysql_connect('********', '******', '*******'); mysql_select_db('*******'); $passwd = sha1($_POST['password']); $account = strtoupper($_POST['nameconnect']); $sql = "SELECT * FROM ts3s_members WHERE pseudo='".$account."' AND password='".$passwd."'"; $sql = sprintf($sql, mysql_real_escape_string($account), mysql_real_escape_string($passwd) ); $preconnect = mysql_query($sql); $connect = mysql_fetch_array($preconnect); if (mysql_num_rows($preconnect)) { $_SESSION['pseudo'] = $connect['pseudo']; $_SESSION['mail'] = $connect['mail']; $_SESSION['ip_insc'] = $connect['ip_insc']; mysql_query('UPDATE ts3s_members SET ip_actual = \'' . $_SERVER['REMOTE_ADDR'] . '\' WHERE pseudo = \'' . $_SESSION['pseudo'] . '\''); $_SESSION['ip_actual'] = $_SERVER['REMOTE_ADDR']; $_SESSION['sexe'] = $connect['sexe']; $_SESSION['birthdate'] = $connect['birthdate']; $_SESSION['secure_level'] = $connect['secure_level']; } else { } if($connect['IAS'] == 1) { $sql = "SELECT * FROM ts3s_servers WHERE uid='".$connect['id']."' "; $sql = sprintf($sql, mysql_real_escape_string($connect['id'])); $query = mysql_query($sql); if(mysql_num_rows($query)) { $server = mysql_fetch_assoc($query); $_SESSION['SID'] = $server['SID']; $_SESSION['sport'] = $server['sport']; $_SESSION['sslots'] = $server['sslots']; $_SESSION['sip'] = $server['sip']; $_SESSION['PKEY'] = $server['pkey']; $pagecontent = "Connexion réussie. Bienvenue.<br />Redirection...<br /><script type=\"text/javascript\"> window.setTimeout(\"location=('index.php');\",3000)</script>"; } else { $pagecontent = "Echec de la prise d'informations de votre serveur."; } } else { // ECHEC IAS $pagecontent = "ERR.Connexion réussie. Bienvenue.<br />Redirection...<br /><script type=\"text/javascript\"> window.setTimeout(\"location=('index.php');\",3000)</script>"; } } elseif ($connect['password'] != sha1(strtoupper($_POST['password']))) { $pagecontent = "Le mot de passe n'est pas correct. Veuillez réessayer."; }else{ $pagecontent = "Une erreur est survenue.<br />Veuillez entrer votre adresse mail et mot de passe si vous ne l'avez pas fait.";} edit: j'ai réappliqué tes %s je viens de comprendre que cela signifie que ça prends la variable suivante, soit l'account et passwd traité. Cela accepte de me connecter, sans erreur pour un compte qui a un serveur, avec erreur avec celui sans, mais les variables $_SESSION ne s'appliquent toujours pas, dans les deux cas. EDIT bis : Problème réglé ! j'avais oublié de déclarer $connect en fetch array de $preconnect. Encore merci de votre aide ! Si des personnes rencontrent le problème, j'ai édité le code PHP. Modifié 28 Octobre 2010 par Aenoa
SStephane Posté 28 Octobre 2010 Posté 28 Octobre 2010 Tu as modifié mon imbrication, d'où l'erreur <?phpsession_start();$basepos = "Connexion";$absolutpos = "Interface de connexion";if (isset($_POST['nameconnect']) && isset($_POST['password'])){ mysql_connect('********', '******', '*******'); mysql_select_db('*******'); $passwd = sha1($_POST['password']); $account = strtoupper($_POST['nameconnect']); $sql = "SELECT * FROM ts3s_members WHERE pseudo='%s' AND password='%s'"; $sql = sprintf($sql,mysql_real_escape_string($account),mysql_real_escape_string($passwd)); $preconnect = mysql_query($sql); //si login ok if (mysql_num_rows($preconnect)) { foreach($connect as $key=>$value) $_SESSION[$key] = $value; $_SESSION['ip_actual'] = $_SERVER['REMOTE_ADDR']; mysql_query("UPDATE ts3s_members SET ip_actual ='".$_SERVER['REMOTE_ADDR']."' WHERE pseudo='".$_SESSION['pseudo']."'"); $connect = mysql_fetch_array($preconnect); //si IAS ok if ($connect['IAS']) { $sql = "SELECT * FROM ts3s_servers WHERE uid='%s'"; $sql = sprintf($sql, mysql_real_escape_string($connect['id'])); $query = mysql_query($sql); //Si info serveur if (mysql_num_rows($query)) { $server = mysql_fetch_assoc($query); foreach($server as $key=>$value) $_SESSION[$key] = $value; $pagecontent = "Connexion réussie. Bienvenue.<br />Redirection...<br /><script type=\"text/javascript\"> window.setTimeout(\"location=('index.php');\",3000)</script>"; } else { $pagecontent = "Echec de la prise d'informations de votre serveur."; } } else { // ECHEC IAS $pagecontent = "IAS = 0"; } } else { $pagecontent = "Le mot de passe n'est pas correct. Veuillez réessayer."; }}else{ $pagecontent = "Formulaire non soumis";}?> Soit dit-en passant, la base de donnée est mal construite, pourquoi IAS ? alors qu'il doit y avoir une date de fin dans la table ts3s_servers ? Egalement, pourquoi ne pas faire une seule requête ?
Aenoa Posté 28 Octobre 2010 Auteur Posté 28 Octobre 2010 disons que je ne suis pas très évolué niveau codage, c'est assez crade comme code, mais bon '
SStephane Posté 28 Octobre 2010 Posté 28 Octobre 2010 Il y a pire comme code Dans l'idéal, ta base devrait être un truc du genre : (fais pas attention aux noms) users ---------- id email pass ... serveur_ts ---- id id_user <----- avec une clé étrangère (user supprimé -> cascade) date_expiration <----- c'est cette date qui fait qu'un serveur est actif ou non ... Si il n'y a qu'un seul serveur possible par utilisateur, tu peux ne faire qu'une seule table, le champs IAS est de trop dans tous les cas (d'ailleurs, si il peut y avoir plusieurs serveurs/user, tu devras le modifier). C'est le serveur qui est actif, et non l'utilisateur, et j'imagine qu'il sont loués sur une période, d'où la date. Si ton service n'est pas encore en place, je t'engage vivement à revoir ta base, c'est mieux qu'après Bonne chance !
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant