Besoins de votre analyse

ViPHP
AB
ViPHP | 5818 Messages

01 juil. 2012, 05:22

Y'a pas de liens spécifiques, c'est juste une façon d'organiser son code, de découper les fonctionnalités avec des fonctions indépendantes qui seront plus faciles à gérer pour la maintenance (après programmation initiale).
C'est surtout utile quand il y a beaucoup de code, sinon pour du code assez simple comme c'est le cas ici, ce travail supplémentaire n'est pas nécessairement payant dans le sens où le coût (quantité) du travail que tu va passer à faire des fonctions indépendantes ne sert pas à grand chose puisqu'en l'état actuel le code est facile à comprendre et à gérer. C'est avec un peu d'expérience que tu comprendras l'intérêt de la chose mais tu peux essayer sur ton code pour te faire la main et cela te donnera aussi un aperçu de la programmation orientée objet dont un des grands principes est de découper les fonctionnalités en modules spécifiques.

Enfin bon comme dit initialement c'est juste une façon d'organiser son code. Cela ne préjuge pas de la qualité du fonctionnement du code, mais plutôt de la facilité de la maintenance (éventuelles évolutions etc.). Mais en premier pour ton code il faut ajouter impérativement mysql_real_escape_string sur les variables (pas les constantes ou les variables que tu définis en interne mais les variables externe : post, get, cookies) qui constituent tes requêtes sinon c'est une faille de sécurité énorme (et peu importe par ailleurs comment tu organise ton code).

Et puis tu as pu constater que l'extension mysql est dépréciée. Convertis d'abord ton code avec mysqli ou pdo (mysqli en mode procédural est plus facile pour profiter directement des exemples donnés avec mysql) pour être aux conforme aux nouvelles normes après t'être assuré que ton hébergeur accepte ces extensions. Si possible, autant partir sur de bonne bases :wink:

Ensuite si tu as du temps essaies d'optimiser l'organisation de ton code autrement en suivant par exemple les conseils de Mazarini. C'est un exercice intéressant (même si cela risque d'être assez peu convainquant pour ton exemple), mais ce que je veux dire c'est qu'avant de te payer ce "luxe" tu as pas mal de travail à faire pour avoir un code sécurisé et à jour (en évitant, si ton hébergeur le permet, l'extension mysql).

Eléphanteau du PHP | 31 Messages

01 juil. 2012, 16:52

Bonjour AB,
Je te remercie pour ces explications et je vais commencer, j'ai survolé quelque lien et je pense utiliser mysqli qui me paraît plus facile.
Bref je prends tes conseils et je pars les mettre à exécution :D

Bonne journée

ViPHP
AB
ViPHP | 5818 Messages

01 juil. 2012, 17:44

Bonjour AB,
Je te remercie pour ces explications et je vais commencer, j'ai survolé quelque lien et je pense utiliser mysqli qui me paraît plus facile.
Bref je prends tes conseils et je pars les mettre à exécution :D

Bonne journée
J'ai insisté, parce qu'il faut avant tout avoir un code sécurisé avant d'explorer d'autres méthodes. Sur un nouveau sujet et avec plein de pistes à explorer on ne reconnait pas toujours rapidement les priorités. Alors dis moi un peu, toujours pas de traces de l'utilisation de la fonction "mysql_real_escape_string" dans ton dernier sujet ? #-o :evil:

Eléphanteau du PHP | 31 Messages

01 juil. 2012, 18:15

Alors dis moi un peu, toujours pas de traces de l'utilisation de la fonction "mysql_real_escape_string" dans ton dernier sujet ? #-o :evil:
C'est en cours :wink: pour l'instant je prends le temps de lire quelque article qui parle de mysqli pour être sûr de mon choix, je vais commencer à mettre en pratique tous les conseils reçu et poste ma nouvelle page sur le forum sans oublier la fonction "mysql_real_escape_string" :D

Mammouth du PHP | 2278 Messages

01 juil. 2012, 19:00

J'ai insisté, parce qu'il faut avant tout avoir un code sécurisé avant d'explorer d'autres méthodes. :
Moi, je dirais bien qu'il faut avoir avant tout un code qui fonctionne. Pour les autres méthodes, on ne peut pas signaler à la fois que mysql de php est deprecated au profit de PDO ou mysqli et demander de sécuriser un code mysql.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 31 Messages

01 juil. 2012, 23:04

C'est encore moi :D je reviens vers vous, car j'ai un problème pour pas changer :(

Alors, voici ma page modifier_administrateur (uniquement le pseudo)
<?php
session_start(); 

include 'config.php'; // Variables de l'annuaire
include 'fonction.php'; // Fonctions de l'administration l'annuaire
include 'securite.php'; // Vérification de la session et vérification de l'id administrateur
verif_connect(); // Si l'administrateur n'est pas identifier on affiche une erreur
verif_administrateur(); // Si ce n'est pas le créateur on affiche une erreur


$id_administrateur = mysqli_real_escape_string($bdd,$_GET['id']);  // On recupere l'id de l'administrateur a modifier


// Pour la gestion du formulaire 
$message = null;  // Initialisation du message de réponse

if (isset($_POST['pseudo'])) // Si le formulaire est envoyé
{
    // On récupé les variables issues du formulaire et on teste l'existence des données post en vérifiant qu'elles existent, 
	// qu'elles ne sont pas vides et uniquement composées uniquement d'espaces.
    // (Ce dernier point est facultatif et l'on pourrait se passer d'utiliser la fonction trim())
    // En cas de succès, on applique notre fonction Verif_magicquotes pour (éventuellement) nettoyer la variable.
	
		$pseudo = (isset($_POST['pseudo']) && trim($_POST['pseudo']) != '')? Verif_magicquotes($_POST['pseudo']) : null;		

		// Préparation des données pour les requêtes à l'aide de la fonction mysql_real_escape_string
		$pseudo_administrateur = mysqli_real_escape_string($bdd,$pseudo);		
				
		if(isset($pseudo)) // Si les champs $pseudo et $mail ne sont pas vide on peut aller plus loin
		{
			// Avec cette requête on recupere les données de l'administrateur à modifier
			$requete_recup = "SELECT pseudo, mail FROM ".$admin." WHERE ID = ".$id_administrateur."";
     
			// Exécution de la requête
			$infos_administrateur = mysqli_query($bdd,$requete_recup) or exit(mysqli_error($bdd));
		
			// Création du tableau associatif du résultat
			$donnees_administrateur  = mysqli_fetch_assoc($infos_administrateur);
						
			// Si le pseudo du formulaire est différent de celui qui est dans la base de données
			if($pseudo_administrateur!=$donnees_administrateur['pseudo']) 
			{
				// Avec cette requête on regarde dans la base de données si le pseudo est unique
				$requete_pseudo = "SELECT count(*) as nb FROM ".$admin." WHERE pseudo = '".$pseudo_administrateur."'";
     
				// Exécution de la requête
				$pseudo_unique = mysqli_query($bdd,$requete_pseudo) or exit(mysqli_error($bdd));
		
				// Création du tableau associatif du résultat
				$unique  = mysqli_fetch_assoc($pseudo_unique);
				
				// Si le comptage indique zéro alors le pseudo est unique et on peut le changer
				if($unique['nb']==0) 
				{
					// Requête pour changer le pseudo de la table par celui du formulaire
					$requete_change_pseudo = "UPDATE ".$admin." SET pseudo = '".$pseudo_administrateur."' WHERE ID = ".$id_administrateur."";
					
					// Exécution de la requête
					$change_pseudo = mysqli_query($bdd,$requete_change_pseudo) or exit(mysqli_error($bdd));	

					// Le pseudo à été changé
					$message = '<h4 class="alert_success">Le pseudo de l\'administrateur a été mis à jour avec succès. </h4>';					
				}
				else // Sinon c'est que le pseudo existe déjà et on affiche une erreur
				{
					// Le pseudo est déjà utilisé
					$message = '<h4 class="alert_warning">Ce pseudo est déjà utilisé, changez-le.</h4>';
				}
			}									
		}
		else  // Au moins un des deux champs : "pseudo" ou "mail" n'a pas été rempli
		{   
			// On affiche une erreur
			$message = '<h4 class="alert_error">Les champs "Pseudo" et "Email" doivent être remplis.</h4>';
		}
}

// Avec cette requête on recupere les données de l'administrateur à modifier
	$requete_recup_admin = "SELECT pseudo, mail FROM ".$admin." WHERE ID = ".$id_administrateur."";
     
	// Exécution de la requête
	$infos_administrateur = mysqli_query($bdd,$requete_recup_admin) or exit(mysqli_error($bdd));
		
	// Création du tableau associatif du résultat
	$donnees_administrateur  = mysqli_fetch_assoc($infos_administrateur);
			
// On definie quelque valeurs comme le titre et le la page en cours
define("TITRE", "Modifier un administrateur");
define("ARIANE", "<a href=\"accueil.php\">Accueil administration</a> <div class=\"breadcrumb_divider\"></div> <a class=\"current\">". TITRE ."</a>");

// On affiche le haut de page (header.php)
include 'header.php';

// On inclue la collone de droite
include 'colonne.php';

?>

 
 <section id="main" class="column">
		
		<article class="module width_full">
			<header><h3>Modification d'un administrateur</h3></header>
				<?php if(isset($message)) echo $message ?>
				
				<form action="#" method="post">		
					<div class="module_content">
						<fieldset>
							<label for="pseudo">Pseudo :</label>
							<input type="text" name="pseudo" id="pseudo" value="<?php echo $donnees_administrateur['pseudo']; ?>">
						</fieldset>						
						<fieldset>
							<label for="mail">Email : </label>
							<input type="text" name="mail" id="mail" value="<?php echo $donnees_administrateur['mail']; ?>">
						</fieldset>						
						<div class="clear"></div>
					</div>
					
					<footer>
						<div class="submit_link">					
							<input type="submit" id="valider" value="Modifier l'administrateur" class="alt_btn">
							<input type="reset" value="Reset">
						</div>
					</footer>
				</form>				
		</article><!-- end of post new article -->
		
		<h4 class="alert_info">Pour changer son mot de passe l'administrateur doit utiliser le lien "Mot de pase perdu ?"</h4>
			
		<div class="spacer"></div>
	</section>

</body>

</html>
Le code fonctionne en partie : si je ne change pas les valeurs du formulaire rien ne ce passe comme prévu, je rentre un pseudo qui existe déjà il m'indique que le pseudo est déjà utilisé mais, pour l'UPDATE il m'affiche une page blanche et le pseudo ne change pas ? Franchement je ne sais pas ou est l'erreur #-o

Bonne soirée à vous :wink:

C'est bon trouver :mrgreen: j'ai fait une faute ici : (oublier ' )
"UPDATE ".$admin." SET pseudo = ".$pseudo_administrateur."

ViPHP
AB
ViPHP | 5818 Messages

02 juil. 2012, 05:13

J'ai insisté, parce qu'il faut avant tout avoir un code sécurisé avant d'explorer d'autres méthodes. :
Moi, je dirais bien qu'il faut avoir avant tout un code qui fonctionne. Pour les autres méthodes, on ne peut pas signaler à la fois que mysql de php est deprecated au profit de PDO ou mysqli et demander de sécuriser un code mysql.
Oui mais un code qui fonctionne sans être sécurisé c'est un piège. C'est le principe de sécurisation des données dans une requête que je mettais en avant ici. Une fois ce principe acquis on cherchera plus naturellement l'équivalent si on utilise d'autres extensions :wink: