[RESOLU] Insertion formulaire photo

Eléphant du PHP | 75 Messages

15 juin 2014, 10:14

Bonjour voici le petit problème du jour ;)
Voici l'erreur que j'ai après avoir envoyé le formulaire:
L'envoi a bien été effectué !
Notice: Undefined variable: photo in /home/users6/l/lasortie/www/mon_profil_client.php on line 191
Problème lors de l'insertion


J'ai un formulaire que voici:
<form  action="mon_profil_client.php" method="post" enctype="multipart/form-data" onSubmit="return(VerifForm(this))">
  
// code blabla

          <label>Photo</label>
      <input  name="photo" type="file">
       
   // code blabla

    <input class="btn-u" type="submit" value="ENVOYER">
    </form>
     
Et le php que voici:
  
<?php 

//blablabla

$req = $bdd->prepare('INSERT INTO loisirs ( id_departements, id_type_loisirs, photo, titre, sous_titre, date_debut_sortie, date_fin_sortie, description, phone, email, website, street, postcode, city, price)
 
  VALUES (:id_departements, :id_type_loisirs, :photo, :titre,
       :sous_titre, :date_debut_sortie, :date_fin_sortie, :description,
    :phone, :email, :website, :street, :postcode, :city, :price )');
   
   
   
     $retour= $req->execute(array(
          'id_departements'=>$_POST['departements'],
          'id_type_loisirs'=>$_POST['type_loisirs'],
          'photo'=>$photo,
          'titre'=>$_POST['titre'],
          'sous_titre'=>$_POST['sous_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']
    ));
if( $retour ===false) echo "Problème lors de l'insertion";
 
// blablabla

?>
       

ViPHP
xTG
ViPHP | 7331 Messages

15 juin 2014, 10:25

Un upload de fichier ne se fait pas en aussi peu de ligne de code. ;)
Pour la petite histoire de l'erreur il t'indique que la variable $photo n'existe pas.
Ce qui est tout à fait vrai.
Le retour d'un formulaire en action POST est contenu dans l'array $_POST.
Pour les input de type file on les retrouve cependant dans $_FILES.

Voici un bon cours sur comment uploader un fichier : http://antoine-herault.developpez.com/t ... hp/upload/

Eléphant du PHP | 75 Messages

15 juin 2014, 10:55

Après avoir suivi ton tuto qui est d'ailleur plus complet que celui de openclassroom.
J'ai une petite erreur qui est :
Notice: Array to string conversion in /home/users6/l/lasortie/www/mon_profil_client.php on line 213

PHP:
// code .....  

$dossier = 'img/annonce/';
$fichier = basename($_FILES['photo']['name']);
$taille_maxi = 200000;
$taille = filesize($_FILES['photo']['tmp_name']);
$extensions = array('.png', '.gif', '.jpg', '.jpeg');
$extension = strrchr($_FILES['photo']['name'], '.'); 
//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
     $erreur = 'Veuillez vérifier que le format de votre photo soit de type png, gif, jpg, jpeg, ';
}
if($taille>$taille_maxi)
{
     $erreur = 'Le fichier est trop gros...';
}
if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
     //On formate le nom du fichier ici...
     $fichier = strtr($fichier, 
          'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
          'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
     $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
     if(move_uploaded_file($_FILES['photo']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
     {
          echo 'Téléchargement effectué avec succès !';
     }
     else //Sinon (la fonction renvoie FALSE).
     {
          echo 'Echec du téléchargement !';
     }
}
else
{
     echo $erreur;
}

$req = $bdd->prepare('INSERT INTO loisirs ( id_departements, id_type_loisirs, photo, titre, sous_titre, date_debut_sortie, date_fin_sortie, description, phone, email, website, street, postcode, city, price)
 
  VALUES (:id_departements, :id_type_loisirs, :photo, :titre,
       :sous_titre, :date_debut_sortie, :date_fin_sortie, :description,
    :phone, :email, :website, :street, :postcode, :city, :price )');
   
   
   
     $retour= $req->execute(array(
          'id_departements'=>$_POST['departements'],
          'id_type_loisirs'=>$_POST['type_loisirs'],
          'photo'=>$_FILES['photo'],
          'titre'=>$_POST['titre'],
          'sous_titre'=>$_POST['sous_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']
    ));
if( $retour ===false) echo "Problème lors de l'insertion";
       
}else{//le tableau ne contient
 echo "<p> renseignez les champs vides</p>";
}
// code .....
Le formulaire:
   

 <form  action="mon_profil_client.php" method="post" enctype="multipart/form-data" onSubmit="return(VerifForm(this))">

<label>Photo</label>
<input  name="photo" type="file"/> 
       
<input class="btn-u" type="submit" value="ENVOYER">
</form>
     

ViPHP
xTG
ViPHP | 7331 Messages

15 juin 2014, 12:01

$_FILES['photo'] est un array, or toi je supposes que tu souhaites stocker le chemin vers le fichier uploadé.
C'est donc le nom du fichier qu'il faut insérer $_FILES['photo']['name'].
Mais comme tu as appliqué une protection contre les caractères accentués il faut utiliser $fichier qui est le nom final du fichier. :)

Eléphant du PHP | 75 Messages

15 juin 2014, 12:09

Merci beaucoup problème résolu