problème liaison table

ViPHP
ViPHP | 5462 Messages

17 mars 2010, 14:53

c'est normale tu réutilises ton ancien code

Eléphant du PHP | 388 Messages

17 mars 2010, 19:03

j'ai étudier se que tu ma dit j'ai essayer de l'adapter a mon code j'ai fait cela
<?

$MAILUTILISATEURS=$HTTP_POST_VARS['MAILUTILISATEURS']; 
$MDP=$HTTP_POST_VARS['MDP']; 

include ('../php/connect.php');//ici on inclut le fichier avec l'accès à MySQL.

$crypt=md5($MDP);//On crypt le mot de passe en md5 pour l'entrer dans la table
$sql = "select MDP from utilisateurs where NUMUTILISATEURS,MAILUTILISATEURS='".$NUMUTILISATEURS.",".$MAILUTILISATEURS."'"; // on recupère le password de la table qui correspond au login du visiteur
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

$data = mysql_fetch_array($req);//On comptabilise le nombre de résultat trouvé

if($data['MDP'] != $crypt)
  {//Si le mot de passe envoyé par Flash, est différent au mot de passe de la table
    echo 'Mauvais identifiant(s)';//on affiche le "resulat"
  }
    else
     { 
	 session_start();
	 $user=mysql_fetch_assoc($req);
	 
     $_SESSION['MAILUTILISATEURS'] = $user['MAILTUILISATEURS']; 
	 $_SESSION['NUMUTILISATEURS'] = $user['NUMUTILISATEURS'];
     header('Location: ../moncomptepart.php');
     }  

?>
et cela me retourne l'erreur : Erreur SQL !
select MDP from utilisateurs where NUMUTILISATEURS,MAILUTILISATEURS=',mickael'
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'MAILUTILISATEURS=',mickael'' at line 1


En essayant avec ton code j'obtient une autre erreur comme quoid il ne trouve pas la collum MDP alors quelle est bien présente

ViPHP
ViPHP | 5462 Messages

17 mars 2010, 19:04


Eléphant du PHP | 388 Messages

17 mars 2010, 20:26

J'ai fait cela :
<?php

$mail = $_POST['MAILUTILISATEURS'];
$mdp  = $_POST['MDP'];

include '../php/connect.php';

$sql = sprintf("SELECT <span style="font-weight: bold">NUMUTILISATEURS</span>, MAILUTILISATEURS FROM utilisateurs WHERE MAILUTILISATEURS='%s' AND mdp=MD5(%s)", $mail, $mdp);
$req = mysql_query($sql) || exit('<pre>' . $sql . PHP_EOL . mysql_error() . '</pre>');

if($req)
{
    session_start();
    $user = mysql_fetch_assoc($req);

    $_SESSION['MAILUTILISATEURS'] = $user['mailutilisateurs'];
    $_SESSION['NUMUTILISATEURS'] = $user['NUMUTILISATEURS'];
 
    header('Location: ../moncomptepart.php');
}

?>
Tu avait mit FORM au lieu de FROM puis j'obtient l'erreur Parse error: syntax error, unexpected T_STRING in /homez.316/logisdesq/www/php/loginpart.php on line 8

Si je laisse FORM
<?php

$mail = $_POST['MAILUTILISATEURS'];
$mdp  = $_POST['MDP'];

include '../php/connect.php';

$sql = sprintf("SELECT NUMUTILISATEURS, MAILUTILISATEURS FORM utilisateurs WHERE MAILUTILISATEURS='%s' AND mdp=MD5(%s)", $mail, $mdp);
$req = mysql_query($sql) || exit('<pre>' . $sql . PHP_EOL . mysql_error() . '</pre>');

if($req)
{
    session_start();
    $user = mysql_fetch_assoc($req);

    $_SESSION['MAILUTILISATEURS'] = $user['mailutilisateurs'];
    $_SESSION['NUMUTILISATEURS'] = $user['NUMUTILISATEURS'];
 
    header('Location: ../moncomptepart.php');
}

?>
J'obtient l'erreur :

SELECT NUMUTILISATEURS, MAILUTILISATEURS FORM utilisateurs WHERE MAILUTILISATEURS='mickael' AND mdp=MD5(TOTO)
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'utilisateurs WHERE MAILUTILISATEURS='mickael' AND mdp=MD5(TOTO)' at line 1

Mammouth du PHP | 985 Messages

17 mars 2010, 20:51

Bonjour,

Tu devrais, peut-être, sélectionner le champ mdp vue qu'il est censé être vérifié ensuite.
Tu devrais aussi, à mon avis, éxécuter le md5 avant de l'insérer dans ta requête.
Tu devrais ensuite, je pense, entourer d'apostrophes la valeur de mdp=.
Pour finir, tu devrais, peut-être encore, utiliser la fonction mysql_real_escape_string() dans ta requête.
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 388 Messages

17 mars 2010, 20:56

mais je ne voit pas pourquoi je ne peut pas reutiliser mon code que voici et inclure L'ID ( NUMUTILISATEURS) afin de le recuperer.
<?

$MAILUTILISATEURS=$HTTP_POST_VARS['MAILUTILISATEURS'];
$MDP=$HTTP_POST_VARS['MDP'];

include ('../php/connect.php');//ici on inclut le fichier avec l'accès à MySQL.

$crypt=md5($MDP);//On crypt le mot de passe en md5 pour l'entrer dans la table
$sql = "select MDP from utilisateurs where NUMUTILISATEURS,MAILUTILISATEURS='".$NUMUTILISATEURS.",".$MAILUTILISATEURS."'"; // on recupère le password de la table qui correspond au login du visiteur
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

$data = mysql_fetch_array($req);//On comptabilise le nombre de résultat trouvé

if($data['MDP'] != $crypt)
  {//Si le mot de passe envoyé par Flash, est différent au mot de passe de la table
    echo 'Mauvais identifiant(s)';//on affiche le "resulat"
  }
    else
     {
         session_start();
         $user=mysql_fetch_assoc($req);
         
     $_SESSION['MAILUTILISATEURS'] = $user['MAILTUILISATEURS'];
         $_SESSION['NUMUTILISATEURS'] = $user['NUMUTILISATEURS'];
     header('Location: ../moncomptepart.php');
     }  

?>
 

Mammouth du PHP | 985 Messages

17 mars 2010, 21:31

Si tu changes de requête à chaque poste, cela complique les choses...

Donc en reprenant la requête précédente:
Comme l'expliquait Steal dans un autre Topic or et || n'ont pas toujours la même signification.
php-debutant/mettre-jours-les-lignes-co ... ml#p318490

Donc concrètement:
$req = mysql_query($sql) or exit('<pre>' . $sql . PHP_EOL . mysql_error() . '</pre>');
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 388 Messages

17 mars 2010, 21:48

oui dsl faut pas que je m'éparpille,

voici donc le code avec ta modification
<?php

$mail = $_POST['MAILUTILISATEURS'];
$mdp  = $_POST['MDP'];

include '../php/connect.php';


$sql = sprintf("SELECT NUMUTILISATEURS, MAILUTILISATEURS FORM utilisateurs WHERE MAILUTILISATEURS='%s' AND mdp=MD5(%s)", $mail, $mdp);
$req = mysql_query($sql) or exit('<pre>' .  $sql . PHP_EOL . mysql_error() . '</pre>');

if($req)
{
    session_start();
    $user = mysql_fetch_assoc($req);

    $_SESSION['MAILUTILISATEURS'] = $user['mailutilisateurs'];
    $_SESSION['NUMUTILISATEURS'] = $user['NUMUTILISATEURS'];
 
    header('Location: ../moncomptepart.php');
}

?>
et j'obtient :

SELECT NUMUTILISATEURS, MAILUTILISATEURS FORM utilisateurs WHERE MAILUTILISATEURS='mickael' AND mdp=MD5(toto)
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'utilisateurs WHERE MAILUTILISATEURS='mickael' AND mdp=MD5(toto)' at line 1

et sinon en suivant ton conseil : controle de mot de passe,

Code : Tout sélectionner

<?php $mail = $_POST['MAILUTILISATEURS']; $mdp = $_POST['MDP']; include '../php/connect.php'; $crypt=md5($MDP); $sql2 = "select MDP from utilisateurs where MAILUTILISATEURS='".$MAILUTILISATEURS."'"; $req = mysql_query($sql2) or die('Erreur SQL !<br>'.$sql2.'<br>'.mysql_error()); $sql = sprintf("SELECT NUMUTILISATEURS, MAILUTILISATEURS FORM utilisateurs WHERE MAILUTILISATEURS='%s' AND mdp=MD5(%s)", $mail, $mdp); $req = mysql_query($sql) or exit('<pre>' . $sql . PHP_EOL . mysql_error() . '</pre>'); if($req) { session_start(); $user = mysql_fetch_assoc($req); $_SESSION['MAILUTILISATEURS'] = $user['mailutilisateurs']; $_SESSION['NUMUTILISATEURS'] = $user['NUMUTILISATEURS']; header('Location: ../moncomptepart.php'); } ?>
toujours des erreur 8-|

Mammouth du PHP | 985 Messages

17 mars 2010, 22:06

Bon je ne sais pas si ton champ est déjà crypté en MD5 ou pas...

Bref, pas grave, en reprenant ta requête, logiquement sa syntaxe devrait ressembler à ceci:
$crypt = md5($MDP);

WHERE md5(champ) = '$crypt'"
Sinon tu n'as pas compris pour le sélectionner le champ mdp, je n'ai pas dis de sélectionner que le champ mdp, j'ai dis de sélectionner au minimum tous les champs que tu voulais comparer ensuite...
Quelque part c'est logique :wink:

[EDIT]
Sinon si la valeur de ton champ est déjà cryptée en md5.
Alors c'est juste:
WHERE champ = '$crypt'"
Sinon, je ne comprends pas pourquoi ceci ne marcherait simplement pas:
WHERE champ = '$MDP'"
...
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 388 Messages

17 mars 2010, 22:26

je sait pas si c'est la fatigue ou pas lol donc mon champs MDP est déja en md5

donc si je te suis cela devrait donné
<?php

$mail = $_POST['MAILUTILISATEURS'];
$mdp  = $_POST['MDP'];

include '../php/connect.php';



$sql = sprintf("SELECT NUMUTILISATEURS, MAILUTILISATEURS FORM utilisateurs WHERE MAILUTILISATEURS='%s' AND mdp=MD5(%s)", $mail, $mdp);
$req = mysql_query($sql) or exit('<pre>' .  $sql . PHP_EOL . mysql_error() . '</pre>');

WHERE champ = '$MDP'"

if($req)
{
    session_start();
    $user = mysql_fetch_assoc($req);

    $_SESSION['MAILUTILISATEURS'] = $user['mailutilisateurs'];
    $_SESSION['NUMUTILISATEURS'] = $user['NUMUTILISATEURS'];
 
    header('Location: ../moncomptepart.php');
}

?>
mais cela me produit une erreur sur WHERE champ = '$MDP'"
faudrait t'il que je refasse une nouvelle requete
$sql = sprintf("SELECT NUMUTILISATEURS, MAILUTILISATEURS FORM utilisateurs WHERE champ = '$MDP'";

Mammouth du PHP | 985 Messages

17 mars 2010, 22:30

Je te donne des indications et non la requête complète, donc WHERE c'est évidemment une partie de ta requête.
Sinon champ faut le remplacer par le nom de ton champ, donc ici c'est mdp.

[EDIT]
Si ton champ est déjà en md5 alors faut le comparer avec la valeur cryptée en md5.
Modifié en dernier par Dr@ke le 17 mars 2010, 22:33, modifié 1 fois.
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 388 Messages

17 mars 2010, 22:32

oui désolé donc sa fairai
$sql = sprintf("SELECT NUMUTILISATEURS, MAILUTILISATEURS FORM utilisateurs WHERE MDP = '$mdp'";

Eléphant du PHP | 388 Messages

17 mars 2010, 22:34

oui désolé donc sa fairai
$sql = sprintf("SELECT NUMUTILISATEURS, MAILUTILISATEURS FORM utilisateurs WHERE MDP = '$mdp'");
j'obtient donc

SELECT NUMUTILISATEURS, MAILUTILISATEURS FORM utilisateurs WHERE MDP = 'sss'
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'utilisateurs WHERE MDP = 'sss'' at line 1

Mammouth du PHP | 985 Messages

17 mars 2010, 22:36

Ce n'est pas FORM mais FROM.

Ensuite si $mdp est crypté en MD5 -> oui.
Sinon, il faut faire avant de l'insérer dans ta requête:
$mdp = md5($mdp);
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 388 Messages

17 mars 2010, 22:39

non cela ne marche pas dsl, n'importe quel compte peut se connecter si je marque n'importe quoi la session se fait quand meme

Voici le code total
<?php

$mail = $_POST['MAILUTILISATEURS'];
$mdp  = $_POST['MDP'];


include '../php/connect.php';



$sql = sprintf("SELECT NUMUTILISATEURS, MAILUTILISATEURS FROM utilisateurs WHERE MDP = '$mdp'");
$req = mysql_query($sql) or exit('<pre>' .  $sql . PHP_EOL . mysql_error() . '</pre>');



if($req)
{
    session_start();
    $user = mysql_fetch_assoc($req);

    $_SESSION['MAILUTILISATEURS'] = $user['MAILUTILISATEURS'];
    $_SESSION['NUMUTILISATEURS'] = $user['NUMUTILISATEURS'];
 
    header('Location: ../moncomptepart.php');
}

?>
Modifié en dernier par spidercrash le 17 mars 2010, 22:51, modifié 1 fois.