Page 1 sur 1

suppresion d'un fichier uploader

Posté : 21 févr. 2007, 17:51
par kweb
Bonjours tous le monde !

Tout dabord une petite explication de ce que j'ai réalisé pour que vous compreniez mon probleme par la suite !
J’ai créé un agenda dynamique, qui affiche tous les congres qui se dérouleront chaque mois de l’année en cours.
Exemple :
Janvier : congrès 1, congrès 2
Février : congres 3
Mars : congrès 4, congrès 5

Je donne la possibilité de cliquez sur le nom du congrès pour accéder au détails de celui-ci

Voici la composition des pages
- index.php = affiche tous les congres listé par "mois"
- ajout.php = permet d'ajouter un nouveau congrès (dans la Base de donnée)
- modification.php = permet de modifier un congrès existant
- detail.php = permet de visualisé le détail du congrès
- suppression.php = supprimer le congres de la base de donnée

Voici les champs de la table AGENDA
id_agenda
congres_agenda
mois_agenda
date_debut_agenda
date_fin_agenda
ville_agenda
pays_agenda
nom_pdf_agenda
chemin_pdf_agenda
poids_pdf_agenda

- Dans la page ajout.php, je peux donc faire un upload d'un fichier PDF

- Dans la page detail.php, je peux visualisé le PDF qui correspond au congrès que j'ai selectionner

- Dans la page modification.php, je peux faire des modifications des elements existant (update)
MON PROBLEME
Dans la page modification.php, j'affiche le nom (avec un lien pour le téléchargement) du PDF qui concerne le congrès choisi, mais je voudrais avoir a coté du nom, un bouton "supprimer" (qui supprimerai le PDF du dossier ou il se trouve) et dans le cas ou je supprime donc le PDF, de donnée la possibilité d'uploader un nouveau fichier ?

Si quelqu'un aurais des expemples sur lequels me rediriger, ou bien me donner des extrais de code....
je sortirais enfin de ma galére.

MErci a vous

Posté : 21 févr. 2007, 18:43
par Ryle
A priori il faudrait que tu test si le champ chemin_pdf_agenda est renseigné ou non. S'il est vide tu propose l'invite de saisie d'un fichier (et tu gère l'upload en cas de modif), s'il est renseigné tu propose le bouton de suppression.

Lorsque l'on clique sur ce bouton, cela fait appel au serveur (en passant les infos qui vont bien pour identifier le congrès et indiquer que tu veux supprimer le pdf).

Côté serveur, tu vas donc aller supprimer le fichier physiquement du serveur (voir unlink()) et mettre à vide les champs nom_pdf_agenda, chemin_pdf_agenda et poids_pdf_agenda dans ta base pour dire qu'il n'y a pas de fichier à télécharger.

Puis tu réaffiches ton formulaire de modification qui devrait du coup proposer l'invite d'upload de fichier :)

Posté : 26 févr. 2007, 16:56
par kweb
A priori il faudrait que tu test si le champ chemin_pdf_agenda est renseigné ou non. S'il est vide tu propose l'invite de saisie d'un fichier (et tu gère l'upload en cas de modif), s'il est renseigné tu propose le bouton de suppression.
Ok, je pense avoir écrit la bonne syntaxe pour faire cela
 
<? 
		$fichier_PDF = $affichage['chemin_pdf_agenda'];  // Création d'un variable	
			
		if (!empty($fichier_PDF)) // SI la variable $fichier_PDF ne contient pas (!) de valeur
			{ ?>
			<a href=<? $affichage['chemin_pdf_agenda'] ?> ><? echo $affichage['nom_pdf_agenda']?></a>
			 &nbsp;
			 <input type="button" name="Submit26" value="Supprimer le fichier PDF">	
			<? }

		
		else  // SINON
			{ ?> 
			<input type="hidden" name="MAX_FILE_SIZE" value="4194304" />
			<input name="PDF" type="FILE" id="PDF" />
Ensuite, j'insère la syntaxe qui vas me permettre d'uploadé le fichier PDF dans le cas ou la condition est : ELSE
<?
else  // SINON
		{ ?> <? // Fichier qui vas uploder tout les elements du formulaire et le PDF
				include ("../include/update_upload.inc.php"); ?>
				<input type="hidden" name="MAX_FILE_SIZE" value="4194304" />
				<input name="PDF" type="FILE" id="PDF" /><span class="clignotant">
le code de update_upload.inc.php
<?php
// UPLOAD DE FICHIER

/*
****************************************************************
*                VERIFICATION AVANT UPLOAD                     *
****************************************************************
*/

if(isset($_FILES['PDF'])) // si la variable PDF existe
{
	// paramettre
	unset($erreur);                         // Detruire la variable $erreur (ne pas affiché la variable)
	$extensions_ok = array('pdf');          // Autorisé juste les fichiers PDF
	$taille_max = 4194304;                   // avec un poid MAXIMUM de 4Mo (1Mo = 1000000)
	$dest_dossier = 'PDF_programme/';       // Chemin du dossier qui vas recevoir les PDF... utilisez également des slashes sous windows : $dest_dossier = 'd:/damien/photos/';
	
		// vérifications
		if( !in_array( substr(strrchr($_FILES['PDF']['name'], '.'), 1), $extensions_ok ) )
			{
			$erreur = 'Seul les fichiers au <strong>format PDF<strong/> sont accepté, veuillez recommencer !';
			}
			
		elseif( file_exists($_FILES['PDF']['tmp_name'])and filesize($_FILES['PDF']['tmp_name']) > $taille_max)
			{
			$erreur = 'Le fichier ne doit pas dépasser <strong>4 Méga</strong>, si vous souhaitez le réduire contacté "Stephane" !';
			}
	
	
/*
****************************************************************
*                    ENVOIE DU FICHIER                         *
****************************************************************
*/
		
		// si la variable ERREUR n'existe pas
		if(!isset($erreur))                                      
			{		
			
/*
****************************************************************
*                DECLARATION DES VARIABLE                      *
****************************************************************
*/
				// connection a la base de donnée
				include ("../include/connectBD.inc.php");
				
/*
****************************************************************
*             DECLARATION DES VARIABLE EN POST                 *
****************************************************************
*/

				// création des variable depuis le formulaire de saisie
				$congres = strtoupper($_POST['congres']); //mettre ne majuscule
				$mois =$_POST['mois'];
				$debut =$_POST['date_debut'];
				$fin =$_POST['date_fin'];
				$ville =$_POST['ville'];
				$pays =$_POST['pays'];
				$commercial =$_POST['commercial'];
				$inscription =$_POST['inscription'];
				$budget =$_POST['budget'];
				$conferencier =$_POST['conferencier'];
				$presse =$_POST['presse'];
				$soutien =$_POST['soutien'];
				$nom_pdf = $_FILES['PDF']['name'];
				$poid_pdf = $_FILES['PDF']['size'];
				$chemin_pdf = $dest_dossier.$_FILES['PDF']['name'];


/*
****************************************************************
*               FORMATAGE DU FICHIER UPLODER                   *
****************************************************************
*/			
			
			// formatage du nom du fichier / Sépare le nom du fichier et le nom du dossier
			$dest_fichier = basename($_FILES['PDF']['name']);  
			
			// TEST DE CHANGEMENT DE NOM DU FICHIER UPLOADER
			//modification du nom, tout en minuscule "nom_du_congres_nom_du_fichier.pdf" :
			$changement_nom_pdf1 = strtolower ($congres.'_'.$dest_fichier);  
			
			// enlever les accents
			$changement_nom_pdf1 = strtr($changement_nom_pdf1,
			'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
			'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
			
			// remplacer les caracteres autres que lettres, chiffres et point par _
			$changement_nom_pdf1 = preg_replace('/([^.a-z0-9]+)/i', '_', $changement_nom_pdf1);
			
			// copie du fichier
			move_uploaded_file($_FILES['PDF']['tmp_name'], $dest_dossier . $changement_nom_pdf1);


/*
****************************************************************
*                    CONVERTION DES DATES                      *
****************************************************************
*/	
				
				// Convertion de la date debut
				  $date_fr_debut = $debut;
				  $date_us_debut = implode('-',array_reverse  (explode('/',$date_fr_debut)));
				  
				// Convertion de la date fin 
				  $date_fr_fin = $fin;
				  $date_us_fin = implode('-',array_reverse  (explode('/',$date_fr_fin)));


/*
****************************************************************
*                   MISE A JOUR DES DONNEES                    *
****************************************************************
*/

				
				// creation d'une variable qui mets a jour dans la table agenda les champs suivant
				$insertion_dans_la_table = "
											UPDATE agenda 
											SET congres_agenda= '$congres', 
												mois_agenda= '$mois_agenda', 
												date_debut_agenda= '$date_debut_sql', 
												date_fin_agenda= '$date_fin_sql', 
												ville_agenda= '$ville', 
												pays_agenda= '$pays', 
												commercial_agenda= '$commercial', 
												inscription_agenda= '$inscription', 
												budget_agenda= '$budget', 
												conferencier_agenda= '$conferencier', 
												presse_agenda= '$presse', 
												soutien_agenda= '$soutien', 
												nom_pdf_agenda='$nom_pdf', 
												poid_pdf_agenda='$poid_pdf',
												chemin_pdf_agenda='$chemin_pdf'
											WHERE id_agenda= '$id' ";			

			//// Envoie une requête SQL à un serveur MySQL , donc mysql_query (utilise la variable $sql qui demande l'insertion d'element dans une table
			mysql_query ($sql);
							
				$confirmation = '<p align="center"><span class="Titre_h2">L\'ajout du  congr&egrave;s &agrave; bien &eacute;t&eacute; pris en compte.<br />
								<span class="Titre_h2">Il est  d&eacute;sorm&eacute; visible pour tous les utilisateurs.</span></span><br />
								</p>';
							}
}
/*****************************************************************/


		
// Envoie une requête SQL à un serveur MySQL , donc mysql_query (utilise la variable $sql qui demande l'insertion d'element dans une table
mysql_query ($insertion_dans_la_table) or die ("Exécution de la requêtes impossible.");

?>
Maintenant je me penche sur le problème de la suppression.. et la je rigole moins :cry:

Je ne sais pas par ou commencé :
- faut il que j'intègre un include dans la condition IF, qui auras comme valeur DELETE FROM agenda WHERE nom_pdf_agenda='$affichage['nom_pdf_agenda']' etc....
- faut il utilisé un script ?
je suis vraiment perdu, car c la premier fois que je gére autant de code dans une même page.
pourriez vous me donner un petit coup de pouce....
merci a vous

Posté : 26 févr. 2007, 17:11
par thehawk
Peut tu donner plus de precison sur le fichier a supprimer ,
a til des attaches dans une base de données ?
Pour supprimer un fichier il suffit de faire :

<? unlink("ledossier/le_nom_du_fichier.php"); ?>

Posté : 26 févr. 2007, 17:32
par kweb
Le fichier a supprimer est un fichier exclusivement PDF qui est lié a un congrès. Celui-ci est stocké dans un répertoire a la racine du site nommé "PDF_programme".
Son Nom, son Chemin et son Poid sont stocké dans la BG....
et j'utilise les donnée de la BD pour faire affiché le PDF selon le congrès que je choisi.

Concernant la syntaxe de suppression
il faut que je supprime donc le fichier physique (unlink()) et les valeur des champs suivant "nom_pdf_agenda" / "chemin_pdf_agenda" / "Poid_pdf_agenda".
cette syntaxe la faut il que je la mette dans la condition IF ?

en espèrent que ses explications ne sont pas trop confuse...

Posté : 26 févr. 2007, 18:19
par thehawk
moi je verrai quelque chose comme :
<?
if ($_GET[action] == "del" && !empty($_GET[id]))
{
$reponse = mysql_query('SELECT * FROM agenda WHERE id="'.$_GET[id].'"');
$donnees = mysql_fetch_array($reponse);
unlink ($donnees[nom_du_pdf]);
$del = mysql_query('DELETE * FROM agenda WHERE id="'.$_GET[id].'"');
}
?>
Voila j esper que cela va t aider

thehawk

Posté : 27 févr. 2007, 11:45
par kweb
Concernant le code que tu ma donner je ne sais pas si il s'adapterait a ce que je souhaiterais faire ?
Attention, je suis débutant, je peux donc me trompé sur ce que je dis... ;-)
Il faut bien que je donne une action a mon bouton "supprimer" ?
faut il mettre un javascript ?

Pour bien comprendre la situation je vous mets 2 impression écran

IMAGE 1 -> Page modification.php (cas ou le PDF existe deja), avec la partie de code qui concerne la fonction voulue.
(ce n'est qu'une partie car si je fais ce post, c'est que je n'arrive pas a trouvé l'intégralité du code moi meme et j'ai besoin d'aide)
Image


IMAGE 2 -> Page modification.php , avec la partie de code qui concerne la fonction voulue.
(ce n'est qu'une partie car si je fais ce post, c'est que je n'arrive pas a trouvé l'intégralité du code moi meme et j'ai besoin d'aide)
Image

En espérant êtres le plus précis possible.
encore une fois merci pour votre participation

Posté : 27 févr. 2007, 13:19
par thehawk
Bien ... :? :? :?

Bon je pense avoir compris ton cheminement ...
Tout d'abord que contient la variable
$fichier_PDF
Un chemin d'accès ? => truc/congres/bibule/congres.pdf
ou le nom de ton fichier => conges.pdf

Peut tu aussi nous monter la composition de ta table car il faut aussi supprimer dedans pour éviter les fichiers fantômes ...
Si tu ne sais pas ce que contient cette variable fait le teste suivant :
 echo $fichier_PDF; 
Voila thehawk

Ps : Ton style est tres jolie tu la fait toi meme ?

Posté : 27 févr. 2007, 16:15
par kweb
Voici la La table AGENDA

Image


Que contient la variable $fichier_PDF ?
La variable $fichier_PDF récupére le chemin du fichier qui a été stocké par la variable $chemin_pdf = programme_PDF/$_FILES['PDF']['name'].
expl : programme_PDF/nom_du_fichier.pdf



+ de details
Pour arrivé a la page modification.php, il faut obligatoirement passer par la page detail.php et pour arriver a detail.php il faut passer obligatoirement sur la page index.php
pour êtres le plus précis possible, je te mets la code intégrale de ma page detail.php



1er
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Lister tout les congrès dans la page "index.php"
Image



2éme
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Affiche le détails d'un congrès detail.php
>>Télécharger le code http://kweb13.free.fr/detail.txt
Image



3ème
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Affiche la pages des modifications "modification.php"
l'image est dans le poste précédent.
>>Télécharger le code http://kweb13.free.fr/modification.txt




A SAVOIR
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
A l'origine, j'ai créer mon formulaire de modification sans la suppression ou l'ajout de PDF. j'ai voulue rajouté cette fonction il y a peu de temps.
tout sa pour dire que la premières version de ce formulaire se joué en deux temps:
1er partie : le formulaire lui même qui avait un <form "action" qui appelé une autre page
2em partie : ces dans cette deuxième page que j'avais mis toute la syntaxe pour mettre a jour la BD.

je m'aperçoit maintenant que ce n'est pas possible de le gérer comme cela a cause de la pièce jointe. il faut tout que je réalise dans la même page

J'ai mal au doigt de taper, je fais une petite pause :lol:

PS: concernant le style, oui c'est moi qui l'ai fais. je suis graphiste et j'essaie de me mettre a php....

Posté : 27 févr. 2007, 16:50
par thehawk
Bien ...
Bon je vais travailler un peu sur le code source et puis je te le presenterai
J'ai besoins d'une petite precisoins de l action voulu sur la base ...
tu veux supprimer completement toutes la ligne correspondant a ton fichier ou mettre par exemple un "0" a la place du nom , du chemin etc ?


thehawk

ps :je serai tres interessé par un de tes graphisme car moi en graphisme, je suis une bille ...

Posté : 27 févr. 2007, 17:06
par thehawk
Donc voila comme promi j'ai étudier ce que tu a demandé et voici le code ...
Il ne reste plus qu'à mettre a jour ta base de données ....


thehawk
 Ajoute au tous debut de ton script : <? session_start(); ?>
 <? 
		$fichier_PDF = $affichage['chemin_pdf_agenda'];  // Création d'un variable<br />
		if (isset($_GET[action_pdf]) and $_GET[action_pdf] == "del")
			{
			if (file_exists($_SESSION[chemin_pdf]))
				{
				unlink($_SESSION[chemin_pdf]); // suppression materiel
				
				}
			}
		
		if (!empty($fichier_PDF)) // SI la variable $fichier_PDF ne contient pas (!) de valeur
			{ 
			$_SESSION[chemin_pdf] = $fichier_PDF;
			?>
				<!--################### AFFICHER ###################-->
				<a href=<? $affichage['chemin_pdf_agenda'] ?> ><? echo $affichage['nom_pdf_agenda']?></a>
				
				 &nbsp;<a href="modification.php?action_pdf=del">Supprimer le fichier </a>
			<? }

		// SINON
		else {  ?>
				<!--################### AFFICHER ###################-->
				<? // Upload le fichier et l'insertion toutes les modification dans la BD
				include ("../include/update_upload.inc.php"); 
				?>
				<input name="PDF" type="FILE" id="PDF" />
				<span class="clignotant">
				<?php
		if(isset($erreur)) // si la variable erreur existe
			{
			echo '<p>', $erreur ,'</p>';    //affiche le contenu de la variable
			}
		?>
				</span><br />
				<span class="legende_petit">4Mo maximum</span> 
		  <? } ?>

Posté : 27 févr. 2007, 17:47
par kweb
Merci,
n'ayant pas tous compris la logique de ce que tu as écrit, je vais prendre le temps d''étudié sa ce soir...
j'aurais surement d'autre questions... par la suite !

pour te remercier et si tu es ok, je peux de donnée un petit coup de pouce pour réalisé le graphisme d'un de t'es projet... bien entendu je ne voudrais pas passer 10 jours dessus :lol: , si sa reste de l'ordre du raisonnable, y pas de problème

je pense que c'est un bon deale ?

Posté : 27 févr. 2007, 17:58
par thehawk
je vien de t envoyer un MP (message personnel)