Stocker l'url d'une image dans une base de données HELP :/

Petit nouveau ! | 3 Messages

18 mars 2016, 14:20

Bonjour, je fais appele a vous car j'ai un petit problème, je veux uploader l'url de mon image direct dans la base de données, tout marche bien y'a aucun soucis le problème c'est que l'image ne s'upload pas sur le serveur alors que la table mysql marche bien.

page ajout.php :

Code : Tout sélectionner

<form method="post" action="upload.php" enctype="multipart/form-data"> <label for="mon_fichier">Photo à envoyer : </label><br /> <input type="hidden" name="MAX_FILE_SIZE" value="1048576" /> <input type="file" name="photo1" id="photo1" /><br /> <p> <label for="titre">Titre : <input type="text" name="titre" value="" size="30" maxlength="100"/> </label> </p> <p> <label for="description"> description : <input type="text" name="description" value="" size="33" maxlength="50"/> </label> </p> <p> <label for="age"> age : <input type="text" name="age" value="" size="33" maxlength="50"/> </label> </p> <p> <label for="origine"> origine: <input type="text" name="origine" value="" size="33" maxlength="50"/> </label> </p> <p> <label for="num"> Num : <input type="text" name="num" value="" size="33" maxlength="50"/> </label> </p> <p> <label for="ville"><strong> ville</strong> </label> <br/><br/> <textarea name="ville" id="ville" rows="10" cols="100"> </textarea> </p> <p> <label for="cp"> <strong> cp : </strong> </label> <br/> <br/> <textarea name="cp" id="cp" rows="10" cols="20"> </textarea> </p> <p> <label for="statut"> <strong> statut : </strong> </label> <br/> <br/> <textarea name="statut" id="statut" rows="10" cols="20"> </textarea> </p> <p> <input type="submit" name="submit" value="Envoyer"/> <br/> </form>
et voici la page upload.php

Code : Tout sélectionner

<?php if(isset($_POST['titre'])&& isset($_POST['description']) && isset($_POST['age']) && isset($_POST['origine']) && isset ($_POST['num']) && isset($_POST['ville']) && isset($_POST['cp']) && isset($_POST['statut']) && isset ($_FILES['photo1'])) { if(isset($_FILES['photo1']) && $_FILES['photo1']['error']==0) { // Inscription de la photo uploadé dans le dossier bouquin move_uploaded_file($_FILES['photo1']['tmp_name'], 'http://xxxxxxxxxxxx.fr/xxxxx/md/'.basename($_FILES['photo1']['name'])); echo 'L\'envoi a bien été effectué'; } try{ // Connexion à la BDD $bdd=new PDO('mysql:host=xxx;dbname=xxxx', 'xxxx','xxxxxxxxxxxx'); } catch(Exception $e){ die ('Erreur:'.$e->getMessage()); } // Insertion des données envoyées par l'internaute grâce à une requête préparée $stockage='http://xxxxxxxxxxxx.fr/xxxxx/md/'.$_FILES['photo1']['name'].''; $insertion=$bdd->prepare('INSERT INTO annonces(titre, description, age, origine, num, ville, cp, statut, photo1) VALUES (:titre, :description, :age, :origine, :num, :ville, :cp, :statut, :photo1)'); $insertion->execute(array( 'titre' => $_POST['titre'], 'description' => $_POST['description'], 'age' => $_POST['age'], 'origine' => $_POST['origine'], 'num' => $_POST['num'], 'ville' => $_POST['ville'], 'cp' => $_POST['cp'], 'statut' => $_POST['statut'], 'photo1' => $stockage )); if($insertion==true) { echo '<p> Les données ont bien été enregistrées</p>'; } else { echo 'Erreur dans l\'enregistrement des données </p>'; } $insertion->closeCursor(); // déconnexion } ?>
Merci de votre aide :D

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 mars 2016, 15:00

Bonjour,

Je pense que ton problème est en amont de la base de données mais à l'envoi du fichier. Celui-ci est-il accessible à l'adresse http://xxxxxxxxxxxx.fr/xxxxx/md/zzzzzz dans ton navigateur ? A mon avis ce n'est pas le cas et il faudrait vérifier le résultat du move_uploaded_file() pour pouvoir dire que l'opération a réussi ou non :)
En l'occurrence, ce dernier attend un chemin sur le serveur (relatif au fichier php ou absolu par rapport à la structure de fichier), pas une adresse url sur laquelle il ne peut pas écrire :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 3 Messages

18 mars 2016, 15:31

Ah oui merci a toi mon ami c'est partait :D Dernier petite chose car il reste un petit soucis c'est que l'image quand elle s'upload elle garde le nom quel a du coup des qu'ont upload une photo avec le meme nom ça affiche la premère image et c'est plutot galère ^^

Petit nouveau ! | 3 Messages

18 mars 2016, 15:33

Genre si je pouvais rajouter l'id ou le titre de l'annonce après le nom du fichier ça serait parfait :p

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 mars 2016, 18:12

En fait c'est toi qui donne le nom du fichier quand tu fais le move_upload_file() : tu le déplaces et le nomme en même temps.
Si tu utilises juste "$_FILES['photo1']['name']", le fichier conserve son nom d'origine. Tu peux simplement compléter celui-ci en ajoutant par exemple la date / heure d'upload dans le nom du fichier, par exemple :
move_uploaded_file($_FILES['photo1']['tmp_name'],
    '../md/' . date(Ymd-His) . basename($_FILES['photo1']['name']));
Si tu veux ajouter l'id qui lui est attribué en base, tu peux le faire également, mais comme tu ne connais pas celui-ci tant que l'INSERT n'a pas eu lieu, cela implique de re-modifier le nom du fichier (physiquement sur le serveur et dans l'enregistrement en base) une fois ton insertion effectuée :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...