Mysql avec php

Fermé
roona - 10 avril 2013 à 16:55
 roona - 15 avril 2013 à 10:29
je voudrais travailler avec PDO pour établir la connexion mais le problème c'est que:

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

//chercher login et mot de passe dans base de données
$query = "SELECT
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'";

$res = mysql_query($query,$dbg); // Envoie une requête à un serveur MySQL
if (mysql_num_rows($res) != 0) {// Retourne le nombre de lignes d'un résultat MySQL

if (mysql_result($res, 0, 4) == 0) { // Utilisateur désactivé
header("location:../index.php?error=1");
exit;
}
if (mysql_result($res, 0, 3) != "0000-00-00") { // Date d'expiration présente
if (mysql_result($res, 0, 3) < date("Y-m-d")) { // Utilisateur expiré
header("location:../index.php?error=2");
exit;
}
}

ici avec mysql_reult($res,0,0) je voudrais quelque chose avec qui je pourrais tester utilisateur et datate expiration
et pour date("Y-m-d") je ne l'ai pas comprise
et merci d'avance

6 réponses

Utilisateur anonyme
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.
0
si c'est possible me donner son équivalent en pdo
0
Utilisateur anonyme
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');
0
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





}
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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!
0
ok merci je vais tester et je vais voir le résultat
0