Aller au contenu

Sujets conseillés

Posté (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é par Aenoa
Posté

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....

Posté (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é par Aenoa
Posté

Tu as modifié mon imbrication, d'où l'erreur


<?php

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='%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 ?

Posté

disons que je ne suis pas très évolué niveau codage, c'est assez crade comme code, mais bon ^^'

Posté

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 !

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...