IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 :

soucis de update d'email unique [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Points : 113
    Points
    113
    Par défaut soucis de update d'email unique
    bonjour , j ai dans ma table un email qui doit être unique , donc pour ajouter je teste sur la colonne email s'il existe je renvoie l'utilisateur vers la même page pour lui dire qu'il doit choisir un autre email , je le fais sans problème, mais maintenant je veux faire des updates sur cette table :
    par exemple j ai nom, prenom et email à mettre à jour, la encore je dois contrôler l’unicité de l 'email qu il ne doit pas mettre un email qui existe dans la base de données et donc si je veux faire ce controle j aurai un problème par exemple (je veux modifier nom, prenom et email )
    donc lors de la modification je modifié juste le nom et les deux autres je les modifie pas donc mon système va faire des tests sur email et il va trouver ce email existe deja il va pas faire des updates et si je ne contrôle pas l email lors de la modification on pourrais inserer des email qui existe deja dans la base de données

    comment je peux gerer ce probleme et merci d'avance

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2009
    Messages : 116
    Points : 163
    Points
    163
    Par défaut
    Je pense que le mieux, c'est de montrer un peu de code source des fonctions que tu utilises pour pouvoir t'aider.
    Si on n'ose pas poser des questions bêtes, on le restera.


    Une recherche Google résoudra bien 60% de vos problèmes.

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Points : 113
    Points
    113
    Par défaut
    merci de votre aide voici mes code :

    mon formulaire update user
    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
    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
     
     
     <?php 
     session_start();
     
    		if (isset($_SESSION["identifiant"]) && $_SESSION["niveau"]=="admin") {
     
     
    		  include_once("prepend.inc.php");
     
    		   $iduser=$_GET['Id_users'];
    		   $query= mysql_query("select  * from users where  Id_users='".$iduser."'  ");
     
    		  while($data = mysql_fetch_assoc($query) ) 
         { 
         	 echo'
       <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
            "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
         	 <html>
      <head>
      <title>  Add user </title>
     
      <link rel="stylesheet" href="css/design.css" />
      <script type="text/javascript" src="js/admin.js"></script>
      
      
      </head>
      <body>';
    	     echo' <div id="corps">	';
     
     
              $chemin='../admin/header/';
             include($chemin.'logo.php');
     
              $chemin='../admin/header/';
             include($chemin.'banniere.php');
     
              $chemin='../admin/menu/';
             include($chemin.'menuadmin.php');
     
    		  echo'<div      id="contenu">';  
    		  $chemin='../admin/header/';
             include($chemin.'connecte.php');
         	echo  '<form   class="formadd" action="adduser.php"   method="post" id="enreg">';
     
                        echo'<table>';
                             echo'<caption> Mettre  à jour  Utilisateur <caption>';
                  echo '<tr>
                   <td><label> Login :</label></td>';
                  echo'<td><input type="text"  name="identifiant" required    value="'.htmlentities($data['Identifiant']).'" ></td></tr>';
               echo' <tr>
                    <td><label> Email :</label></td>';
                   echo'<td><input type="text"  name="email" required   value="'.htmlentities($data['email']).'"  ></td></tr>';
     
                   echo'<tr>
                
                    <td><label> Password :</label></td>';
                   echo'<td><input type="password"  name="password" required  value="'.$data['Password'].'" ></td></tr>';
     
                   echo'<tr>
                    
                     
                      <td><label>Comfirmation  Password :</label></td>';
                    echo'<td><input type="password"  name="confirmpassword" required   value="'.htmlentities($data['confirmpassword']).'" ></td></tr>';
     
                    echo"<tr>
                  
                    <td><label> Level :</label></td>";
                   echo"<td><input type='text'  name='level' required  value='".$data['level']."'></td></tr>";
     
                   echo '<tr>
                    
                   <td> <label> Profil :</label></td>';
                    echo' <td> <select name="niveau" >
                                  <option value="user">Utilisateur</option>
                                   <option value="admin">Administrateur</option>
                     </select>
                     </td></tr>
                    <tr>
                    <td></td>
                    <td><button   type="submit"   name="enregistrer"  value="Enregistrer">Mette à jour  </button></td></tr>
                   </table>
             </form>';
                    echo'</div>'; 
                     $chemin='../admin/header/';
             include($chemin.'pied.php');
                     echo '</div>
           </body>
           </html>';
         }
     
     
     
     
     
      ?>
    page de traitement de modification:

    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
    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
     <?php 
     session_start();
    
    		if (isset($_SESSION["identifiant"]) && $_SESSION["niveau"]=="admin") {
          
    		
    		  include_once("prepend.inc.php");
    		  
    		               $iduser=  utf8_encode($_POST['Id_users']);
    		               $identifiant=utf8_encode($_POST['identifiant']);
    		                $identifiant= mysql_real_escape_string($identifiant);
    				       $password= md5($_POST['password']);
    				        $password= mysql_real_escape_string($password);
    				       $level=utf8_encode ($_POST['level']);
    				       $email=utf8_encode ($_POST['email']);
    				        $email= mysql_real_escape_string($email);
    				       $confirmpassword=md5($_POST['confirmpassword']);
    				       $confirmpassword = mysql_real_escape_string($confirmpassword);
    				       $niveau=utf8_encode($_POST['niveau']);
    				        $niveau= mysql_real_escape_string($niveau);
    				       $date_creation=date("Y-m-j");
    				       
    				       
    	  if($_POST['password']!=$_POST['confirmpassword'])
    				       {
    				       	         header('Location: updateuser.php?erreur=1');
    				              //  echo"mot passe n'a pas �t� correctement  confirm� ";
    				       }
    				       elseif(!preg_match("/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]{2,}[.][a-zA-Z]{2,4}$/",$email))
                               {
                               	 header('Location: updateuser.php?erreur=2');
                              //  echo "email  non  valide";
                               }
                               
                   elseif ((mysql_num_rows(mysql_query(" select 1 from users where  email='".$email."'  OR Identifiant='".$identifiant."' "))>0))
    		                     	 {
    		                     	 	   header('Location:  updateuser.php?erreur=3');
    		                     	 	//echo" login  ou email  deja  utilis�";
    		                     	 }	  
    	                  else
    	                  {
    		              $queryuser=" update  users  SET 
    		                                       Identifiant='".$identifiant."',
    		                                       Password='".$password."',
    		                                       Level='".$level."',
    		                                       niveau='".$niveau."',
    		                                       email='".$email."',
    		                                       confirmpassword='".$confirmpassword."',
    		                                       date_creation='".$date_creation."',
    		                                       where  Id_users='".$iduser."'
    		                   
    				                       ";
    		                     	
    		                     $GLOBALS['db']->Query($queryuser);
    		                     header ('Location: consulteruser.php');
    	                  }
    		  
    		  } 
    	 else  
    	 {
    	 	   unset ($_SESSION["identifiant"]);
    	          session_destroy();
    	 	   header ('Location: index.php?erreur=2');
    	 }
     ?>
    dans la page de traitment la ou j ai mis en gras : j essaye de tester si le email ou l identifiant est unique ou non avant de modifier

    mais mon problème est que lors de l'ajout j ai traité l'unicité de l'email et de l'identifiant maintenant pour modifier je dois le traité mais si je traite je ne pourrais pas modifier a chaque fois on renvoie vers l'erreur pour dire que l'email doit être unique

    comment je vais gérer l'unicité de l email tout en pouvant modifié

    merci d'avance

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2009
    Messages : 116
    Points : 163
    Points
    163
    Par défaut
    Tu as déjà une erreur dans ton code source

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     $queryuser=" update  users  SET 
    		                                       Identifiant='".$identifiant."',
    		                                       Password='".$password."',
    		                                       Level='".$level."',
    		                                       niveau='".$niveau."',
    		                                       email='".$email."',
    		                                       confirmpassword='".$confirmpassword."',
    		                                       date_creation='".$date_creation."'
    		                                       where  Id_users='".$iduser."'
    Après date_creation, il y a une virgule qui ne devrait pas figurer


    Et sinon tu peux modifier ta requete comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     select 1 from users where (email='".$email."'  OR Identifiant='".$identifiant."') AND  Id_users<> ".$iduser.'"
    Et même pour être sur, dans ta base mysql, tu peux rendre un champ unique

    Et tu peux toujours améliorer ton code
    Si on n'ose pas poser des questions bêtes, on le restera.


    Une recherche Google résoudra bien 60% de vos problèmes.

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Points : 113
    Points
    113
    Par défaut
    merci de votre mais cela ne resoud pas mon probleme, j arrive a geré lunicité de email mais mon probleme de pouvoir faire les modification par exemple j ai dans la table

    nom: dddd
    prenom ddd
    email: ddd@gmail.com

    maintenant lorsque je veux modifier par exemple le nom seulement
    apres avoir geré l'unicité de l email j aurai un probleme avec email il va m affiché l erreur suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    login ou email deja utilisé
    qui repond bien a la gestion de l'unicité de l 'email

    merci d'avance

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2009
    Messages : 116
    Points : 163
    Points
    163
    Par défaut
    Est-ce que tu as bien modifié la deuxieme requete que je t'ai donné?
    Si on n'ose pas poser des questions bêtes, on le restera.


    Une recherche Google résoudra bien 60% de vos problèmes.

  7. #7
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Personnellement (si je peux me permettre), je lancerais 2 requêtes SQL bien distinct afin de savoir si c'est l'email qui ne serait pas unique ou l'identifiant.

    Le fait de fusionner ces 2 infos en une seule requête SQL ne nous indiquera pas lequel des 2 (email ou identifiant) n'est pas unique, voire même les 2.

    Par ailleurs, lors de l'identification, c'est théoriquement le couple identifiant/mot de passe qui permet d'identifier la personne, et non le couple email/mot passe, ce qui me semble le cas ici.
    Ce n'est pas tout à fait la même chose, non ?
    Pour l'email c'est quelque part une exception, une spécificité (une règle de gestion à part) : une adresse mail doit être unique, tout comme un N° de téléphone, Fax.


    A coté de ça, (pure suggestion comme ça, donc remarque à 2 balles peut être) ...
    Pourquoi ne pas simplifier les choses en supprimant l'identifiant et faire en sorte que le système d'identification se base sur le couple email/mot de passe ?
    A titre perso, je trouve ça lourd de d'avoir 2 choses souvent compliquer à retenir (identifiant/mot de passe), ça incite les gens à mettre des trucs hyper simples à retenir, donc forcément facile à trouver, à usurper pour des hacker/pirate.
    Son adresse e-mail comme identifiant c'est en générale une info qu'on connait (et c'est unique), reste juste le mot passe.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Autre approche :
    Puisque l'adrel doit être unique, place un index de type UNIQUE sur la colonne portant l'adrel.
    La tentative d'insérer une adrel qui existe déjà ou de mettre à jour une adrel par une déjà présente dans la colonne fera que le SGBD renverra une erreur. Il suffit alors de gérer l'erreur côté PHP.

    Idem bien sûr pour toute autre colonne portant une information qui doit être unique.
    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 !

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Points : 113
    Points
    113
    Par défaut
    merci de votre aide, je pense que vous n avez pas bien compris mon problème:

    pour la gestion de l'unicité de l'email et de l'Identifiant j ai pas de problème je la gère très bien et ça fonctionne très bien leur de l'insertion .

    Maintenant arrivé au niveau de la mise a jour c'est la que je me bloque:

    pour la mise a jour de l'email ou Identifiant je doit tester s'il existe déjà ou non (qui la gestion de l'unicité de l'email et Identifiant qui me pose pas de problème je la gère très bien ). Maintenant si je veux juste modifier le mot de passe sans modifier l’Identifiant et email c'est la que ça cloche parce que le système va vérifié l'email et Identifiant il va trouvé qu'il existe déjà dans la table il va généré l'exception (la je veux juste modifier mot de passe sans généré l'exception de l’existence déjà de l'email ou Identifiant)
    Maintenant moi ce que je veux c'est pouvoir geré l'unicité de l'email et Identifiant en même temps pouvoir changé les autre champs sans parfois changé l'email ou l'Identifiant

    merci d'avance

  10. #10
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Si tu fais juste une mise à jour du mot de passe, tu n'as pas à mettre à jour les autres colonnes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE la_table
    SET mot_de_passe = $hash_password
    WHERE colonne_identifiant = $id_user
    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 !

  11. #11
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Points : 113
    Points
    113
    Par défaut
    si je comprend bien dans ma requete update je ne dois pas mentionne les colonnes email et Identifiant pour mettre a jour ma table ??

  12. #12
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Ben non, si tu dois seulement changer le mot de passe.
    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 !

  13. #13
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Points : 113
    Points
    113
    Par défaut
    merci de votre aide , est ce que c'est possible dans ma requête update de mettre tous les champs, maintenant lors de la modification je modifie les champs que je veux tout en gérant l'unicité de email et Identifiant et sans que ça génère les exceptions si je ne modifie pas l'email ou Identifiant??
    sinon est ce que y a une solution de le faire sans que ça génère les exception sur l'unicité de email ou Identifiant si je ne modifie pas email ou Identifiant merci d'avance

  14. #14
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    J'ai l'impression que tu t'embrouille pour rien !

    Je n'ai pas analysé ton code en détail mais ta requête UPDATE ne doit pas poser de problème, même en y incluant la mise à jour de toutes les colonnes selon ce que tu récupères dans le formulaire renseigné par l'utilisateur.

    Dans 90% des cas, elle devrait passer sans problème. Pas besoin de tester l'unicité avant par une requête. Récupère l'éventuelle erreur renvoyée par le SGBD à l'exécution de la requête et gère la dans ton code PHP pour demander à l'utilisateur de changer l'information non unique.

    Par exemple, si un utilisateur a pour adrel "toto@monsite.com" et qu'il ne le change pas, la requête UPDATE mettra à jour avec la même valeur sans retourner d'erreur puisque cette adrel restera unique dans la table car elle y existait déjà avant pour cet utilisateur et seulement lui.

    Si par contre, il modifie son adrel en "titi@monsite.com" et que cette adrel est déjà enregistrée dans la table pour un autre utilisateur, alors le SGBD renverra une erreur de violation de contrainte d'unique avec, je crois, la colonne qui viole la contrainte.

    EDIT :
    Test...
    Création d'une table avec unicité sur la colonne d'adrel :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE utilisateur (
    	uti_id int(11) NOT NULL AUTO_INCREMENT,
    	uti_adrel varchar(255) NOT NULL,
    	PRIMARY KEY (uti_id),
    	UNIQUE KEY uti_adrel (uti_adrel)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1

    Insertion de deux utilisateurs avec adrel différentes :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO utilisateur (uti_adrel)
    VALUES ('toto@monsite.com'), ('titi@monsite.com')

    Tentative de modification de l'adrel de l'utilisateur 1 avec la même valeur :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE utilisateur
    SET uti_adrel = 'toto@monsite.com'
    WHERE uti_id = 1
    Citation Envoyé par MySQL
    0 ligne affectée. ( Traitement en 0.0510 sec )
    Tentative de modification de l'adrel de l'utilisateur 1 avec la valeur de l'adrel de l'autre utilisateur :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE utilisateur
    SET uti_adrel = 'titi@monsite.com'
    WHERE uti_id = 1
    Citation Envoyé par MySQL
    #1062 - Duplicate entry 'titi@monsite.com' for key 'uti_adrel'
    Tu récupères cette erreur et tu la gères en PHP, selon la "key" qui est indiquée dans le message d'erreur.
    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
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Points : 113
    Points
    113
    Par défaut
    merci les gars tous fonctionne bien j 'étais trop con au lieu d'appelé dans action updateuser.php , j appelé adduser.php c'est pourquoi l'exception de l'unicité en plus j ai changé par requête qui gère l'unicité
    de la manière suivante;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select 1 from users where (email='".$email."'  OR Identifiant='".$identifiant."') AND  Id_users<> ".$iduser.'"
    #CinePhil
    conseil :
    je gère l'unicité de l'email dans mon code php pas dans mysql est ce que une bonne manière
    merci d'avance

  16. #16
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    #CinePhil
    conseil :
    je gère l'unicité de l'email dans mon code php pas dans mysql est ce que une bonne manière
    merci d'avance
    A minima, je dirais que l'un n'empêche pas l'autre mais à mon avis, je préconise de faire le moins de requêtes et de transmission de données entre BDD et programme possible car c'est là qu'est souvent le goulet d'étranglement d'une application.

    Comme dit plus haut, l'ajout ou la mise à jour devraient fonctionner dans 90% des cas alors je préconise plutôt de ne pas tester a priori l'unicité dans le programme et d'y gérer plutôt l'éventuelle erreur retournée par MySQL.

    Un programme nouvellement développé peut être buggué alors qu'une contrainte d'unicité dans la BDD dira toujours la vérité car c'est un processus éprouvé depuis longtemps.

    D'une manière générale, les contraintes sur les données doivent être spécifiées dans la BDD car c'est le boulot du SGBD d'assurer la cohérence des données.
    Malheureusement, MySQL est pauvre en contraintes. Il ne connaît ni CHECK ni ASSERT et ignore les contraintes de clés étrangères si on n'utilise pas le moteur InnoDB. Ça oblige parfois à écrire des triggers ou des procédures pour contrôler les données d'une manière plus compliquée que pour d'autres SGBD.
    Si en plus c'est pour un site hébergé sur un serveur mutualisé et que l'utilisateur n'a pas les droits nécessaires pour créer les procédures ou les triggers, on est obligé de passer par le code applicatif.

    Bref, MySQL est le plus mauvais des "grands" SGBD.
    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 !

  17. #17
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Points : 113
    Points
    113
    Par défaut
    merci de vos conseils j'y retourné pour mieux comprendre

  18. #18
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2009
    Messages : 116
    Points : 163
    Points
    163
    Par défaut
    J'espère que tu as remarqué que dans la requete que tu nous as donné, tu as une faute de guillemets mais je suppose que tu l'as corrigé dans ton code.
    Si on n'ose pas poser des questions bêtes, on le restera.


    Une recherche Google résoudra bien 60% de vos problèmes.

  19. #19
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Points : 113
    Points
    113
    Par défaut
    #Damien51 merci beaucoup j 'ai corrigé l'erreur et bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Petit souci d'Update sur un GridView
    Par zooffy dans le forum ASP.NET
    Réponses: 1
    Dernier message: 09/02/2010, 11h32
  2. Erreur envoi email uniquement online
    Par antoine1504 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 04/01/2010, 22h36
  3. [SQL] Soucis à l'update d'une requête
    Par Him dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 03/12/2007, 19h13
  4. [Utilisation] Update to revision uniquement sur create et delete de fichiers
    Par stephane.julien dans le forum Subversion
    Réponses: 3
    Dernier message: 03/12/2007, 08h09
  5. Souci avec Update
    Par frandis dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 06/07/2007, 14h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo