Gestion des photos en base de données / Upload multi photos via formulaire

Petit nouveau ! | 2 Messages

12 mai 2016, 19:35

Bonjour je recherche une façon d'enregistrer plusieurs photos en base lors du remplissage de mon formulaire " création de produit" pour mon site e commerce.

par avance merci !!!

ci dessous mon code:
<?php
require_once('../inc/init.inc.php');

	if (!internauteEstConnecteEtEstAdmin()) {
		header ('location:../connexion.php'); //redirection vers la page connexion
		exit();
	}

// SUPPRESSION D'UN PRODUIT:
if (isset($_GET['action']) && $_GET['action'] == 'suppression') {
	
	/* Traitement de la photo */
	$requete = $mysqli->query("SELECT * FROM produit WHERE id_produit = '$_GET[id_produit]'");

       // pas de boucle car un seul produit par ID_PRODUIT	
	$produit_a_supprimer = $requete->fetch_assoc(); 

       // Chemin de la photo à supprimer dans le dossier	
	$chemin_photo_a_supprimer = $_SERVER['DOCUMENT_ROOT'] . $produit_a_supprimer['photo']; 

	// unlink efface le fichier dont le chemin est spécifier
	if(!empty($produit_a_supprimer['photo']) && file_exists($chemin_photo_a_supprimer)) { //file_exists test si le f
		unlink($chemin_photo_a_supprimer); 
	}
	/* Fin de traitement de la photo */
	
	// ***************************************************
	
	//Suppression en base
	$mysqli->query("DELETE FROM produit WHERE id_produit = '$_GET[id_produit]'"); 	
	$_GET['action'] = 'affichage';
}
	//Fin Suppression en base

// Enregistrement du produit en BDD
if ($_POST) {
	
	//PHOTO: 
		$photo_bdd ='';
		
		if (isset($_GET['action']) && $_GET['action'] == 'modification') {
			$photo_bdd = $_POST['photo_actuelle']; 
                //Si je suis en modification, on remet en BDD l'url actuel de la photo qui est dans $_POST.
		}
		
		if(!empty($_FILES['photo']['name'])){
			//debug($_FILES);
			$nom_photo = $_POST['reference'] . $_FILES['photo']['name']; 
					/* Concatène le nom de la photo UPLOAD */
			
			$photo_bdd = RACINE_SITE . 'photo/' . $nom_photo;	
					/* Chemin de la photo enregistrer dans la DB ( a la racine du site dans photo)*/
					
			$photo_dossier = $_SERVER['DOCUMENT_ROOT']. RACINE_SITE . 'photo/' . $nom_photo; 
					/* Chemin de la photo pour l'enregistrement physique du fichier.*/
				//debug($photo_dossier);	
				
			copy($_FILES['photo']['tmp_name'], $photo_dossier);
		}
	// FIN PHOTO ********************************************
		
/* Traitement du $_POST pour convertir les caractère spéciaux:*/
	
	foreach ($_POST as $indice => $valeur){
		$_POST[$indice] = htmlentities($valeur, ENT_QUOTES);
	}
	
	$mysqli->query("REPLACE INTO produit (id_produit, reference, categorie, titre, description, couleur, taille, public, photo, prix, stock) VALUES ('$_POST[id_produit]','$_POST[reference]','$_POST[categorie]','$_POST[titre]','$_POST[description]','$_POST[couleur]','$_POST[taille]','$_POST[public]','$photo_bdd','$_POST[prix]','$_POST[stock]')");
	//replace into se comporte comme update s'il trouve l'id produit, sinon comme insert into.
	
	$contenu .='<div class="Validation">Le produit a bien été ajouté dans les stocks</div>';
	
}

//5° ======================================================================

	// AFFICHAGE DES PRODUIT DANS LE BACK-OFFICE:
	if(isset($_GET['action']) && $_GET['action'] == 'affichage') {
		$resultat = $mysqli->query("SELECT * FROM produit");
		
		$contenu .= '<h2>Affichage des produits</h2><br><br>';
		$contenu .= '<p>nombre de produit dans la boutique:' . $resultat->num_rows . '</p><br><br>';
		
	// Affichage sous forme de tableau:
	$contenu .='<table border=1><tr>';
		// 5.1 - les entêtes: ******************************************
		while($entete = $resultat->fetch_field()) {
			$contenu .= '<th>' . $entete->name . '</th>';
					
			}
				
			$contenu .= '<th>modification</th>';
			$contenu .= '<th>suppression</th>';
	$contenu .= '</tr>';

// 5.2 Les lignes du tableau: ********************************************

	while($ligne =$resultat->fetch_assoc()){
		$contenu .= '<tr>';
		foreach ($ligne as $indice => $information){
				
				if ($indice == 'photo') {
					$contenu .= '<td><img src="'. $information .'" width="100" height="auto" alt=""></td> ';
				
				} else {
					$contenu .= '<td>' . $information . '</td>';
				}
				
		} // fin du foreach
		
//5.3 affichage des liens  (supprimer et modifier) ************************

			$contenu .='<td><a href="?action=modification&id_produit='. $ligne['id_produit'].'"><input type="submit" name="modification" value="modification"></a></td>';
			$contenu .='<td><a href="?action=suppression&id_produit='. $ligne['id_produit']. '" onclick="return(confirm(\'En êtes vous certain ?\'));"><input type="submit" name="suppression" value="suppression"></a></td>';
			
			
			$contenu .= '</tr>';
		} //fin du while

	$contenu .='</table>';
		
	} //fin du if(isset())
	

/*************************** HTML ***********************************/

	require_once('../inc/haut.inc.php');
?>
<div id="menu_affichage">
	<ul>
		<li><a class="produit" href="?action=affichage"><input type="submit" name="affichage" value="Affichage des produits"></a></li>
		<li><a class="produit" href="?action=ajout"><input type="submit" name="ajout_produit" value="Ajout d'un produit"></a></li>
	</ul>
</div>
<?php	
	// AJOUT DE LIENS "AFFICHAGE" et "AJOUT":

	/*  Ci-dessous le lien vers affichage avec un $_GET['action'] = 'affichage'  */
	//$contenu .= '<p><a class="produit" href="?action=affichage">Affichage des produits</a></p><br>';

	/*  Ci-dessous le lien vers affichage avec un $_GET['action'] = 'affichage'  */
	//$contenu .= '<p><a class="produit" href="?action=ajout">Ajout d\'un produit</a></p><br>';
	
	echo $contenu;

	if(isset($_GET['action']) && ($_GET['action'] == 'ajout' || $_GET['action'] == 'modification')) : 
	// la syntaxe du if avec (:) et endif qui remplace les accolades dans le cas ou il y aurais des long passage de code entre les deux.

//7° $_GET['action']=='modifications' **********************************
	if (isset($_GET['id_produit'])){  //Si on met en modification et qu'un produit a été sélectionner alors on fait une requête en BDD pour afficher les informations du produit sélectionné dans le formulaire de modification
		$resultat = $mysqli->query("SELECT * FROM produit WHERE id_produit = '$_GET[id_produit]'");
		$produit_selectionne = $resultat->fetch_assoc(); //Ici pas de boucle while car l'id_produit est unique	
	}

//3° Formulaire HTML avec value="" *************************************
?>

	<h1>Formulaire produits</h1>
	
	<form method="post" action="" enctype="multipart/form-data" id="tableau1">
	<!-- multipart/form-data permet de uploader un fichier et de générer une superglobale $_FILES -->
		<input type="hidden" id="id_produit" name="id_produit" value="<?php if (isset($produit_selectionne['id_produit']))echo $produit_selectionne['id_produit']; ?>"><br><br>
		
		<label for="reference">Référence:</label>
		<input type="text" id="reference" name="reference" value="<?php if (isset($produit_selectionne))echo $produit_selectionne['reference']; ?>"><br><br>

		<label for="categorie">Catégorie:</label>
		<input type="text" id="categorie" name="categorie" value="<?php if (isset($produit_selectionne))echo $produit_selectionne['categorie']; ?>"><br><br>
		
		<label for="titre">Titre:</label>
		<input type="text" id="titre" name="titre" value="<?php if (isset($produit_selectionne))echo $produit_selectionne['titre']; ?>"><br><br>
		
		<label for="description">Description:</label>
		<input type="text" id="description" name="description" value="<?php if (isset($produit_selectionne))echo $produit_selectionne['description']; ?>"><br><br>
		
		<label for="couleur">Couleur:</label>
		<input type="text" id="couleur" name="couleur" value="<?php if (isset($produit_selectionne['couleur']))echo $produit_selectionne['couleur']; ?>"><br><br>
		
		<select name="taille">
			<option value="XS"<?php if (isset($produit_selectionne['taille']) && $produit_selectionne['taille'] == 'XS') echo 'selected'; ?>>XS</option>
			<option value="S"<?php if (isset($produit_selectionne['taille']) && $produit_selectionne['taille'] == 'S') echo 'selected'; ?>>S</option>
			<option value="M"<?php if (isset($produit_selectionne['taille']) && $produit_selectionne['taille'] == 'M') echo 'selected'; ?>>M</option>
			<option value="L"<?php if (isset($produit_selectionne['taille']) && $produit_selectionne['taille'] == 'L') echo 'selected'; ?>>L</option>
			<option value="XL"<?php if (isset($produit_selectionne['taille']) && $produit_selectionne['taille'] == 'XL') echo 'selected'; ?>>XL</option>
			<option value="XXL"<?php if (isset($produit_selectionne['taille']) && $produit_selectionne['taille'] == 'XXL') echo 'selected'; ?>>XXL</option>
		</select><br><br>

		<label for="public">Public:</label><br>
		<input type="radio" id="public" name="public" value="m" checked><span>HOMME</span><br>
		<input type="radio" id="public" name="public" value="f" <?php if (isset($produit_selectionne['public']) && $produit_selectionne['public'] == 'f') echo 'checked'; ?>><span>FEMME</span><br>
		<input type="radio" id="public" name="public" value="e" <?php if (isset($produit_selectionne['public']) && $produit_selectionne['public'] == 'e') echo 'checked'; ?>><span>ENFANT</span><br><br>

		<label for="photo">Photo</label>
		<input type="file" id="photo" name="photo"><br><br>
		
		<?php if (isset($produit_selectionne)) { echo 'vous pouvez télécharger une autre photo si vous le souhaitez.'; 
		echo '<img src="" alt="" width="100" height="auto"><br>';
		echo '<input type="hidden" name="photo_actuelle" value="' . $produit_selectionne['photo'] . '">'; //Pour renseigner le $_POST['photo_actuelle'] qui va en base lorsqu'on clique sur valider
		}

		?>
		
		
		<label for="prix">Prix:</label>
		<input type="text" id="prix" name="prix" value="<?php if (isset($produit_a_supprimer['prix']))echo $produit_selectionne['prix']; ?>"><br><br>

		<label for="stock">Stock:</label>
		<input type="text" id="stock" name="stock" value="<?php if (isset($produit_a_supprimer['stock']))echo $produit_selectionne['stock']; ?>"><br><br>
		
		
		<input type="submit" id="valider" value="Valider">
	</form>
	

<?php
endif;

require_once('../inc/bas.inc.php');
?>

Mammouth du PHP | 1967 Messages

13 mai 2016, 09:03

Sans balise [ php] c'est illisible
<?php
require_once('../inc/init.inc.php');

	if (!internauteEstConnecteEtEstAdmin()) {
		header ('location:../connexion.php'); //redirection vers la page connexion
		exit();
	}

// SUPPRESSION D'UN PRODUIT:
if (isset($_GET['action']) && $_GET['action'] == 'suppression') {
	
	/* Traitement de la photo */
	$requete = $mysqli->query("SELECT * FROM produit WHERE id_produit = '$_GET[id_produit]'");

       // pas de boucle car un seul produit par ID_PRODUIT	
	$produit_a_supprimer = $requete->fetch_assoc(); 

       // Chemin de la photo à supprimer dans le dossier	
	$chemin_photo_a_supprimer = $_SERVER['DOCUMENT_ROOT'] . $produit_a_supprimer['photo']; 

	// unlink efface le fichier dont le chemin est spécifier
	if(!empty($produit_a_supprimer['photo']) && file_exists($chemin_photo_a_supprimer)) { //file_exists test si le f
		unlink($chemin_photo_a_supprimer); 
	}
	/* Fin de traitement de la photo */
	
	// ***************************************************
	
	//Suppression en base
	$mysqli->query("DELETE FROM produit WHERE id_produit = '$_GET[id_produit]'"); 	
	$_GET['action'] = 'affichage';
}
	//Fin Suppression en base

// Enregistrement du produit en BDD
if ($_POST) {
	
	//PHOTO: 
		$photo_bdd ='';
		
		if (isset($_GET['action']) && $_GET['action'] == 'modification') {
			$photo_bdd = $_POST['photo_actuelle']; 
                //Si je suis en modification, on remet en BDD l'url actuel de la photo qui est dans $_POST.
		}
		
		if(!empty($_FILES['photo']['name'])){
			//debug($_FILES);
			$nom_photo = $_POST['reference'] . $_FILES['photo']['name']; 
					/* Concatène le nom de la photo UPLOAD */
			
			$photo_bdd = RACINE_SITE . 'photo/' . $nom_photo;	
					/* Chemin de la photo enregistrer dans la DB ( a la racine du site dans photo)*/
					
			$photo_dossier = $_SERVER['DOCUMENT_ROOT']. RACINE_SITE . 'photo/' . $nom_photo; 
					/* Chemin de la photo pour l'enregistrement physique du fichier.*/
				//debug($photo_dossier);	
				
			copy($_FILES['photo']['tmp_name'], $photo_dossier);
		}
	// FIN PHOTO ********************************************
		
/* Traitement du $_POST pour convertir les caractère spéciaux:*/
	
	foreach ($_POST as $indice => $valeur){
		$_POST[$indice] = htmlentities($valeur, ENT_QUOTES);
	}
	
	$mysqli->query("REPLACE INTO produit (id_produit, reference, categorie, titre, description, couleur, taille, public, photo, prix, stock) VALUES ('$_POST[id_produit]','$_POST[reference]','$_POST[categorie]','$_POST[titre]','$_POST[description]','$_POST[couleur]','$_POST[taille]','$_POST[public]','$photo_bdd','$_POST[prix]','$_POST[stock]')");
	//replace into se comporte comme update s'il trouve l'id produit, sinon comme insert into.
	
	$contenu .='<div class="Validation">Le produit a bien été ajouté dans les stocks</div>';
	
}

//5° ======================================================================

	// AFFICHAGE DES PRODUIT DANS LE BACK-OFFICE:
	if(isset($_GET['action']) && $_GET['action'] == 'affichage') {
		$resultat = $mysqli->query("SELECT * FROM produit");
		
		$contenu .= '<h2>Affichage des produits</h2><br><br>';
		$contenu .= '<p>nombre de produit dans la boutique:' . $resultat->num_rows . '</p><br><br>';
		
	// Affichage sous forme de tableau:
	$contenu .='<table border=1><tr>';
		// 5.1 - les entêtes: ******************************************
		while($entete = $resultat->fetch_field()) {
			$contenu .= '<th>' . $entete->name . '</th>';
					
			}
				
			$contenu .= '<th>modification</th>';
			$contenu .= '<th>suppression</th>';
	$contenu .= '</tr>';

// 5.2 Les lignes du tableau: ********************************************

	while($ligne =$resultat->fetch_assoc()){
		$contenu .= '<tr>';
		foreach ($ligne as $indice => $information){
				
				if ($indice == 'photo') {
					$contenu .= '<td><img src="'. $information .'" width="100" height="auto" alt=""></td> ';
				
				} else {
					$contenu .= '<td>' . $information . '</td>';
				}
				
		} // fin du foreach
		
//5.3 affichage des liens  (supprimer et modifier) ************************

			$contenu .='<td><a href="?action=modification&id_produit='. $ligne['id_produit'].'"><input type="submit" name="modification" value="modification"></a></td>';
			$contenu .='<td><a href="?action=suppression&id_produit='. $ligne['id_produit']. '" onclick="return(confirm(\'En êtes vous certain ?\'));"><input type="submit" name="suppression" value="suppression"></a></td>';
			
			
			$contenu .= '</tr>';
		} //fin du while

	$contenu .='</table>';
		
	} //fin du if(isset())
	

/*************************** HTML ***********************************/

	require_once('../inc/haut.inc.php');
?>
<div id="menu_affichage">
	<ul>
		<li><a class="produit" href="?action=affichage"><input type="submit" name="affichage" value="Affichage des produits"></a></li>
		<li><a class="produit" href="?action=ajout"><input type="submit" name="ajout_produit" value="Ajout d'un produit"></a></li>
	</ul>
</div>
<?php	
	// AJOUT DE LIENS "AFFICHAGE" et "AJOUT":

	/*  Ci-dessous le lien vers affichage avec un $_GET['action'] = 'affichage'  */
	//$contenu .= '<p><a class="produit" href="?action=affichage">Affichage des produits</a></p><br>';

	/*  Ci-dessous le lien vers affichage avec un $_GET['action'] = 'affichage'  */
	//$contenu .= '<p><a class="produit" href="?action=ajout">Ajout d\'un produit</a></p><br>';
	
	echo $contenu;

	if(isset($_GET['action']) && ($_GET['action'] == 'ajout' || $_GET['action'] == 'modification')) : 
	// la syntaxe du if avec (:) et endif qui remplace les accolades dans le cas ou il y aurais des long passage de code entre les deux.

//7° $_GET['action']=='modifications' **********************************
	if (isset($_GET['id_produit'])){  //Si on met en modification et qu'un produit a été sélectionner alors on fait une requête en BDD pour afficher les informations du produit sélectionné dans le formulaire de modification
		$resultat = $mysqli->query("SELECT * FROM produit WHERE id_produit = '$_GET[id_produit]'");
		$produit_selectionne = $resultat->fetch_assoc(); //Ici pas de boucle while car l'id_produit est unique	
	}

//3° Formulaire HTML avec value="" *************************************
?>

	<h1>Formulaire produits</h1>
	
	<form method="post" action="" enctype="multipart/form-data" id="tableau1">
	<!-- multipart/form-data permet de uploader un fichier et de générer une superglobale $_FILES -->
		<input type="hidden" id="id_produit" name="id_produit" value="<?php if (isset($produit_selectionne['id_produit']))echo $produit_selectionne['id_produit']; ?>"><br><br>
		
		<label for="reference">Référence:</label>
		<input type="text" id="reference" name="reference" value="<?php if (isset($produit_selectionne))echo $produit_selectionne['reference']; ?>"><br><br>

		<label for="categorie">Catégorie:</label>
		<input type="text" id="categorie" name="categorie" value="<?php if (isset($produit_selectionne))echo $produit_selectionne['categorie']; ?>"><br><br>
		
		<label for="titre">Titre:</label>
		<input type="text" id="titre" name="titre" value="<?php if (isset($produit_selectionne))echo $produit_selectionne['titre']; ?>"><br><br>
		
		<label for="description">Description:</label>
		<input type="text" id="description" name="description" value="<?php if (isset($produit_selectionne))echo $produit_selectionne['description']; ?>"><br><br>
		
		<label for="couleur">Couleur:</label>
		<input type="text" id="couleur" name="couleur" value="<?php if (isset($produit_selectionne['couleur']))echo $produit_selectionne['couleur']; ?>"><br><br>
		
		<select name="taille">
			<option value="XS"<?php if (isset($produit_selectionne['taille']) && $produit_selectionne['taille'] == 'XS') echo 'selected'; ?>>XS</option>
			<option value="S"<?php if (isset($produit_selectionne['taille']) && $produit_selectionne['taille'] == 'S') echo 'selected'; ?>>S</option>
			<option value="M"<?php if (isset($produit_selectionne['taille']) && $produit_selectionne['taille'] == 'M') echo 'selected'; ?>>M</option>
			<option value="L"<?php if (isset($produit_selectionne['taille']) && $produit_selectionne['taille'] == 'L') echo 'selected'; ?>>L</option>
			<option value="XL"<?php if (isset($produit_selectionne['taille']) && $produit_selectionne['taille'] == 'XL') echo 'selected'; ?>>XL</option>
			<option value="XXL"<?php if (isset($produit_selectionne['taille']) && $produit_selectionne['taille'] == 'XXL') echo 'selected'; ?>>XXL</option>
		</select><br><br>

		<label for="public">Public:</label><br>
		<input type="radio" id="public" name="public" value="m" checked><span>HOMME</span><br>
		<input type="radio" id="public" name="public" value="f" <?php if (isset($produit_selectionne['public']) && $produit_selectionne['public'] == 'f') echo 'checked'; ?>><span>FEMME</span><br>
		<input type="radio" id="public" name="public" value="e" <?php if (isset($produit_selectionne['public']) && $produit_selectionne['public'] == 'e') echo 'checked'; ?>><span>ENFANT</span><br><br>

		<label for="photo">Photo</label>
		<input type="file" id="photo" name="photo"><br><br>
		
		<?php if (isset($produit_selectionne)) { echo 'vous pouvez télécharger une autre photo si vous le souhaitez.'; 
		echo '<img src="" alt="" width="100" height="auto"><br>';
		echo '<input type="hidden" name="photo_actuelle" value="' . $produit_selectionne['photo'] . '">'; //Pour renseigner le $_POST['photo_actuelle'] qui va en base lorsqu'on clique sur valider
		}

		?>
		
		
		<label for="prix">Prix:</label>
		<input type="text" id="prix" name="prix" value="<?php if (isset($produit_a_supprimer['prix']))echo $produit_selectionne['prix']; ?>"><br><br>

		<label for="stock">Stock:</label>
		<input type="text" id="stock" name="stock" value="<?php if (isset($produit_a_supprimer['stock']))echo $produit_selectionne['stock']; ?>"><br><br>
		
		
		<input type="submit" id="valider" value="Valider">
	</form>
	

<?php
endif;

require_once('../inc/bas.inc.php');
?>
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Mammouth du PHP | 1967 Messages

13 mai 2016, 09:07

Soit tu défini un nombre maximum d'image possible et tu met le nombre de champs fichier correspondant
soit tu as besoin d'un formulaire dynamique qui possède un bouton pour ajouter un champs fichier, dans ce cas cherche un tuto sur le net il doit y en avoir
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Petit nouveau ! | 2 Messages

07 juin 2016, 14:00

Merci pour ta réponse je vais cherché ça !!!