Modification d'une news avec image
Hekthor
-
Hekthor -
Hekthor -
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 :
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.
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 !!
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:
- Modification d'une news avec image
- Suivi de modification word - Guide
- Légender une image - Guide
- Image iso - Guide
- Agrandir une image - Guide
- Reduire taille image - Guide
2 réponses
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
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
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 :
Alors je supprime l'image précédente et j'upload la nouvelle (ce code marche parfaitement)
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...
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...