Page 1 sur 1

Modifier ou ajouter une photo ds une bdd avec un UPDATE

Posté : 16 févr. 2017, 18:04
par yoann38
Salut à tous,
Voilà j'ai un form qui permet d'ajouter une photo.
Donc soit on à une photo et on souhaite la modifier ou soit il y en a pas et on souhaite en mettre une.
J'ai donc pour cela :


Code du Upload:
// Upload des fichier
			if(empty($namefile)) {
				
				if(!empty($_FILES)) {
					
					if(!empty($_FILES['photo']['tmp_name'])) {
									
						$path = 'img/annonce/';									
						$namefile = filename($_FILES['photo']['name'], $_POST['titre']);
				
						$return = upload($_FILES['photo'], $namefile, $path, array('image/jpg', 'image/jpeg'));
						$message = $return[0];
						$erreur = $return[1];
						
						if($erreur <= 1) {			
							imageparfaite(600, 400, $path.$namefile, $path.$namefile, 1);
							imageparfaite(335, 225, $path.$namefile, $path.'miniature/'.$namefile, 1);
						} else {
							$erreurs['image'] = $message;
						}			
											
	
					}
				}
				
			}
Ma requete :
$modif = $bdd->prepare("UPDATE loisirs SET id_region = :id_region, id_departements = :id_departements, id_type_loisirs = :id_type_loisirs, photo = :photo, titre = :titre,  date_debut_sortie = :date_debut_sortie, date_fin_sortie = :date_fin_sortie, description = :description, phone = :phone,  email = :email, website = :website, street = :street, postcode = :postcode, city = :city, price = :price WHERE id_loisirs =".$idAnn);

$modif->execute(array(
                  'id_region'=>$departement,
			  	  'id_departements'=> regionIdByDepartement($departement),
                  'id_type_loisirs' => $_POST['type_loisirs'],
				  'photo' => $namefile,
 // ... bla bla
                  ));

Mon champ photo:
<label>Photo</label>
      <?php 
	  if(!empty($donnees['photo']) && file_exists('img/img-big-format/miniature/'.$donnees['photo'])) {

      echo '<img src="img/img-big-format/miniature/'.$donnees['photo'].'" alt="'.$donnees['titre'].'" class="img-responsive" /><br />
      <em>Si vous souhaitez remplacer la photo, choisissez en une nouvelle.</em>';
	  }
	  ?>
      <input id="photo" name="photo" type="file" accept="image/jpeg" />
Problème: Si il y 'a une photo existante on l'affiche et on peut la modifier mais si on ne la modifier pas ca me la supprime :'(
Le but est que si on ne modifie pas on garde celle qui existe actuellement

Re: Modifier ou ajouter une photo ds une bdd avec un UPDATE

Posté : 16 févr. 2017, 18:23
par or 1
il faut faire 2 versions de la requete update, l'une avec photo = :photo, l'autre sans.

Re: Modifier ou ajouter une photo ds une bdd avec un UPDATE

Posté : 16 févr. 2017, 21:21
par yoann38
En faisant un if empty sur $namefile ?

genre ;
if (!empty($namefile)) {
$modif = $bdd->prepare("UPDATE loisirs SET id_region = :id_region, id_departements = :id_departements, id_type_loisirs = :id_type_loisirs, photo = :photo, titre = :titre,  date_debut_sortie = :date_debut_sortie, date_fin_sortie = :date_fin_sortie, description = :description, phone = :phone,  email = :email, website = :website, street = :street, postcode = :postcode, city = :city, price = :price WHERE id_loisirs =".$idAnn);
				 
				 	//conversion de la date debut du format fr(jj:mm:aaaa hh:mm:ss) en format us(aaaa-mm-jj hh:mm:ss)'];
					$date = DateTime::createFromFormat('d/m/Y', $_POST['date_debut_sortie']);
					$date_debut = $date->format('Y-m-d H:i:s');
					$date = DateTime::createFromFormat('d/m/Y', $_POST['date_fin_sortie']);
					$date_fin = $date->format('Y-m-d H:i:s');

                   
                  $modif->execute(array(
                  'id_region'=>regionIdByDepartement($departement),
			  	  'id_departements'=> $departement,
                  'id_type_loisirs' => $_POST['type_loisirs'],
				  'photo' => $namefile,
                  'titre' => $_POST['titre'],
                  'date_debut_sortie'=>$date_debut,
          		  'date_fin_sortie'=>$date_fin,
                  'description' => $_POST['description'],
                  'phone' => $_POST['phone'],
                  'email' => $_POST['email'],
                  'website' => $_POST['website'],
                  'street' => $_POST['street'],
                  'postcode' => $_POST['postcode'],
                  'city' => $_POST['city'],
                  'price' => $_POST['price']
                  ));
				  
				  unset($_POST);
				  
//
puis un else sans le champ photo ?
c'est ça ?


EDIT; J'ai testé avec un if(!empty($namefile)) {
Ca marche mais je trouve le code lourd pour un champ car maintenant en gros j'ai 2 fois le meme UPDATE sauf une foi avec le champ photo et une fois sans ....
Mais merci c'était assez évident pour le que le tout fonctionne en tt cas

Re: Modifier ou ajouter une photo ds une bdd avec un UPDATE

Posté : 17 févr. 2017, 08:28
par manoaratefy
Bonjour!

Si vous trouvez le code lourd, je propose ceci. D'abord, on crée la requête SQL dans une variable. On y insère ensuite (ou non) le champ photo.

Voici un bout de code (que je n'ai pas encore testé mais qui risque de vous inspirer) :
$champs = array('id_region', 'id_departements', 'id_type_loisirs', 'titre', 'date_debut_sortie', 'date_fin_sortie', 'description', 'phone', 'email', 'website', 'street', 'postcode', 'city', 'price');
if (!empty($namefile)) { $champs[] = 'photo'; }

if (count($champs) > 0) {
    foreach ($champs as $champ) {
        $sql_champs[] = $champ.' = : '.$champ;
    }
}
$sql_champs = implode(', ', $sql_champs);

$sql = 'UPDATE loisirs SET '.$sql_champs.' WHERE id_loisirs ='.$idAnn;
$modif = $bdd->prepare($sql);

$values = array(
    'id_region'=>$departement,
    'id_departements'=> regionIdByDepartement($departement),
    'id_type_loisirs' => $_POST['type_loisirs'],
    // ... bla bla
);
if (!empty($namefile)) { $values[] = array('photo' => $namefile); }

$modif->execute($values);
Corrigez-moi si j'ai fait des erreurs. :oops: