A voir également:
- Mysql avec php
- Easy php - Télécharger - Divers Web & Internet
- Mysql community server - Télécharger - Bases de données
- Mysql gratuit ou payant - Forum MySQL
- Error 2002 (hy000): can't connect to local mysql server through socket '/var/lib/mysql/mysql.sock' (2) ✓ - Forum Linux / Unix
- Mysql error 1 ✓ - Forum Réseaux sociaux
6 réponses
Utilisateur anonyme
10 avril 2013 à 17:10
10 avril 2013 à 17:10
Bonjour,
Alors dans un 1er temps, si tu comptes faire un site web ONLINE, il serait bon de faire quelques recherches sur "les injections SQL" car sinon n'importe qui pourra se connecter en admin sur ton site.
Bon la parti sécurité n'est pas évoqué donc passons à ton code. Déjà bravo pour les commentaires, le nombres de Dev qui ne commentent pas leur code sont encore trop nombreux. Ensuite, j'ai pas bien saisie pourquoi tu veux tester un utilisateur et la date d'expiration, c'est pour fermer la session?
et pour date("Y-m-d") c'est juste (année-mois-jour), si c'est ça ta question :)
Z.
Alors dans un 1er temps, si tu comptes faire un site web ONLINE, il serait bon de faire quelques recherches sur "les injections SQL" car sinon n'importe qui pourra se connecter en admin sur ton site.
Bon la parti sécurité n'est pas évoqué donc passons à ton code. Déjà bravo pour les commentaires, le nombres de Dev qui ne commentent pas leur code sont encore trop nombreux. Ensuite, j'ai pas bien saisie pourquoi tu veux tester un utilisateur et la date d'expiration, c'est pour fermer la session?
et pour date("Y-m-d") c'est juste (année-mois-jour), si c'est ça ta question :)
Z.
Utilisateur anonyme
10 avril 2013 à 17:51
10 avril 2013 à 17:51
Euh on est d'accord que les PDO c'est pour la connexion à ta BDD?
$bdd = new PDO('mysql:host=localhost;dbname=nom_de_la_bdd', 'login', 'mdp');
$bdd = new PDO('mysql:host=localhost;dbname=nom_de_la_bdd', 'login', 'mdp');
Je sais me connecter en pdo merci ben voila j'ai fait ca je ne sais pas si c'est juste :
<?php
session_start();//creation d'une session
include_once("includes/connexion");//la connexion
if(isset($_POST["password"]) and isset($_POST["user_mail"])){ // verifier si login & pwd sont définies
$user_mail=$_POST["user_mail"]; // récuperer mail
$password=$_POST["password"]; // récuperer pwd
if ($user_mail && $password) {
$password = md5($password); // crypter pwd
$sql= 'SELECT count(*) from main_user where user_mail ="$user_mail" and user_password="$password"';
if($reslt=$cnn->query($sql)!=0)
{
$sql='user_id, user_nom, user_prenom, user_expire,user_active,user_service_fk, user_profile,user_division_fk from main_user where user_mail ="$user_mail" and user_password="$password"';
if($sql->fetchColumn(4)==0)
{
header("location: index.php?error=1");
exit;
}
if($sql->fetchColumn(3)!="0000-00-00")
{
header("location: index.php?error=2");
exit;
}
}
$user_id = $sql->fetchColumn(0);
$_SESSION["user_id"]=$user_id;
$user_division_fk =$sql->fetchColumn(7);
$_SESSION["user_division"]=$user_division_fk;
$user_service_fk=$sql->fetchColumn(5);
$_SESSION["user_service"]=$user_service_fk;
$user_profile=$sql->fetchColumn(6);
$_SESSION["user_profile"]=$user_profile;
$_SESSION["is_connected"]=1;
$_SESSION["user_login"]=$user_mail;
$user_ip = $_SERVER["REMOTE_ADDR"];// PI de user
$today = date("Y-m-d H:i:s"); // date de connexion
}
}
<?php
session_start();//creation d'une session
include_once("includes/connexion");//la connexion
if(isset($_POST["password"]) and isset($_POST["user_mail"])){ // verifier si login & pwd sont définies
$user_mail=$_POST["user_mail"]; // récuperer mail
$password=$_POST["password"]; // récuperer pwd
if ($user_mail && $password) {
$password = md5($password); // crypter pwd
$sql= 'SELECT count(*) from main_user where user_mail ="$user_mail" and user_password="$password"';
if($reslt=$cnn->query($sql)!=0)
{
$sql='user_id, user_nom, user_prenom, user_expire,user_active,user_service_fk, user_profile,user_division_fk from main_user where user_mail ="$user_mail" and user_password="$password"';
if($sql->fetchColumn(4)==0)
{
header("location: index.php?error=1");
exit;
}
if($sql->fetchColumn(3)!="0000-00-00")
{
header("location: index.php?error=2");
exit;
}
}
$user_id = $sql->fetchColumn(0);
$_SESSION["user_id"]=$user_id;
$user_division_fk =$sql->fetchColumn(7);
$_SESSION["user_division"]=$user_division_fk;
$user_service_fk=$sql->fetchColumn(5);
$_SESSION["user_service"]=$user_service_fk;
$user_profile=$sql->fetchColumn(6);
$_SESSION["user_profile"]=$user_profile;
$_SESSION["is_connected"]=1;
$_SESSION["user_login"]=$user_mail;
$user_ip = $_SERVER["REMOTE_ADDR"];// PI de user
$today = date("Y-m-d H:i:s"); // date de connexion
}
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
Modifié par zemalabare le 12/04/2013 à 10:00
Modifié par zemalabare le 12/04/2013 à 10:00
Bonjour,
Alors on ne fera pas de commentaire sur la façon d'écrire, mais il serait bien que tu lises les conventions d'écriture afin d'être compris par tous sans qu'on y passe 3h de lecture. ça faciliterai tes démarches de demande d'aide.
1- Ton 2nd if if ($user_mail && $password) { est super flux ou alors tu l'as mal écrit, car ton 1er if, teste si les variables sont définies. Donc il faudrait écrire comme cela :
if(isset($_POST["password"]) and isset($_POST["user_mail"]))
{ // verifier si login & pwd sont définies donc tu peux le crypter directement vu que ton 2nd if renverra toujours TRUE car tu ne testes rien.
. $user_mail=$_POST["user_mail"]; // récuperer mail <- inutile si tu ne fais pas d'échappement, cf injection SQL donc tu peux supprimer
. $password=$_POST["password"]; // récuperer pwd <- pareil que la ligne du dessus
. $password = md5($password); // crypter pwd
[...]
2- Evite d'utiliser le même nom de variable pour 2 contenus différents -> $sql
3- Ton 3ème if if($reslt=$cnn->query($sql)!=0) est "bon" le test ce fera mais tu auras l'erreur Object of class PDOStatement could not be converted to int. Il faut faire un fetch dessus :
$count_mail= 'SELECT count(*) from main_user where user_mail ="$user_mail" and user_password="$password"';
$count_mail_fetch=$count_mail->fetch();
if($reslt=$cnn->query($count_mail_fetch)!=0)
{
[...]
}
4- Ton 2nd $sql est mal écrit, si tu met "$password' c'est une chaine de caractère et non le contenu de la variable $password et en plus il manque le mot 'select'. Et au lieu de sélectionner 56 colonnes, prend les toutes, ca mange pas de pain.
$select_user='SELECT * FROM main_user WHERE user_mail =" '. $user_mail .' " and user_password=" '. $password .' "';
J'ai mis des espaces pour bien te montrer qu'il fallait concaténer tes variables. En php, le symbole pour la concaténation est le '.' Supprime les espaces pour avec une belle requête.
5- Et la je ne suis pas expert donc tu me diras si je me trompe ou pas, mais pourquoi faire un Fetchcolumm si tu ne fait pas de Query avant?donc il faudrait faire :
$query_select_user=$cnn->query($select_user)
if(($query_select_user['user_expire']->fetch)==0)
// Au moins quand tu te relis tu sais de quoi tu parles. Parce que mettre fetchcolumn 4, à moins de n'avoir fait qu'une seule table MySql dans sa vie .... on ne sait pas du tout de quoi il s'agit
{
header("location: index.php?error=1");
exit;
}
if($sql->fetchColumn(3)!="0000-00-00") <- et pareil ici, changer avec le NOM exacte de la colonne
{
header("location: index.php?error=2");
exit;
}
Z.
"Internet" est un outil ... apprenez à l'utiliser svp! Nous ne sommes pas là pour vous mâcher le travail. Faite une recherche sur CCM ou sur GG avant de poster, merci!
Alors on ne fera pas de commentaire sur la façon d'écrire, mais il serait bien que tu lises les conventions d'écriture afin d'être compris par tous sans qu'on y passe 3h de lecture. ça faciliterai tes démarches de demande d'aide.
1- Ton 2nd if if ($user_mail && $password) { est super flux ou alors tu l'as mal écrit, car ton 1er if, teste si les variables sont définies. Donc il faudrait écrire comme cela :
if(isset($_POST["password"]) and isset($_POST["user_mail"]))
{ // verifier si login & pwd sont définies donc tu peux le crypter directement vu que ton 2nd if renverra toujours TRUE car tu ne testes rien.
. $user_mail=$_POST["user_mail"]; // récuperer mail <- inutile si tu ne fais pas d'échappement, cf injection SQL donc tu peux supprimer
. $password=$_POST["password"]; // récuperer pwd <- pareil que la ligne du dessus
. $password = md5($password); // crypter pwd
[...]
2- Evite d'utiliser le même nom de variable pour 2 contenus différents -> $sql
3- Ton 3ème if if($reslt=$cnn->query($sql)!=0) est "bon" le test ce fera mais tu auras l'erreur Object of class PDOStatement could not be converted to int. Il faut faire un fetch dessus :
$count_mail= 'SELECT count(*) from main_user where user_mail ="$user_mail" and user_password="$password"';
$count_mail_fetch=$count_mail->fetch();
if($reslt=$cnn->query($count_mail_fetch)!=0)
{
[...]
}
4- Ton 2nd $sql est mal écrit, si tu met "$password' c'est une chaine de caractère et non le contenu de la variable $password et en plus il manque le mot 'select'. Et au lieu de sélectionner 56 colonnes, prend les toutes, ca mange pas de pain.
$select_user='SELECT * FROM main_user WHERE user_mail =" '. $user_mail .' " and user_password=" '. $password .' "';
J'ai mis des espaces pour bien te montrer qu'il fallait concaténer tes variables. En php, le symbole pour la concaténation est le '.' Supprime les espaces pour avec une belle requête.
5- Et la je ne suis pas expert donc tu me diras si je me trompe ou pas, mais pourquoi faire un Fetchcolumm si tu ne fait pas de Query avant?donc il faudrait faire :
$query_select_user=$cnn->query($select_user)
if(($query_select_user['user_expire']->fetch)==0)
// Au moins quand tu te relis tu sais de quoi tu parles. Parce que mettre fetchcolumn 4, à moins de n'avoir fait qu'une seule table MySql dans sa vie .... on ne sait pas du tout de quoi il s'agit
{
header("location: index.php?error=1");
exit;
}
if($sql->fetchColumn(3)!="0000-00-00") <- et pareil ici, changer avec le NOM exacte de la colonne
{
header("location: index.php?error=2");
exit;
}
Z.
"Internet" est un outil ... apprenez à l'utiliser svp! Nous ne sommes pas là pour vous mâcher le travail. Faite une recherche sur CCM ou sur GG avant de poster, merci!