[php-sql] Modifier plusieurs champs d'une bdd

Bonjour, j'ai créé un site web, avec accés sécurisé, donc avec pseudo et mot de passe dans une base de données.
Je souhaiterai faire une page qui permette de modifier ses information (pseudo, mot de passe, nom, prenom etc...)

Donc j'ai commencé à faire ça : (ça marche impec)

<?php
	include('verif.php');

			

	extract($_POST); //permet de convertir les POST directement en variable : $pseudo
			
			
			
	// partie changement de pseudo


	
	if ($pseudo2 != $login) {
				$req = "Select pseudo from membres where pseudo='$pseudo2'";
				$reponse = mysql_query($req);
				$bool=mysql_fetch_array($reponse);
				
				if (!$bool){
						
		$ajout= mysql_query("UPDATE membres SET pseudo='$pseudo2' WHERE id_membre=$id");
						
				//on test si il n'y a pas eu d'erreur pour la requete $ajout
				if($ajout==false){
					echo mysql_error();
					} 
					else {
					echo ('<b>Modification réussie, redirection ...</b>');
					header("Refresh: 1; URL=../index.php?page=compte" );
						}
				} //fin si le pseudo/email nexiste pas
				else {
				echo ('<b> Email ou pseudo déjà éxistant !</b>');
				header("Refresh: 3; URL=../index.php?page=compte" );
			} //fin bool
			} // fin pseudo2 login
			else { header("Refresh: 0; URL=../index.php?page=compte" );}
			
			
	 // fin partie changement de pseudo
	 
	 
			
			
			
			
			
			
			
				?>


Mais je me vois pas, enfin j'ai plutot la flegme ( ! ^^) de faire ça pour chaque champ, c'est à dire, tester si le prenom a changé, si oui etc ... aprés tester si le nom a changé ...

Connaissez vous un meilleur moyen ?
Ou une petite critique de mon code ?

sinon autre petite question, dont je n'ai pas trouvé la réponse ...
Vous voyez ici que j'utilise extract, et comment faire pour l'utiliser tout en protégeant ma base (avec htmlentities par exemple)

Merci beaucoup !
Configuration: Windows XP
Firefox 3.5.3

5 réponses

  1. Bonsoir,

    Je n'ai pas regardé tout votre code mais je suppose que ce que je vais vous dire vous aidera...

    Lors de votre condition, vous mettez ceci:

    if ($pseudo2 != $login)
    


    Et si vous faisiez comme ceci ?

    if ($pseudo2 != $login or $passe2 != $passe or $nouveautruc != $trucactuel)
    


    Cela vous évitera de faire trente-six mille condition... Ensuite, dans les champs formulaire, pourquoi ne pas les pré-remplir avec les infos déjà présentes ? Si la personne change quelque chose, tant mieux, sinon on fait quand même un update avec les anciennes infos ?

    Luan.
    1. Tu ferais bien de virer cet affreux extract().

      Si on modifie ton formulaire, crois moi que ton site ne va pas faire long feu lorsqu'il sera en ligne.
      1. oui, pas bête ! ^^
        fatigué de la journée, je pense pas toujours aux meilleures soluces !
        En plus j'avais déjà prérempli le formulaire ^^

        Merci !

        Pas d'idée pour le extract ?
        1. Donc voila ce que j'ai fait :

          <?php
          	include('verif.php');
          	
          $pseudo2 = mysql_real_escape_string(htmlentities($_POST['pseudo2'], ENT_QUOTES)); 
          $email2 = mysql_real_escape_string(htmlentities($_POST['email2'], ENT_QUOTES)); 
          $prenom2 = mysql_real_escape_string(htmlentities($_POST['prenom2'], ENT_QUOTES)); 
          $nom2 = mysql_real_escape_string(htmlentities($_POST['nom2'], ENT_QUOTES)); 
          $numtel2 = mysql_real_escape_string(htmlentities($_POST['numtel2'], ENT_QUOTES)); 
          $autre2 = mysql_real_escape_string(htmlentities($_POST['autre2'], ENT_QUOTES)); 
          
          	
          // partie changement de pseudo
          
          
          		if ($pseudo2 != $login ) {
          			$req = "Select pseudo from membres where pseudo='$pseudo2'";
          			$reponse = mysql_query($req);
          			$bool=mysql_fetch_array($reponse);
          			
          		if (!$bool){
          				
          		$ajout= mysql_query("UPDATE membres SET pseudo='$pseudo2' WHERE id_membre=$id");
          						
          			//on test si il n'y a pas eu d'erreur pour la requete $ajout
          			if($ajout==false){
          				echo mysql_error();
          				} 
          					else {
          					echo ('<b>Votre changement de pseudo a été effectué avec succés</b>');
          					}
          			} //fin si le pseudo/email nexiste pas
          			else {
          			echo ('<b> Pseudo déjà éxistant !</b>');
          		} //fin bool
          		} // fin pseudo2 login
          		
          		
          		
           // fin partie changement de pseudo
          			
          				
          		$sql = "SELECT * FROM membres WHERE id_membre='$id'";
          		$req = mysql_query($sql);
          		$info = mysql_fetch_array($req);
          			
                     if( ($email2 != $info['email']) || ($prenom2 != $info['prenom']) || ($numtel2 != $info['numtel']) ||  ($autre2 != $info['autre'])){ 
          				
          				
          			$test="SELECT * FROM membres WHERE id_membre=$id"; 
          			$rep=mysql_query($test);
          			$bool=mysql_fetch_array($rep);
          			
          			
          						
          				$ajout= mysql_query("UPDATE membres 	
          										SET email='$email2',prenom='$prenom2',nom='$nom2',numtel='$numtel2',autre='$autre2'
          										WHERE id_membre=$id");
          					
          							
          				//on test si il n'y a pas eu d'erreur pour la requete $ajout
          				if($ajout==false){
          					echo mysql_error();
          					} 
          					else {
          						echo ('<p><b>Modification réussie, redirection ...</b></p>');
          						header("Refresh: 1; URL=../index.php?page=compte" );
          					}
          			
          		} // fin si ya eu une modif
          		else { //si ya pas de modif
          			header("Refresh: 0; URL=../index.php?page=compte" );
          		}			
          ?>
          


          Donc pour le extract, je l'ai remplacé par ce que je fais d'habitude, c'est ce que tu voulais dire P@t@ch0n ?
          Le fait que extract ne protége pas ta base ?

          merci !
          1. Bonjour, j'ai un problème légèrement similaire: j'ai crée une base de données qui répertories des voitures de lgendes pour un projet scolaire. ma bdd contient trois table:
            _la table CAR (code_car, nom_car, constructeur_car...etc
            _la table CONSTRUCTEUR
            _la table DESIGNER

            J'ai inséré un nouveau champs 'pays_car' dans la table CAR, dans la table (+champs) 'CONSTRUCTEUR.code_const', j'ai mis par exemple la donnée 'AM1' qui correspond au constructeur ford.
            Dans la table (+champs) 'CAR.code_car', je mets par exemple 'AM11' qui correspond à la 'mustang gt 500', et 'AM12' qui correspond à la 'mustang bullitt'.
            Mon problème c'est pour le champs suivant: 'CAR.pays_car', j'aimerais insérer la données 'etats unis' pour les deux voitures en une seule commande.
            Sachant que je travaille avec easyphp, et que je fais mets manipulations via une console cmd, je fais la synthax suivante:

            update CAR
            set pays_car='etats unis'
            where code_car='AM1*;

            J'aimerais savoir où se trouve mon erreur, car j'ai longtemps cherché, mais en vain. Merci beaucoup