Bonjour,
S'ils vous plaît je suis entrain de développer un site web pour les annonces des voitures , alors on remplit un formulaire pour les infos de la voiture , et il faut aussi télécharger l'image de la voiture, et j'arrive pas à faire ceci , veuillez m'aider s'ils vous plaît.
comment faire télécharger une image depuis un formulaire et puis l'inserer dans la base de donnée et enfin l'afficher.
Merci d'avance

8 réponses


Lartak
Réponse acceptée

Bonjour.
Tu peux tout simplement regarder le début de Tutoriel Vidéo PHP » Gestion d'images/Création d'une galerie, sauf qu'au lieu de juste déplacer l'image dans un dossier du serveur, de sauvegarder également le chemin et le nom du fichier en base de données, comme te l'a suggéré SLK.

Nous ne te donnons actuellement que les bases techniques pour ce que tu veux faire, à toi ensuite d'adapter selon ce que tu veux faire exactement et venir (toujours sur ce même post) pour nous demander de l'aide si nécessaire pour ce qui concerne ce sujet.

Sanae
Auteur
Réponse acceptée

Oui, pardon car je suis entrain de voir le tuto que vous me avez proposez et j'ai fait des modifications dans le code , alors les images ne seront pas stockées dans la base de données , mais dans un dossier et puis on pourra afficher tous les images , en effet mon exo est de faire afficher chaque image avec son nom et ses autres informations , on peut faire cela si on insére le chemin de l'image dans la base de données (chaque enregistrement aura son image ). Mais je vais essayer d'affcher les infos + l'image correspondante.
Merci beaucoup pour tes réponses , le tuto m'a énormément aidé.
@Lartak

Salut,

il faut aussi télécharger l'image de la voiture, et j'arrive pas à faire ceci

Regarde du coté de <input type="file">
et move_uploaded_file

puis l'inserer dans la base de donnée

C'est POSSIBLE d'insérer une image en base de données, mais on ne le fait JAMAIS. (prend trop de place)
Ce qu'on fait c'est qu'on enregistre en base de données le CHEMIN de cette image.
donc un INSERT ou UPDATE d'une chaine de caractère

et enfin l'afficher

avec la balise <img>

Si tu coinces toujours,
poste le code que tu as fait.
C'est mieux pour nous de résoudre/corriger un code "faux" plutôt que de fournir du code tout fait.

Sanae
Auteur
Salut,
Merci SLK , merci d'avoir répondu à chaque fois je pose un problème
En effet j'ai essayé de faire ce que vous me proppsez " enregistrer en base de données le CHEMIN de l' image." mais appremment je n'ai pas bien écris le bout de code nécessaire
et j'ai vu aussi des tutoriels , ils utlisent le javascript mais il ne marchait pas avec mon code .
//Dans mon formulaire html
<p> select the file you want to upload </p>
<input type="file" name ="photos"><br><br>
  <? php
  $image=basename($_FILES['photos']['name']);

$image=str_replace(' ','|',$image);
$tmppath="C:\wamp64\www\Voiture2".$image;
if(isset($_FILES['photos'])){
$dossier = 'upload/';
@$photos = basename($_FILES['photos']['name']);
if(move_uploaded_file($_FILES['photos']['tmp_name'], $dossier . $photos)) {
echo "Upload effectué avec succès";
}
else {
echo 'echec de l\'upload!';
}
}

?>
j'ai réussi à insérer les autres informations du formulaire sauf le chemin de la photos reste toujours null
j'ai encore une question si vous le me permettez , quel doit être le type de la colonne image dans la base de donnée?

et j'ai vu aussi des tutoriels , ils utlisent le javascript mais il ne marchait pas avec mon code .

Celui que je te propose n'utilise pas le javascript.

j'ai réussi à insérer les autres informations du formulaire sauf le chemin de la photos reste toujours null

Si tu nous montrait le code complet, nous pourrions mieux t'aider, car là nous n'avons que des bribes de code et par conséquent nous ne pouvons pas voir où tu as pu faire une erreur.

j'ai encore une question si vous le me permettez , quel doit être le type de la colonne image dans la base de donnée?

De type string (VARCHAR).

Sanae
Auteur

@Lartak
Oui voilà le code :( il est long , je sais ;) , je m'exécuse).

<html>
<head>
<title>POSTER DES ANNONCES</title>
<style type="text/css"
fieldset{
padding-top: 20px;
background-color: lavender ;
text-align:right;
display: inline;
}

</style>

</head>
<body>
<center>
<form method="post" action="insereannonce.php" enctype="multipart/form-data">
<fieldset>
<input type="radio" name="p" value ="Particulier"> Particulier <input type="radio" name="p" value ="Professionel"> Profesionnel<br><br>
<label>Votre nom:</label>
<input type="text" name="nom" > <br><br>
<label>Email:</label>
<input type="text" name="email" > <br><br>
<label>Téléphone</label>
<input type="text" name="telephone" > <br><br>
<label>Ville: </label>
<select name="choix">
<option value="">Ville</option>
<option value="Rabat">Rabat</option>
<option value="Casablanca">Casablanca</option>
<option value="Agadir">Agadir</option>
<option value="Marrakech">Marrakech</option>
<option value="Tanger">Tanger</option>
<option value="Fez">Fez</option>
<option value="Ouejda">Ouejda</option>
</select>
<select name="choix*">
<option value="">--Quartier--</option>
<option value="">--Rabat--</option>
<option value="Agdal">Agdal</option>
<option value="Akkari">Akkari</option>
<option value="Yacoub El Mansour">Yacoub El Mansour</option>
<option value="Massira">Massira</option>
<option value="Suissi">Suissi</option>

<option value="">--Casablanca--</option>
<option value="Maarif">Maarif</option>
<option value="Bourgone">Bourgon</option>
<option value="Hay El Mohammadi">Hay El Mohammadi</option>
<option value="Elwelfa">Elwelfa</option>
<option value="Derb lkabir">Derb lkabir</option>

<option value="">--Agadir--</option>
<option value="Hay El Farah">Hay El Farah</option>
<option value="HAY El Mohammadie">HAY El Mohammadi</option>
<option value="Hay Ryad Salam">Hay Ryad Salam</option>
<option value="Cité El Houda">Cité El Houda</option>
<option value="Les amicales">Les amicales</option>

<option value="">--Marrakech--</option>
<option value="Maarif">Guéliz</option>
<option value="Bourgone">L'Hivernage</option>
<option value="Tanneries">Tanneries</option>
<option value="Elwelfa">La palmerie</option>

</select><br><br>

<label>Catégorie: </label>
<select name="choix1">
<option value="Mini">Mini</option>
<option value="Economique">Economique</option>
<option value="Compacte">Compacte</option>
<option value="Intermediare">Intermediare</option>
<option value="Routiere">Routiere</option>
<option value="Monospace">Monospace</option>
<option value="Luxe">Luxe</option>
<option value="Carbriolet">Cabriolet</option>
<option value="SUV">SUV</option>
</select><br><br>
<label> Sous-catégorie: </label>
<select name="choix2">
<option value="">--Marque--</option>
<option value="VOLVO">VOLVO</option>
<option value="TOYOTA">TOYOTA</option>
<option value="MORGAN">MORGAN</option>
<option value="OPEL">OPEL</option>
<option value="NISSAN">NISSAN</option>
<option value="MERCEDES">MERCEDES</option>
<option value="JEEP">JEEP</option>
<option value="JAGUAR">JAGUAR</option>
<option value="FORD">FORD</option>
</select><br><br>
<select name="choix3">
<option value="">--Année--</option>
<option value="2017">2017</option>
<option value="2016">2016</option>
<option value="2015">2015</option>
<option value="2014">2014</option>
<option value="2014">2013</option>
<option value="2012">2012</option>
<option value="2011">2011</option>
<option value="2010">2010</option>
<option value="2009">2009</option>
<option value="2008">2008</option>
<option value="2007">2007</option>
<option value="2006">2006</option>
<option value="2005">2005</option>
<option value="2004">2004</option>
<option value="2003">2003</option>
<option value="2002">2002</option>
<option value="2001">2001</option>
<option value="2000">2000</option>
</select>
<select name="choix**">
<option value="">--Kilomètrage--</option>
<option value="50 000 km">50 000 km</option>
<option value="70 000 km">70 000 km</option>
<option value="80 00 Km">80 00 Km</option>
<option value="90 000 km">90 000 km</option>
<option value="100 000 km">100 000 km</option>
<option value="120 000Km">120 000Km</option>
<option value="140 000Km">140 000Km</option>
<option value="150 000 km">150 000 km</option>
<option value="170 000 Km">170 000 Km</option>
<option value="190 000Km">190 000Km </option>
<option value="200 000 Km">200 000 Km</option>
</select><br><br>

<select name="choix4">
<option value="">--Type de carrosserie--</option>
<option value="Monocorps/monovolume">Monocorps/monovolume</option>
<option value="Bicorps/bivolume">Bicorps/bivolume</option>
<option value="Tricorps/trivolume">Tricorps/trivolume</option>
</select>
<select name="choix41">
<option value="">--Couleur--</option>
<option value="Noir">Noir</option>
<option value="Bleu">Bleu</option>
<option value="Blanc">Blanc</option>
<option value="Antivol">Antivol</option>
<option value="Gris">Gris</option>
<option value="Rouge">Rouge</option>
</select>
<br><br>

<select name="choix5">
<option value="">--Carburant--</option>
<option value="VOLVO">Car</option>
<option value="Essence">Essence</option>
<option value="Diesel">Diesel</option>
<option value="Electrique">Electrique</option>
</select>
<select name="choix51">
<option value="">--Transmission--</option>
<option value="">2</option>
<option value="">5</option>
<option value="">6</option>
<option value="">55</option>
<option value="">58</option>
<option value="">58</option>
<option value="">56</option>
<option value="">26</option>
<option value="">25</option>
</select>
<br><br>
<select name="choix6">
<option value="">--Cylindrée du moteur--</option>
<option value="4 cylindres en ligne">4 cylindres en ligne</option>
<option value="6 cylindres en ligne">6 cylindres en ligne</option>
<option value="8 cylindres en ligne">8 cylindres en ligne</option>
<option value="8 cylindres en V">8 cylindres en V</option>
<option value="cylindre à plats">cylindre à plats</option>
</select>

 <select name="choix61">

<option value="">--Puissance fiscale--</option>
<option value="1 CV">1 CV</option>
<option value="2 CV">2 CV</option>
<option value="3 CV">3 CV </option>
<option value="4 CV">4 CV </option>
<option value="5 CV">5 CV </option>
<option value="6 CV">6 CV </option>
<option value="7 CV">7 CV </option>
<option value="8 CV">8 CV </option>
<option value="9 CV">9 CV </option>
</select>

<br><br>
<select name="choix7">
<option value="">--Etat douanier--</option>
<option value="Neuve">Neuve</option>
<option value="Utilisé">Utilisée</option>
</select><br><br>

<label>Prix:</label>
<input type="text" name="text2" > DH<br><br>
<label>Description de l'annonce:</label>
<textarea name="text" rows="7" cols= "40"></textarea><br><br>
<p> select the file you want to upload </p>
<input type="file" name ="photos"><br><br>
</select><br><br>

<input type="submit" name="Ajouter" value="Ajouter"> <br><br>
</fieldset>
<br><br>
</form>
</center>
</body>
</html>

<?php

$conn = new PDO('mysql:host=localhost;dbname=voiture2','root','');
if ( isset($_POST['nom']) && isset($_POST['email']) && isset($_POST['telephone']) && isset($_POST['choix']) && isset($_POST['choix*']) && isset($_POST['choix1'])
&& isset($_POST['choix2']) && isset($_POST['choix3']) && isset($_POST['choix**']) && isset($_POST['choix4']) && isset($_POST['choix41']) && isset($_POST['choix5'])
&& isset($_POST['choix51']) && isset($_POST['choix6']) && isset($_POST['choix61']) && isset($_POST['choix7']) && isset($_POST['text2'])&& isset($_POST['text']) && isset($_POST['p']) ) {

$sql= "INSERT INTO personne(Nom,Email,Telephone,Ville,Quartier,categorie,marque,annee,kilometrage,carroserie,couleur,carburant,transmission,cylindre,P_piscale,

etat_douniaer,description,prix,type_post) VALUES('".($_POST['nom'])."','".($_POST['email'])."','".($_POST['telephone'])."','".($_POST['choix'])."','".($_POST['choix*'])."','".($_POST['choix1'])."','".($_POST['choix2'])."'
,'".($_POST['choix3'])."','".($_POST['choix**'])."','".($_POST['choix4'])."','".($_POST['choix41'])."','".($_POST['choix5'])."','".($_POST['choix51'])."'
,'".($_POST['choix6'])."','".($_POST['choix61'])."','".($_POST['choix7'])."','".($_POST['text2'])."','".($_POST['text'])."','".($_POST['p'])."')";
;
$res=$conn->query($sql);}

$sql= " SELECT Nom,Email,Telephone,Ville,Quartier , categorie,marque,annee,kilometrage,carroserie,couleur,carburant,transmission,cylindre,P_piscale,
etat_douniaer,prix,description,type_post ,photos FROM personne "
$sth=$conn->query($sql);

$result= $sth->fetchAll(PDO::FETCH_ASSOC);
echo "<center><table border=4>";
echo "<tr> <th>Nom</th> <th>Email</th> <th>Telephone</th> <th>Ville</th> <th>Quartier</th> <th>categorie</th> <th>marque</th> <th>annee</th>
<th>Kilometrage</th> <th>Carosserie</th> <th>Couleur</th> <th>Carburant</th> <th>Transmission</th> <th>Cylindre</th> <th>P_piscale</th>
<th>Etat_douanier</th> <th>Prix</th> <th>Description</th> <th>Type_post</th> </tr>";

echo "</table></center>";

foreach($result as $row){

echo "<tr>";

echo "<td>".$row['Nom']."</td>";
echo "<td>".$row['Email']."</td>"; 
echo "<td>".$row['Telephone']."</td>";
echo "<td>".$row['Ville']."</td>";
echo "<td>".$row['Quartier']."</td>";
echo "<td>".$row['categorie']."</td>";
echo "<td>".$row['marque']."</td>";
echo "<td>".$row['annee']."</td>";
echo "<td>".$row['kilometrage']."</td>";
echo "<td>".$row['carroserie']."</td>";
echo "<td>".$row['couleur']."</td>";
echo "<td>".$row['carburant']."</td>";
echo "<td>".$row['transmission']."</td>";
echo "<td>".$row['cylindre']."</td>";
echo "<td>".$row['P_piscale']."</td>";
echo "<td>".$row['etat_douniaer']."</td>";
 echo "<td>".$row['prix']."</td>";  
 echo "<td>".$row['description']."</td>";
echo "<td>".$row['type_post']."</td>";

echo "</tr>";

}
$image=basename($_FILES['photos']['name']);
$image=str_replace(' ','|',$image);
$tmppath="C:\wamp64\www\Voiture2".$image;
if(isset($_FILES['photos'])){
$dossier = 'upload/';
@$photos = basename($_FILES['photos']['name']);
if(move_uploaded_file($_FILES['photos']['tmp_name'], @$dossier . @$photos)) {
echo "Upload effectué avec succès";
print_r($_FILES);
}
else {
echo 'echec de l\'upload!';
}
}

?>
Ici je stocke l'image dans un dossier nommé upload , le téléchargement s'effectue fait avec succés , mais je sais pas comment afficher l'image.

J'ai beau relire ton code à plusieurs reprises, je ne vois absolument à aucun moment la sauvegarde du chemin vers le fichier an base de données.
Juste pour information au passage, tu peux remplacer tes :

if (isset($_POST['nom']) && isset($_POST['email']) && isset($_POST['telephone']) /* etc ... */ )

Par :

if (isset($_POST['nom'], $_POST['email'], $_POST['telephone'], /* etc ... */))

C'est exactement la même chose, mais la seconde méthode est plus courte et moins répétitive.

Désolé,
je ne sais pas si c'est mon affichage qui bug ou quoi mais chez moi, je vois le code terriblement mal présenté.
J'ai vraiment trop la flemme de lire ça.