Modification d'une news avec image

Fermé
Hekthor - 4 déc. 2008 à 10:16
 Hekthor - 4 déc. 2008 à 11:57
Bonjour,

Je suis en train de programmer un blog : j'en suis à la modification d'un billet avec une image, et j'ai un problème plutôt perturbant ! Voici déjà mon code :

Ici le formulaire :

<form action="cgi_news.php" enctype="multipart/form-data" method="post">
<p>Titre : <input type="text" size="30" name="titre" value="<?php echo $titre; ?>" /></p>
<p>Image : <input type="file" name="Fichier"/></p>
<p>
    Contenu :<br />
    <textarea name="contenu" cols="50" rows="10"><?php echo $contenu; ?></textarea><br />
    
    <input type="hidden" name="id_news" value="<?php echo $id_news; ?>" />
    <input type="hidden" name="id" value="<?php echo $donnees['id']; ?>" />
    <input type="submit" value="Envoyer" />
</p>
</form>


Puis le bout de code qui traite ce formulaire : (je précise que le else concerne une vérification pour savoir si c'est une modification ou pas.

else 
    {
		if (isset($_POST['Fichier'])=='')
		{
			//SI LE CHAMP IMAGE EST MODIFIE
			
			$id = $_POST["id"];
			$ancien_fichier = mysql_query("SELECT image FROM news WHERE id=$id");
			$result = mysql_fetch_array($ancien_fichier);

			unlink("../../images/news/{$result['image']}"); 
	
			$nomFichier2 = $_FILES['Fichier']['name'];
			$cheminFichier2 = $_FILES['Fichier']['tmp_name'];
			// Création d'un nom unique avec time()
			// Récupération du seul nom de fichier avec basename()
			$nouveauNom2 = time() . "-" . basename($nomFichier2);
			$nouveauFichier2 = REPERTOIRE_DEPOT . SEPARATEUR_FICHIERS . $nouveauNom2;
			if (file_exists($nouveauFichier2)) {
				die ('Le fichier existe déjà !');
			}
			// déplacement du fichier dans le répertoire dépôt
			if (move_uploaded_file($cheminFichier2, $nouveauFichier2)) {
				echo "";	
			}			
			// On protège la variable "id_news" pour éviter une faille SQL
			$_POST['id_news'] = addslashes($_POST['id_news']);
			// C'est une modification, on met juste à jour le titre et le contenu
			mysql_query("UPDATE news SET titre='" . $titre . "', contenu='" . $contenu . "', image='" . $nouveauNom2 . "' WHERE id='" . $_POST['id_news'] . "'");
		}	
		else if (empty($_POST['Fichier']))
		{
			// On protège la variable "id_news" pour éviter une faille SQL
			$_POST['id_news'] = addslashes($_POST['id_news']);
			// C'est une modification, on met juste à jour le titre et le contenu
			mysql_query("UPDATE news SET titre='" . $titre . "', contenu='" . $contenu . "' WHERE id='" . $_POST['id_news'] . "'");	
		}				
    }
}


Bref, pris séparément, le deux bouts de code fonctionnent parfaitement, par contre, dès que je mets les conditions ci-dessus, la modification d'image marche, mais si j'envoie le formulaire avec le champ 'Fichier' vide, cela ne marche pas et supprime l'image qui existait...

Un p'tit coup de main serait appréciable, je bloque vraiment sur ça !

Merci d'avance !!
A voir également:

2 réponses

2berte Messages postés 204 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 10 mai 2010 143
4 déc. 2008 à 11:30
Ta condition devrait pas plutôt être :


if(isset($_FILES['Fichier']['tmp_name']))

Car pour récuppérer les propriétes d'un champs upload, on utilise $_Files, puis tu vérifies si le nom du fichier temporaire est affecté. Si c'est le cas c'est une modification d'image.

C'est comme ça que je verrais les choses.

Essaye, et tiens nous au courant,

En attente de te lire en retour,

2berte
0
Cela ne marche toujours pas...

En fait, j'ai l'impression que quand le programme lit le script, il ne lit pas le "else if" et n'applique pas ce que je lui demande quand le champ upload est vide. Au contraire, quand je vais dans la base de données, je constate qu'il me supprime l'image précédente, en envoyant un timestamp quand même, même si le champ d'envoi de fichier est vide lors de l'envoi du formulaire.

Je précise encore que ce bout de code marche quand il pris à part... Je me retrouve avec :

if(isset($_FILES['Fichier']['tmp_name'])) 


Alors je supprime l'image précédente et j'upload la nouvelle (ce code marche parfaitement)

else if(empty($_FILES['Fichier']['tmp_name']))


Alors je ne met à jour que les champs textes sans toucher au champ image dans la base de données...

C'est cette condition qui n'est pas lue...
0