Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Erreur formulaire de mot de passe


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Erreur formulaire de mot de passe
    Bonjour,
    j'espère que vous allez bien.

    J'ai créé un formulaire qui modifie un mot de passe dans une base, mais il me retourne cette erreur.

    Error: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 ''e36b5cc8dfbefe0f8aa32c881213e40b' from utilisateurs WHERE nom='Fernandes' AND p' at line 1

    Sauriez-vous pourquoi ??

    Le code de la page de traitement :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?php
     
    											//session_start(); // Ici on continue la session
    	require('control-session2.php');
     
     
    				include("inc/connexion_utilisateurs.php");
    				include("inc/fonctions.php");
     
     
    					$nom=$_POST['nom'];
    					$prenom=$_POST['prenom'];
    					$mdp=$_POST['newmdp'];
     
    					$mdpcrypte= md5('$mdp');
     
    					$query="UPDATE passwd='$mdpcrypte' from utilisateurs WHERE nom='$nom' AND prenom='$prenom'";
    					$result=mysql_query($query) or die('Error:'.mysql_error());
     
     
     
    				?>


    Je sais que c'est du MD5, mais ce n'est pas moi qui ait fait la base, et il y a déjà plein de mots de passe chiffrés avec ce dernier.

    Merci beaucoup pour votre aide
    quaresma

  2. #2
    Membre expérimenté
    Bonjour

    Ton instruction SQL est incorrecte; voir https://dev.mysql.com/doc/refman/8.0...en/update.html

    UPDATE TableName Set FieldName = Value WHERE ...

    Note que ton code PHP est non sécurisé (je suppose que tu n'as pas le choix et que tu dois rester en PHP 5).

    Si ton script est accessible publiquement, tu as des risques d'injections SQL. Essaie peut-être au moins de sécuriser tes variables $_POST...

    (si je donne comme prénom Toto' or '1'='1 il y a des chances que je change les mots de passe de l'intégralité de tes utilisateurs; gloups)
    Christophe (cavo789)
    Mes scripts Open Source : https://github.com/cavo789

  3. #3
    Modérateur

    Bonjour,

    La syntaxe d'une requête UPDATE est la suivante :
    Code SQL0UPDATE la_table
    SET la_colonne = la_valeur
    WHERE condition :
    Sélectionner tout -Visualiser dans une fenêtre à part


    Donc dans votre code :
    Code PHP :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <?php
    //session_start(); // Ici on continue la session
    require('control-session2.php');
     
    include("inc/connexion_utilisateurs.php");
    include("inc/fonctions.php");
     
    $nom = $_POST['nom'];
    $prenom = $_POST['prenom'];
    $mdp = $_POST['newmdp'];
     
    $mdpcrypte = md5('$mdp');
     
    $query = "
    	UPDATE utilisateurs 
    	SET passwd = '$mdpcrypte' 
    	FROM utilisateurs 
    	WHERE nom = '$nom' 
    		AND prenom='$prenom'
    ";
     
    $result = mysql_query($query) or die('Error:'.mysql_error());
    ?>


    Ensuite...
    1) les commandes mysql_ sont obsolètes !
    Passez à PDO !

    2) Aérez votre code comme je l'ai fait ; ça le rendra plus lisible !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Membre régulier
    Citation Envoyé par CinePhil Voir le message

    1) les commandes mysql_ sont obsolètes !
    Passez à PDO !

    2) Aérez votre code comme je l'ai fait ; ça le rendra plus lisible !
    Bonjour,
    merci pour ta réponse.

    J'ai fait les modifications, mais j'ai toujours une erreur.

    Error: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 'FROM utilisateurs WHERE nom = 'Fernandes' AND prenom='Damien'' at line 3

  5. #5
    Membre expérimenté
    Citation Envoyé par quaresma Voir le message
    WHERE nom = 'Fernandes' AND prenom='Damien'' at line 3
    Derrière le mot Damien tu as deux apostrophes. Une seule suffit.
    Christophe (cavo789)
    Mes scripts Open Source : https://github.com/cavo789

  6. #6
    Membre régulier
    Non
    Je ferme juste le ""

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <?php
     
    	require('control-session2.php');
     
     
    				include("inc/connexion_utilisateurs.php");
    				include("inc/fonctions.php");
     
     
    					$nom=$_POST['nom'];
    					$prenom=$_POST['prenom'];
    					$mdp=$_POST['newmdp'];
     
    					$mdpcrypte= md5('$mdp');
     
    					$query="UPDATE utilisateurs 
    	SET passwd = '$mdpcrypte' 
    	FROM utilisateurs 
    	WHERE nom = '$nom' 
    	AND prenom='$prenom'";
     
    					$result=mysql_query($query) or die('Error:'.mysql_error());
     
     
     
    				?>

  7. #7
    Modérateur

    Retire le FROM utilisateurs !

    La bonne syntaxe en SQL :
    Code SQL :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE utilisateurs
    SET passwd = '$mdpcrypte' 
    WHERE nom = '$nom' 
    	AND prenom ='$prenom'
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  8. #8
    Membre régulier
    Merci beaucoup

  9. #9
    Modérateur

    C'est ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  10. #10
    Membre régulier
    Il change bien le mot de passe dans la base, mais il me dit que l'utilisateur est inconnu quand j'essaie de m'authentifier avec le nouveau mot de passe oO

  11. #11
    Modérateur

    Ce n'est plus le même programme, du coup. Donc on ne peut pas t'aider si tu ne donnes pas le code de la connexion.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  12. #12
    Membre régulier
    Ok merci

    Je vous le donne demain

  13. #13
    Membre régulier
    Bonsoir,
    j'espère que vous allez bien.

    J'ai trouvé le code, mais je précise que ce n'est pas moi qui l'ait écrit par contre.

    Quand on appuie sur le bouton "Enregistrer" du formulaire


    Code Javascript :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    buttons: {
    				'Enregistrer': function() {
     
    						var reg=new RegExp("'", "g");
     
    						var  login=$("#login").val();
    						var  passwd=$("#passwd").val();
    						var  change_passwd=$("#change_passwd").val();
     
     
    						login=login.replace(reg,"''");
    						passwd=passwd.replace(reg,"''");
    						change_passwd=change_passwd.replace(reg,"''");
     
     
    						if (login=="")
    						{
    							alert("Erreur! Vous devez renseigner tous les champs.");
    						}else{
     
    							var url = 'test_login.php?login='+login+'&passwd='+passwd+'&change_passwd='+change_passwd;
    							url=verif(url);
    							var val= new String($.ajax({ url: url, async: false }).responseText);
    							val=val.trim();
    							if (val!="Utilisateur inconnu." && val!="...") {
    									droit(val);
    									$(this).dialog('close');
    									$(this).html("");
    									var tab=val.split(',');
     
    									var nom=tab[1].split('=');
    									var prenom=tab[2].split('=');
    									var mail=tab[4].split('=');
    									$("#info_user").html("<p class='info_user'>"+prenom[1]+" "+nom[1]+" ("+login+") <a class='info_user' href='#' onclick='login();'>|Déconnexion|</a><p>");
    									$.cookie("user",login,{ expires: 7 });
     
    							}else{alert("Erreur:"+val);}
     
    						}
     
    				}
    			}



    Ce que contient la page "testlogin.php"


    Code PHP :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    <?php
    	include("inc/clogin.php");
    	include("inc/fonctions.php");
     
     
     
    	// le formuaire vient d'être soumis
    	$tmp='';
    	$login  = (isset($_GET['login'])) ? htmlentities(trim($_GET['login'])) : '';
    	$pwd   = (isset($_GET['passwd']))    ? htmlentities(trim($_GET['passwd']))   : '';
    	$newpwd   = (isset($_GET['change_passwd']))    ? htmlentities(trim($_GET['change_passwd']))   : '';
    	if (($login != '') && ($pwd != ''))
    	{
    		// Login et pwd non vides, on  vérifie s'il y a quelqu'un qui correspond
    		$req_utilisateur = sprintf("SELECT * FROM utilisateurs WHERE (active=1 and login = '%s' AND passwd = '%s' );",$login, md5($pwd));
    		$utilisateur = mysql_query($req_utilisateur) or die($req_utilisateur."<br />\n".mysql_error());
     
    		if (mysql_num_rows($utilisateur) == 1)
    		{
    			session_start(); 
    			// Oui il y a quelqu'un ...
    			$personne='';
    			$personne = mysql_fetch_array($utilisateur);
    			//print($login."|".$personne['nom']."|".$personne['prenom']."|".$personne['grade']."|".$personne['email']."|".$personne['site']."|".$personne['service']);
    			// On  enregistre ses données dans la session
     
     
    			//$_SESSION['nom'] = $personne['nom'];
    			//$_SESSION['prenom'] = $personne['prenom'];
    			//$_SESSION['grade'] = $personne['grade'];
    			//$_SESSION['email'] = $personne['email'];
    			//$_SESSION['site'] = $personne['site'];
    			//$_SESSION['service'] = $personne['service'];
    			//$_SESSION['mode'] = $personne['mode'];
    			//$_SESSION['sanctiongrade'] = $personne['sanctiongrade'];
    			//$_SESSION['personnelgrade'] = $personne['personnelgrade'];
    			//$_SESSION['atmp'] = $personne['atmp'];
    			//$_SESSION['atmpgrade'] = $personne['atmpgrade'];
    			//$_SESSION['trsgrade'] = $personne['trsgrade'];
    			//$_SESSION['informatiquegrade'] = $personne['informatiquegrade'];
    			//$_SESSION['polyvalencegrade'] = $personne['polyvalencegrade'];
    			//$_SESSION['polyvalence'] = $personne['polyvalence'];
    			//$_SESSION['polyvalencemode'] = $personne['polyvalencemode'];
    			//$_SESSION['formulaires'] = $personne['formulaires'];
    			//$_SESSION['formulairesgrade'] = $personne['formulairesgrade'];
    			//$_SESSION['formulairesmode'] = $personne['formulairesmode'];	
     
     
    			$nbc=(mysql_num_fields($utilisateur));
     
    			for($ch=0;$ch<$nbc;$ch++)
    			{
    				$_SESSION[mysql_field_name($utilisateur,$ch)] = $personne[mysql_field_name($utilisateur,$ch)];
    				$param.=mysql_field_name($utilisateur,$ch).'='.mysql_result($utilisateur,0,$ch);
    				if ($ch>0 and $ch<($nbc-1)) $param.=",";
    			}
    			$_SESSION['login'] = $login; // permet de vérifier que l'utilisateur est bien connecté
    			print($param);
     
    			$date_heure=date("YmdHis");
    			if ($newpwd<>'') $newpwd=", passwd='".md5($newpwd)."' ";
    			$req_utilisateur = "update utilisateurs set dateheure='".$date_heure."', connecter=1 $newpwd where login='".$login."'"; 
    			$utilisateur = mysql_query($req_utilisateur) or die($req_utilisateur."<br />\n".mysql_error());
     
     
     
    		}else{print("Utilisateur inconnu.");}
    	}else{print("...");}
     
    ?>



    J'avoue que je ne comprend pas tout comme je ne suis pas développeur, alors si vous avez des idées d'où pourrait venir le souci..

    Merci encore pour votre aide
    quaresma

  14. #14
    Modérateur

    Le programme qui renvoie l'erreur est le premier. C'est de l'Ajax, c'est à dire un programme Javascript qui appelle un programme PHP et qui utilise la réponse du programme PHP.

    La première chose à faire serait d'utiliser l'outil de développement du navigateur Internet pour afficher dans la console de cet outil ce qui est envoyé et reçu par le programme Javascript.
    Quel navigateur utilises-tu ?

    Sous Firefox, l'outil de développement est accessible via le menu Outils / Développement Web / Outils de développement, ou bien la combinaison de touches Ctrl+Maj+i

    EDIT :
    Une idée aussi à vérifier, vu le programme PHP : N'y aurait-il pas des noms d'utilisateurs en double dans la BDD ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  15. #15
    Membre régulier
    Je suis sous Chrome.

    Il y a une erreur qui doit s'afficher dans l'outil de développement ??

  16. #16
    Membre régulier
    Il y a des personnes en double, mais avec des logins différents.

  17. #17
    Membre régulier
    Citation Envoyé par CinePhil Voir le message

    1) les commandes mysql_ sont obsolètes !
    Passez à PDO !

    2) Aérez votre code comme je l'ai fait ; ça le rendra plus lisible !
    Bonjour,
    est-ce que tu sais si les commandes mysql_ vont disparaitre prochainement ??

    Ce serait un gros souci pour nous comme on a un gros Intranet fait qu'avec ce genre de commandes :\

    Merci beaucoup pour ta réponse
    quaresma

  18. #18
    Modérateur

    Réponse en anglais ici :
    https://stackoverflow.com/questions/...nctions-in-php

    Les fonctions mysql_ ont été supprimées en 2015 dans PHP 7.0
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  19. #19
    Membre régulier
    Citation Envoyé par CinePhil Voir le message
    Réponse en anglais ici :
    https://stackoverflow.com/questions/...nctions-in-php

    Les fonctions mysql_ ont été supprimées en 2015 dans PHP 7.0
    Merci pour ta réponse

    Ah oui
    Il y a un bon moment déjà oO

    Je suis en CDD, donc je ne resterai pas dans cette société, mais tu crois qu'il y aura un souci un jour s'ils ne passent pas au PDO ??

  20. #20
    Modérateur

    Ben si par hasard ils décident de mettre à jour leur PHP en version 7+...
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

###raw>template_hook.ano_emploi###