[RESOLU] Formulaire avec certains champs facultatifs

Petit nouveau ! | 2 Messages

19 août 2016, 10:35

Bonjour, je viens demander un peu d'aide parce que depuis un certain temps je n'arrive pas a trouver la solution tout seul. Je suis donc en train de faire un formulaire pour modifier certaines informations d'un utilisateur comme le prénom et nom, le nom d'utilisateur ainsi que son grade sur le site.

Les trois champs sont facultatifs, c'est à dire que nous pouvons donc remplir le nom d'utilisateur et en cliquant sur le bouton de validation, ça modifie uniquement le champs nom d'utilisateur, actuellement mon problème c'est que ça modifie aussi les autres champs alors qu'ils sont vide (donc à la fin je me retrouve avec des utilisateurs sans nom :non: )

J'ai donc pensé que si le champ était vide on ne traitait rien et j'ai donc fait cela :
if (!empty($_POST['nom_utilisateur'])) {
	 	if ($_POST['nom_utilisateur'] == $donnees_membre['nom_utilisateur']) {
	 		$errors = "Vous n'avez pas modifé le nom d'utilisateur du joueur!";	
	 	}
	 } else // {  Si le formulaire est vide, il n'y a pas de traitement (facultatif) }
Le problème c'est que je ne sais pas vraiment quoi mettre dans le else pour que a la fin si mon champ est vide, cela ne change pas le nom utilisateur. Je vous joins mon code pour plus de "facilité" à comprendre.
<h2>Modification profil de <?= $nom_prenom?></h2>

<div class="row">
	<form method="POST" action="" class="form-horizontal">
  		<div class="panel panel-default">
			<div class="panel-body">
				<div class="form-group">
					<label class="col-sx-2 col-sm-2 col-md-2 control-label" for="prenom_nom_rp">Prénom et Nom</label>
					<div class="col-sx-10 col-sm-10 col-md-10">
						<input type="text" class="form-control" id="prenom_nom_rp" name="prenom_nom_rp" placeholder="<?= $donnees_membre['prenom_nom'] ?>">
					</div>
		  		</div>

		  		<div class="form-group">
					<label class="col-sx-2 col-sm-2 col-md-2 control-label" for="nom_utilisateur">Nom d'utilisateur</label>
					<div class="col-sx-10 col-sm-10 col-md-10">
						<input type="text" class="form-control" id="nom_utilisateur" name="nom_utilisateur" placeholder="<?= $donnees_membre['nom_utilisateur'] ?>">
					</div>
		  		</div>

		  		<div align="right">
			  		<div class="form-group">
			  		<select class="col-sx-10 col-sm-10 col-md-10 selectpicker show-tick" name="grade"  title="Grade actuel : <?= $donnees_membre['grade'] ?>">
				  		<optgroup label="Grade">
				  			<option>1</option>
				  			<option>2</option>
				  			<option>3</option>
				  			<option>4</option>
				  			<option>5</option>
				  		</optgroup>
			  		</select>
			  		</div>
		  		</div>
			</div>
		</div>


		<div class="panel panel-default">
			<div class="panel-body">
				<div class="form-group">
						<label class="col-sx-2 col-sm-2 col-md-2 control-label" for="email">Adresse mail</label>
						<div class="col-sx-10 col-sm-10 col-md-10">
							<input type="email" class="form-control" id="email" placeholder="<?= $donnees_membre['email'] ?>" disabled>
						</div>
					</div>

					<div class="form-group">
						<label class="col-sx-2 col-sm-2 col-md-2 control-label" for="steam">Pseudo Steam</label>
						<div class="col-sx-10 col-sm-10 col-md-10">
							<input type="text" class="form-control" id="steam" placeholder="<?= $donnees_membre['steam'] ?>" disabled>
						</div>
					</div>

					<div class="form-group">
						<label class="col-sx-2 col-sm-2 col-md-2 control-label" for="steam_url">Lien steam</label>
						<div class="col-sx-10 col-sm-10 col-md-10">
							<input type="text" class="form-control" id="steam_url" placeholder="<?= $donnees_membre['steam_url'] ?>" disabled>
						</div>
					</div>
			</div>
		</div>

		<input class="btn btn-warning" type="submit" name="modification" id="modification" value="Modification du profil de <?= $donnees_membre['nom_utilisateur'] ?>">
	</form>
</div>
<?php
if (!empty($_POST)) {
	
	$errors = array();

	if (!empty($_POST['prenom_nom_rp'])) {
		if ($_POST['prenom_nom_rp'] == $donnees_membre['prenom_nom']) {
			$errors = "Vous n'avez pas modifé le prenom ainsi que le nom du joueur!";	
		}
	} else //{  Si le formulaire est vide, il n'y a pas de traitement (facultatif) }

	if (!empty($_POST['nom_utilisateur'])) {
		if ($_POST['nom_utilisateur'] == $donnees_membre['nom_utilisateur']) {
			$errors = "Vous n'avez pas modifé le nom d'utilisateur du joueur!";	
		}
	} else //{  Si le formulaire est vide, il n'y a pas de traitement (facultatif) }	

	if (!empty($_POST['grade'])) {
		if ($_POST['grade'] == $donnees_membre['grade']) {
			$errors = "Vous n'avez pas modifé le grade du joueur!";	
		}
	} else //{  Si le formulaire est vide, il n'y a pas de traitement (facultatif) }

	if (empty($errors)) {
		$prenom_nom_rp = $_POST['prenom_nom_rp'];
		$nom_utilisateur = $_POST['nom_utilisateur'];
		$grade = $_POST['grade'];


		$ReqModif = $bdd->prepare('UPDATE membre_groupe SET prenom_nom = ?,nom_utilisateur = ?,grade = ? WHERE id = ?');
		$ReqModif->execute([$prenom_nom_rp, $nom_utilisateur, $grade, $get_id]);
	}
}

?>

Mammouth du PHP | 1029 Messages

19 août 2016, 11:05

Bonjour, il y a plusieurs façon d'aborder le problème :
[*] construire une requête en fonction du contexte :
+ une seule requête
+ éxécution rapide
- complexité de concaténation
[*] éxécuter une requête sur chaque élémént
+ facile
+ clair
- multiple requête (mais je pense pas que dans ce cas cela soit un problème)

donc je regarderais à voir si ceci est faisable :

Code : Tout sélectionner

<?php if(!empty($prenom_nom_rp)){ $ReqModif = $bdd->prepare('UPDATE membre_groupe SET prenom_nom = ? WHERE id = ?'); $ReqModif->execute([$prenom_nom_rp, $get_id]); } if(!empty($nom_utilisateur)){ $ReqModif = $bdd->prepare('UPDATE membre_groupe SET nom_utilisateur = ? WHERE id = ?'); $ReqModif->execute([$nom_utilisateur,$get_id]); } if(!empty($grade)){ $ReqModif = $bdd->prepare('UPDATE membre_groupe SET grade = ? WHERE id = ?'); $ReqModif->execute([$grade, $get_id]); } ?>
L'expérience est la somme de toutes nos erreurs.

Petit nouveau ! | 2 Messages

19 août 2016, 12:31

Je viens donc de tester ce que tu m'as proposé c'est super, c'est bien ce que je voulais, je vais quand même essayer de rajouter des choses pour vérifier les modifications, mais je te remercie de m'avoir apporté les bases ! :)