[RESOLU] Ne pas enregistrer dans la bdd un champ de type file si vide

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Ne pas enregistrer dans la bdd un champ de type file si vide

Re: [RESOLU] Ne pas enregistrer dans la bdd un champ de type file si vide

par Spols » 09 déc. 2016, 14:10

Je ne l'aurais pas fait comme cela, mais si ca marche tant mieux et en plus cela à l'avantage de garder une trace du fichier précédent en cas de modif.

Maintenant, si c'est quelque chose que tu fait souvent, il y aura des fichiers non utilisé sur ton serveur, cela peut te poser des soucis si ils se multiplient.

Re: Ne pas enregistrer dans la bdd un champ de type file si vide

par anti911 » 09 déc. 2016, 13:03

Merci encore à toi Spols

Re: Ne pas enregistrer dans la bdd un champ de type file si vide

par anti911 » 09 déc. 2016, 13:03

je tiens à te remercier , car je n'avais pas abordé le problème sous cette angle , et en effet cela fonctionne ..... :D

voila le code ( simplifier que j'ai testé ) pour ceux qui rencontre le même problème

le formulaire :

Code : Tout sélectionner

<?php $BDD = mysql_connect(""); // Connexion à la base de données. mysql_select_db(""); // Sélection de la base de données utilisée. $sql = "SELECT * FROM modele WHERE id_modele = 2 "; //exécution de la requête: $requete = mysql_query( $sql, $BDD ) ; //affichage des données: if( $result = mysql_fetch_object( $requete ) ) { ?> <!doctype html> <html> <head> <meta charset="utf-8"> <title>Document sans titre</title> </head> <body> <form method="post" action="test_update.php" enctype="multipart/form-data"> <input type="file" name="image_localisation" value="image_localisation"/></br> <input type="hidden" name="image_localisation_cache" value="<?php echo ($result->image_localisation); ?>"/> <input type="submit" value="Modifier" /> </body> </html> <?php }//fin if ?>

et le traitement :

Code : Tout sélectionner

<?php $BDD = mysql_connect("1"); // Connexion à la base de données. mysql_select_db(""); // Sélection de la base de données utilisée. $image_localisation = $_FILES['image_localisation']['name']; $nom_fichier = $_FILES['image_localisation']['tmp_name']; $nom_destination = 'images/'.$image_localisation; move_uploaded_file($nom_fichier, $nom_destination); //image_localisation_cache: $image_localisation_cache = $_POST["image_localisation_cache"] ; $image_localisation_cache = addslashes( $image_localisation_cache ) ; $sql = "UPDATE modele SET image_localisation = '".$image_localisation."', image_localisation_cache = '".$image_localisation_cache."' WHERE id_modele = 2 " ; //exécution de la requête SQL: $requete = mysql_query($sql, $BDD) or die( mysql_error() ) ; //affichage des résultats, pour savoir si la modification a marché: if($requete) { echo("<h3>Votre fiche ".$image_localisation." ".$image_localisation_cache." a bien été modifié</h3> ") ; } else { echo("La modification à échouée") ; }

et l'affichage :

Code : Tout sélectionner

<?php $BDD = mysql_connect(""); // Connexion à la base de données. mysql_select_db(""); // Sélection de la base de données utilisée. $sql = "SELECT * FROM modele WHERE id_modele = 2 "; //exécution de la requête: $requete = mysql_query( $sql, $BDD ) ; //affichage des données: if( $result = mysql_fetch_object( $requete ) ) { $images_localisation_cache = ($result->image_localisation_cache); $images_localisation = ($result->image_localisation); ?> <h2> <?php if($result->image_localisation == true) { echo '<img src="image/'.$images_localisation.'">'; } elseif ($result->image_localisation == false) { echo ' <img src="image/'.$images_localisation_cache.'"> ';} ?></h2> <?php }//fin if ?> </body> </html>

Re: Ne pas enregistrer dans la bdd un champ de type file si vide

par anti911 » 09 déc. 2016, 11:59

ok , je test cela

Re: Ne pas enregistrer dans la bdd un champ de type file si vide

par Spols » 09 déc. 2016, 11:51

J'opterais pour la première solution, plus simple à mettre en oeuvre.

Il faut revoir la manière de créer ton formulaire, en mettant une valeur par défaut à chacun de tes champs en fonction de la fiche à modifier. il suffit de remplir l'attribut value de chaque input.
mais cela se complique quelque peu pour les champs file, si tu as un champs file renseigné sur ta fiche, affiche le dans le formulaire (pour savoir si il doit être modifié ou non par l'utilisateur) il te faudra aussi un champs caché (type="hidden") avec le nom du fichier telle qu'il est dans ta fiche.
et puis un champs file.

dans le traitement, peu de chose à changer, juste au niveau des champs file. commence par détecter si il sont rempli ou non.
si il sont vide, récupère la valeur de ton champs caché et met la dans ta variable qui te servira dans ta requête, sinon, tu peux faire comme tu le fait maintenant, récupèrer le champs et sauvegarder son nom de fichier.

Re: Ne pas enregistrer dans la bdd un champ de type file si vide

par anti911 » 09 déc. 2016, 11:44

merci pour ta réponses Spols , tu as tout a fait compris mon problème ....;

mais comment mettre en oeuvre tout ça .....

Re: Ne pas enregistrer dans la bdd un champ de type file si vide

par Spols » 09 déc. 2016, 11:35

Il y a 2 façon de faire les choses,

soit tu rempli tous tes champs avec leur valeur actuelle et donc si tu écrase tout ton enregistrement, les champs non modifié contiendront toujours la même valeur.
mais pour les fichiers c'est plus compliqué, il te faudrait un champs caché contenant le nom du fichier et une detection du type si champs file est vide => utilisé la valeur du champs caché.

Soit une requète d'update qui ne contient que ce qui est modifié. il te faut alors une condition sur chaque champs soit pour comparer avec la valeur par défaut (en session ou en champs caché) soit si le champs est rempli (pour les fichiers). ces condition te permettront d'inclure dans la requète que ce qui est nécessaire

Ne pas enregistrer dans la bdd un champ de type file si vide

par anti911 » 09 déc. 2016, 11:25

Bonjour à tous ,

bon , comme vous l'aurez compris , j'ai donc un formulaire de modification de fiche moto.

plusieurs champs text et plusieurs champs files que j'enregistre dans la bdd ,

mon problème c'est que lors d'une modification de fiche par exemple , si j'upload juste une image , il enregistre le nom dans la

bdd , et upload le fichier , mais enregistre également les champ files laissé vide , et donc je perd mes enregistrement précédant .

voila mon code en espérant que vous puissiez m'aider . :oops:

Pour infos depuis que j'ai mis une conditions , il n'y a que l'upload qui fonctionne , je n'ai plus d'enregistrement dans la bdd ..

Code : Tout sélectionner

<?php if ($_POST['action'] == 'Modifier') { //connection au serveur $BDD = mysql_connect("",",""); // Connexion à la base de données. mysql_select_db(""); // Sélection de la base de données utilisée. $image_localisation = $_FILES['image_localisation']['name']; $nom_fichier = $_FILES['image_localisation']['tmp_name']; $nom_destination = 'images/'.$image_localisation; move_uploaded_file($nom_fichier, $nom_destination); if (isset($_FILES['image_localisation']) && !empty($_FILES['image_localisation']) && !empty($_FILES['image_localisation' ]['name'])) { $sql2 = "UPDATE modele SET image_localisation = '".$image_localisation."' WHERE id_modele = ".$id_modele ; //exécution de la requête SQL: $requete = mysql_query($sql2, $BDD) or die( mysql_error() ) ; } $illustration_1 = $_FILES['illustration_1']['name']; $nom_fichier = $_FILES['illustration_1']['tmp_name']; $nom_destination = 'images/'.$illustration_1; move_uploaded_file($nom_fichier, $nom_destination); $illustration_2 = $_FILES['illustration_2']['name']; $nom_fichier = $_FILES['illustration_2']['tmp_name']; $nom_destination = 'images/'.$illustration_2; move_uploaded_file($nom_fichier, $nom_destination); $illustration_3 = $_FILES['illustration_3']['name']; $nom_fichier = $_FILES['illustration_3']['tmp_name']; $nom_destination = 'images/'.$illustration_3; move_uploaded_file($nom_fichier, $nom_destination); $illustration_4 = $_FILES['illustration_4']['name']; $nom_fichier = $_FILES['illustration_4']['tmp_name']; $nom_destination = 'images/'.$illustration_4; move_uploaded_file($nom_fichier, $nom_destination); //récupération des valeurs des champs: //marque: $marque = $_POST["marque"] ; $marque = addslashes( $marque ) ; //id modele: $id_modele = $_POST["id_modele"] ; $id_modele = addslashes( $id_modele ) ; //modele: $modele = $_POST["modele"] ; $modele = addslashes( $modele ) ; //categorie: $numero_fiche = $_POST["numero_fiche"] ; $numero_fiche = addslashes( $numero_fiche ) ; //millesime: $millesime = $_POST["millesime"] ; $millesime = addslashes( $millesime ) ; //creation: $crea = $_POST["crea"] ; $crea = addslashes( $crea ) ; //mise à jour: $maj = $_POST["maj"] ; $maj = addslashes( $maj ) ; //indice: $indice = $_POST["indice"] ; $indice = addslashes( $indice ) ; //indice: $support = $_POST["support"] ; $support = addslashes( $support ) ; //percage: $percage = $_POST["percage"] ; $percage = addslashes( $percage ) ; //decoupe: $decoupe = $_POST["decoupe"] ; $decoupe = addslashes( $decoupe ) ; //autre: $autre = $_POST["autre"] ; $autre = addslashes( $autre ) ; //autre: $operation_text_autre = $_POST["operation_text_autre"] ; $operation_text_autre = addslashes( $operation_text_autre ) ; //localisation: $localisation = $_POST["localisation"] ; $localisation = addslashes( $localisation ) ; //localisation_text_autre: $localisation_text_autre = $_POST["localisation_text_autre"] ; $localisation_text_autre = addslashes( $localisation_text_autre ) ; //gamme: $gamme = $_POST["gamme"] ; $gamme = addslashes( $gamme ) ; //titre_illustration_1: $titre_illustration_1 = $_POST["titre_illustration_1"] ; $titre_illustration_1 = addslashes( $titre_illustration_1 ) ; //titre_illustration_2: $titre_illustration_2 = $_POST["titre_illustration_2"] ; $titre_illustration_2 = addslashes( $titre_illustration_2 ) ; //titre_illustration_3: $titre_illustration_3 = $_POST["titre_illustration_3"] ; $titre_illustration_3 = addslashes( $titre_illustration_3 ) ; //titre_illustration_4: $titre_illustration_4 = $_POST["titre_illustration_4"] ; $titre_illustration_4 = addslashes( $titre_illustration_4 ) ; //création de la requête SQL: $sql = "UPDATE modele SET marque = '".$marque."', modele = '".$modele."', numero_fiche = '".$numero_fiche."', millesime = '".$millesime."', crea = '".$crea."', maj = '".$maj."', indice = '".$indice."', support = '".$support."', percage = '".$percage."', decoupe_plastique = '".$decoupe."', operation_autre = '".$autre."', operation_text_autre = '".$operation_text_autre."', localisation = '".$localisation."', localisation_text_autre = '".$localisation_text_autre."', gamme = '".$gamme."', titre_illustration_1 = '".$titre_illustration_1."', titre_illustration_2 = '".$titre_illustration_2."', titre_illustration_3 = '".$titre_illustration_3."', titre_illustration_4 = '".$titre_illustration_4."', illustration_1 = '".$illustration_1."', illustration_2 = '".$illustration_2."', illustration_3 = '".$illustration_3."', illustration_4 = '".$illustration_4."', WHERE id_modele = ".$id_modele ; //exécution de la requête SQL: $requete = mysql_query($sql, $BDD) or die( mysql_error() ) ; //affichage des résultats, pour savoir si la modification a marchée: if($requete) { echo("<h3>Votre fiche ".$marque." ".$modele." ".$millesime." ".$image_localisation." a bien été modifié</h3> ") ; } else { echo("La modification à échouée") ; } } elseif ($_POST['action'] == 'Supprimer') { //connection au serveur $BDD = mysql_connect("","",""); // Connexion à la base de données. mysql_select_db(""); // Sélection de la base de données utilisée. //récupération des valeurs des champs: //marque: $marque = $_POST["marque"] ; $marque = addslashes( $marque ) ; //id modele: $id_modele = $_POST["id_modele"] ; $id_modele = addslashes( $id_modele ) ; //modele: $modele = $_POST["modele"] ; $modele = addslashes( $modele ) ; //categorie: $numero_fiche = $_POST["numero_fiche"] ; $numero_fiche = addslashes( $numero_fiche ) ; //millesime: $millesime = $_POST["millesime"] ; $millesime = addslashes( $millesime ) ; //creation: $crea = $_POST["crea"] ; $crea = addslashes( $crea ) ; //mise à jour: $maj = $_POST["maj"] ; $maj = addslashes( $maj ) ; //indice: $indice = $_POST["indice"] ; $indice = addslashes( $indice ) ; //indice: $support = $_POST["support"] ; $support = addslashes( $support ) ; //percage: $percage = $_POST["percage"] ; $percage = addslashes( $percage ) ; //decoupe: $decoupe = $_POST["decoupe"] ; $decoupe = addslashes( $decoupe ) ; //autre: $autre = $_POST["autre"] ; $autre = addslashes( $autre ) ; //autre: $operation_text_autre = $_POST["operation_text_autre"] ; $operation_text_autre = addslashes( $operation_text_autre ) ; //localisation: $localisation = $_POST["localisation"] ; $localisation = addslashes( $localisation ) ; //localisation_text_autre: $localisation_text_autre = $_POST["localisation_text_autre"] ; $localisation_text_autre = addslashes( $localisation_text_autre ) ; //gamme: $gamme = $_POST["gamme"] ; $gamme = addslashes( $gamme ) ; //titre_illustration_1: $titre_illustration_1 = $_POST["titre_illustration_1"] ; $titre_illustration_1 = addslashes( $titre_illustration_1 ) ; //titre_illustration_2: $titre_illustration_2 = $_POST["titre_illustration_2"] ; $titre_illustration_2 = addslashes( $titre_illustration_2 ) ; //titre_illustration_3: $titre_illustration_3 = $_POST["titre_illustration_3"] ; $titre_illustration_3 = addslashes( $titre_illustration_3 ) ; //titre_illustration_4: $titre_illustration_4 = $_POST["titre_illustration_4"] ; $titre_illustration_4 = addslashes( $titre_illustration_4 ) ; //création de la requête SQL: $sql2 = "DELETE FROM modele WHERE id_modele = ".$id_modele; //exécution de la requête SQL: $requete = mysql_query($sql2, $BDD) or die( mysql_error() ) ; //affichage des résultats, pour savoir si la modification a marchée: if($requete) { echo("<h3>Votre fiche ".$marque." ".$modele." ".$millesime." a bien été supprimé</h3> ") ; } else { echo("La modification à échouée") ; } } ?>