Page 1 sur 1

Probléme de modification de photo de profil entre deux formulaires

Posté : 21 févr. 2017, 15:18
par scorleon
Bonjour,
Je suis entrain de développer une petite application pour dans laquelle j'ai une table avec Id,Num_eleveur, nom_eleveur, prénom_eleveur, photo_eleveur.
j'ai un formulaire qui permet d'ajouter un membre et ça fonctionne bien.
Maintenant, je souhaite modifier la photo de ce dernier.
Formulaire de modification modification.php:
<?php
//récupération de la variable d'URL,
//qui va nous permettre de savoir quel enregistrement modifier
$id  = $_GET["idEleveur"];
 
//requête SQL:
$sql = "SELECT Num_eleveur,Prenom_eleveur,Nom_eleveur,Photo_eleveur FROM membre WHERE id = '$id'";

//exécution de la requête:
$requete = mysqli_query($db_link, $sql);
 
//affichage des données:
if( $result = mysqli_fetch_object($requete))
  {
?>
<script type="text/javascript">
    function getfile(){
        document.getElementById('hiddenfile').click();
    }
    function getvalue(){
        document.getElementById('selectedfile').value=document.getElementById('hiddenfile').value;
    }
</script>
<form name="insertion" action="verif-modification.php" method="POST">
	<input type="hidden" name="id" value="<?php echo($id) ;?>">
 	<table width="430" border="0" align="center" cellpadding="2" cellspacing="2">
 	<tr>
 		<td class="tableau-eleveurs-entete" colspan="2">
			<br />Modification des donn&eacute;es de l'&eacute;leveur num&eacute;ro : <?php echo($result->Num_eleveur); ?><br /><br />
 		</td>
 	</tr>
 	<tr>
 		<td class="tableau-eleveurs" align="right" width="60%">
			Num&eacute;ro d'&eacute;leveur (*): 
 		</td>
 		<td class="tableau-eleveurs" align="left">
			<input type="text" name="num_eleveur" placeholder="Num STAM" size="9" value="<?php echo($result->Num_eleveur) ;?>">
 		</td>
 	</tr>
 	<tr>
 		<td class="tableau-eleveurs" align="right">
			<label for="annee_canari">P&eacute;nom (*):</label>
		</td>
		<td class="tableau-eleveurs" align="left">
			<input type="text" name="prenom_eleveur" value="<?php echo($result->Prenom_eleveur) ;?>">
		</td>
	</tr>
	<tr>
 		<td class="tableau-eleveurs" align="right">
			Nom (*): 
		</td>
		<td class="tableau-eleveurs" align="left">
		<input type="text" name="nom_eleveur"  value="<?php echo($result->Nom_eleveur) ;?>">
		</td>
	</tr>
<tr>
 		<td class="tableau-eleveurs" align="right">
			Photo : 
		</td>
		<td class="tableau-eleveurs" align="center">
			<input type="file" id="hiddenfile" style="display:none" name="mon_image" onChange="getvalue();"/>
			<input type="text" id="selectedfile" name="mon_image" value="<?php echo($result->Photo_eleveur) ;?>"/>
			<input type="button" value="Choisir" onclick="getfile();"/>
		</td>
	</tr>
	<tr>	
		<td class="tableau-eleveurs" colspan="2" align="center">
			<input type="submit" value="Modifier">
		</td>
 	</tr>
 	</table>
 	</form>
Au niveau de la base, je met le nom fichier dans la table, exemple : "profil.jpg"

Voila le formulaire verif-modification.php
<?php
// On recupére les données saisies  
  $Num_eleveur     = htmlentities(trim($_POST["num_eleveur"])) ;
  $Prenom_eleveur = htmlentities(trim($_POST["prenom_eleveur"])) ;
  $Nom_eleveur		 = htmlentities(trim($_POST["nom_eleveur"])) ;
  $Mon_image        = htmlentities(trim($_POST["mon_image"])) ;

//récupération de l'identifiant de la personne:
$id = $_POST["id"] ;
 
  //création de la requête SQL:
  $sql = "UPDATE $nom_table_e SET 
			Num_eleveur      = '$Num_eleveur', 
	        Prenom_eleveur = '$Prenom_eleveur',
			Nom_eleveur   = '$Nom_eleveur',
			Photo_eleveur	='$Mon_image'
			WHERE id = '$id'" ;
 
  //exécution de la requête SQL:
  $requete = mysqli_query($db_link, $sql) or die( mysqli_error($db_link)) ;
 
 
  //affichage des résultats, pour savoir si la modification a marchée:
  if($requete)
  {
    echo '<p style="color: red; text-align: center">La modification &agrave; &eacute;t&eacute; correctement effectu&eacute;e pour le num&eacute;ro d\'&eacute;leveur : <b>'.$Num_eleveur.'</b>.</p>' ;
  }
  else
  {
    echo '<p style="color: red; text-align: center">\!/ La modification &agrave; &eacute;chou&eacute;e. \!/ </p>' ;
  }
Mon probléme je n'arrive pas à contrôler l’envoi de la nouvelle photo sur le serveur du premier formulaire au deuxième.

Merci pour votre aide, ou d'autre idée plus meilleur.
(Je suis encore débutant dans le domaine :) )

Re: Probléme de modification de photo via un formulaire

Posté : 21 févr. 2017, 15:41
par moogli
salut,

pour l'upload du fichier http://www.phpjungle.info/cours/10-comm ... -http.html

tu pourras récupérer le nom du fichier.
je te conseille de renommer le fichier pour maîtriser le nom.

pour ton insertion utilise mysqli_real_escape_string afin de "protéger" les données.

Pour ce qui est du htmlentities c'est plutôt réservé à l'affichage, tu as des risque de problèmes lorsque tu va vouloir authentifier un utilisateur qui va contenir des caractères remplacé par htmlentities ;) (comparaison KO).

@+

Re: Probléme de modification de photo de profil entre deux formulaires

Posté : 21 févr. 2017, 16:48
par scorleon
Bonjour,
Merci, je vais utiliser "mysqli_real_escape_string " :D très bonne idée.
Sinon pour le lien, j'ai regardé mais c un uplod avec le même formulaire, un truc qui j'ai déjà fait et qui fonctionne bien avec "ajouter un nouveau éleveur".

Mais mon probléme est dans la modification du profil surtout entre deux formulaires : le premier dans lequel j'affiche les données du profil X et je fais une modification de la photo de ce dernier, et le deuxième qui fait le contrôle et récupérer les données et faire un upload de la nouvelle photo si elle a été modifiée.

Je n'arrive à récupérer ni contrôler si la personne a modifiée sa photo de profil et l'envoyer au serveur pour faire un update pour ces données.
voila ce que j'essaye de faire pour mon formulaire "verif-modification.php"
<?php
//récupération de l'identifiant de la personne:
$id = $_POST["id"] ;
$mon_image=$_SESSION['mon_image'];

// On recupére les données saisies  
  $Num_eleveur     = mysqli_real_escape_string (trim($_POST["num_eleveur"])) ;
  $Prenom_eleveur = mysqli_real_escape_string (trim($_POST["prenom_eleveur"])) ;
  $Nom_eleveur		 = mysqli_real_escape_string (trim($_POST["nom_eleveur"])) ;
  //$Mon_image        = mysqli_real_escape_string (trim($_POST["mon_image"])) ;
if (isset($_FILES['mon_image']) AND $_FILES['mon_image']['error'] == 0){
			 //Testons si le fichier n'est pas trop gros
				if ($_FILES['mon_image']['size'] <= 1000000)
					{
					// Testons si l'extension est autorisée
					$infosfichier = pathinfo($_FILES['mon_image']['name']);
					$extension_upload = $infosfichier['extension'];
					$extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png');
					//$ph_eleveur = md5(uniqid(rand(), true)).'jpg';
					$ph_eleveur = $s_prenom_eleveur."-".$s_nom_eleveur."_".$s_numero_eleveur.".".$extension_upload;
					if (in_array($extension_upload, $extensions_autorisees)){
                        // On peut valider le fichier et le stocker définitivement
                        move_uploaded_file($_FILES['mon_image']['tmp_name'], '_photos/'.$ph_eleveur);
					}
				}
			}

 
  //création de la requête SQL:
  $sql = "UPDATE $nom_table_e SET 
      Num_eleveur      = '$Num_eleveur', 
          Prenom_eleveur = '$Prenom_eleveur',
      Nom_eleveur   = '$Nom_eleveur',
      Photo_eleveur	='$ph_eleveur'
      WHERE id = '$id'" ;
 
  //exécution de la requête SQL:
  $requete = mysqli_query($db_link, $sql) or die( mysqli_error($db_link)) ;
 
 
  //affichage des résultats, pour savoir si la modification a marchée:
  if($requete)
  {
    echo '<p style="color: red; text-align: center">La modification &agrave; &eacute;t&eacute; correctement effectu&eacute;e pour le num&eacute;ro d\'&eacute;leveur : <b>'.$Num_eleveur.'</b>.</p>' ;
  }
  else
  {
    echo '<p style="color: red; text-align: center">\!/ La modification &agrave; &eacute;chou&eacute;e. \!/ </p>' ;
  }

Re: Probléme de modification de photo de profil entre deux formulaires

Posté : 21 févr. 2017, 17:30
par moogli
tu ne peux pas le faire en deux étapes il faut que ce soit l'utilisateur qui choisisse le fichier lui même.

tu peux prendre le partie de na pas traiter le champs s'il est vide et dans ce cas pas de modification de l'existant.
ajouter une checkbox pour la suppression de la photo (base et fichier).

au mieux tu peux stocker la photo dans un répertoire temporaire, mettre l'emplacement en session et lors de la validation du second formulaire déplacer le fichier et modifier en base. Le répertoire temporaire doit être dans l'arborescence web si tu veux que la photo s'affiche s'affiche dans le formulaire de contrôle.


@+

Re: Probléme de modification de photo de profil entre deux formulaires

Posté : 21 févr. 2017, 17:36
par scorleon
Bon je vois que c'est dur de la faire en deux formulaire.
je vais essayer de regrouper tout dans un seul formulaire comme celui de l'ajout.
Merci

Re: Probléme de modification de photo de profil entre deux formulaires

Posté : 22 févr. 2017, 18:36
par scorleon
Bonjour,

Voila mais j'ai un probléme, en cas de la modification de la photo cette dernière n'est pas modifié :
</head>
<script type="text/javascript">
    function getfile(){
        document.getElementById('hiddenfile').click();
    }
    function getvalue(){
        document.getElementById('selectedfile').value=document.getElementById('hiddenfile').value;
    }
</script>
<body>
<?php
//récupération de la variable d'URL,
//qui va nous permettre de savoir quel enregistrement modifier
$id  = $_GET["idEleveur"];
 
//requête SQL:
$sql = "SELECT Num_eleveur,Prenom_eleveur,Nom_eleveur,Photo_eleveur FROM $nom_table_e WHERE id = '$id'";

//exécution de la requête:
$requete = mysqli_query($db_link, $sql);
 
//affichage des données:
if( $result = mysqli_fetch_object($requete))
  {
?>


<form name="insertion" action="modif_eleveur.php" method="POST">
	<input type="hidden" name="id" value="<?php echo($id) ;?>">
	<input type="hidden" name="afph_eleveur" value="<?php echo($result->Photo_eleveur) ;?>">
 	<table width="430" border="0" align="center" cellpadding="2" cellspacing="2">
 	<tr>
 		<td class="tableau-eleveurs-entete" colspan="2">
			<br />Modification des donn&eacute;es de l'&eacute;leveur num&eacute;ro : <?php echo($result->Num_eleveur); ?><br /><br />
 		</td>
 	</tr>
 	<tr>
 		<td class="tableau-eleveurs" align="right" width="60%">
			Num&eacute;ro d'&eacute;leveur (*): 
 		</td>
 		<td class="tableau-eleveurs" align="left">
			<input type="text" name="num_eleveur" placeholder="Num STAM" size="<?php echo(strlen($result->Num_eleveur));?>" value="<?php echo($result->Num_eleveur) ;?>" readonly="true">
 		</td>
 	</tr>
 	<tr>
 		<td class="tableau-eleveurs" align="right">
			<label for="annee_canari">P&eacute;nom (*):</label>
		</td>
		<td class="tableau-eleveurs" align="left">
			<input type="text" name="prenom_eleveur" value="<?php echo($result->Prenom_eleveur) ;?>">
		</td>
	</tr>
	<tr>
 		<td class="tableau-eleveurs" align="right">
			Nom (*): 
		</td>
		<td class="tableau-eleveurs" align="left">
		<input type="text" name="nom_eleveur"  value="<?php echo($result->Nom_eleveur) ;?>">
		</td>
	</tr>
	<tr>
 		<td class="tableau-eleveurs" align="right" width="40%">
			Photo : 
		</td>
		<td class="tableau-eleveurs" align="center" width="40%">
			<img align="middle" alt="avatar" width="60" height="60" src="_photos/<?php echo($result->Photo_eleveur) ;?>" />
			<input type="file" id="hiddenfile" style="display:none" name="mon_image" onChange="getvalue();"/>
			<input type="text" id="selectedfile" value="Modifiez votre photo"/>
			<input type="button" value="Choisir" onclick="getfile();"/>
			
		</td>
			
		</td>
	</tr>
	<tr>	
		<td class="tableau-eleveurs" colspan="2" align="center">
			<input type="submit" name="modifier_eleveur" value="Modifier">
		</td>
 	</tr>
 	</table>
 	</form>
 </div>

<?php
  }//fin if 

if (isset($_POST['modifier_eleveur']) && $_POST['modifier_eleveur'] == 'Modifier') {
	if ((isset($_POST['prenom_eleveur']) && !empty($_POST['prenom_eleveur'])) && 
		(isset($_POST['nom_eleveur']) && !empty($_POST['nom_eleveur'])) 
		) {
			$Id    				= $_POST["id"] ;
			$Num_eleveur		= mysqli_real_escape_string($db_link,trim($_POST["num_eleveur"])) ;
			$Prenom_eleveur		= mysqli_real_escape_string($db_link,trim($_POST["prenom_eleveur"])) ;
			$Nom_eleveur		= mysqli_real_escape_string($db_link,trim($_POST["nom_eleveur"])) ;
			
			if (isset($_FILES['mon_image']) AND $_FILES['mon_image']['error'] == 0){
			 //Testons si le fichier n'est pas trop gros
				if ($_FILES['mon_image']['size'] <= 1000000)
					{
					// Testons si l'extension est autorisée
					$infosfichier = pathinfo($_FILES['mon_image']['name']);
					$extension_upload = $infosfichier['extension'];
					$extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png');
					//$ph_eleveur = md5(uniqid(rand(), true)).'jpg';
					$ph_eleveur = $s_prenom_eleveur."-".$s_nom_eleveur."_".$s_numero_eleveur.".".$extension_upload;
					if (in_array($extension_upload, $extensions_autorisees)){
                        // On peut valider le fichier et le stocker définitivement
                        move_uploaded_file($_FILES['mon_image']['tmp_name'], '_photos/'.$ph_eleveur);
					}
				}
			}else {
				$ph_eleveur = $_POST["afph_eleveur"] ;
			}
						
			//création de la requête SQL:
			$sqlup = "UPDATE $nom_table_e SET 
	        Prenom_eleveur = '$Prenom_eleveur',
			Nom_eleveur   = '$Nom_eleveur',
			Photo_eleveur   = '$ph_eleveur'
			WHERE Id = '$Id'" ;
			//exécution de la requête SQL:
			echo $sqlup;
			$requeteup = mysqli_query($db_link, $sqlup) or die('Erreur SQL !'.$requeteup.'<br />'.mysqli_error($db_link));
			if($requeteup){
				echo '<p style="color: red; text-align: center">La modification &agrave; &eacute;t&eacute; correctement effectu&eacute;e pour le num&eacute;ro d\'&eacute;leveur : <b>'.$Num_eleveur.'</b>.</p>' ;
				}
			else{
				echo '<p style="color: red; text-align: center">\!/ La modification &agrave; &eacute;chou&eacute;e. \!/ </p>' ;
			}
		}
}

?>
Merci pour votre aide car là je bloque.

Re: Probléme de modification de photo de profil entre deux formulaires

Posté : 23 févr. 2017, 11:19
par moogli
la conversation se poursuis la php-debutant/probleme-modification-avat ... 77887.html

merci d'éviter de multiplier les sujet pour la même chose ;)

@+

Re: Probléme de modification de photo de profil entre deux formulaires

Posté : 23 févr. 2017, 11:28
par scorleon
Bonjour,
Oui, je voulais supprimer ma dernière réponse ici pour créer un nouveau sujet, mais j'avais le choix.
si tu peux le faire.
Merci