Insérer image php bdd

Eléphanteau du PHP | 11 Messages

06 oct. 2021, 12:34

Bonjour,

Je sais que c'est une question courante mais j'ai beau chercher un peu partout je ne trouve pas de solution à mon problème...
J'essaye d'insérer une image pour simuler un utilisateur sur un site que je crée, et je n'arrive pas à insérer une image.

J'arrive à insérer le nom de l'image à travers ($_POST) mais pas avec ($_FILES). Autrement dit, quand j'insère une image, je la retrouve bien dans ma base de données sous forme de "exemple.jpg" mais elle ne s'affiche pas sur mon site.
Quand j'insère une URL d'image par contre, j'arrive à afficher l'image sur mon site.

Je me dis alors que le problème vient du fait que ma base de données n'arrive pas à afficher des images qui ne sont pas enregistrées dans le bon dossier. J'ai alors essayé de l'enregistrer correctement mais je n'y arrive pas...

Merci d'avance pour votre aide
<form method="POST" action="" enctype="multipart/form-data">
 <div class="form-outline mb-4">
 <input class="form-control form-control-lg" name="image" type="file"/>
 <div class="small text-muted mt-2">Choisissez une image pour votre profil</div>
 </div>
<div class="button group" style="text-align:center; margin-bottom:25px">
<a class="btn btn-primary btn-block btn-lg gradient-custom-4" href="index.php">Retour</a>
<button type="submit" class="btn btn-success btn-block btn-lg gradient-custom-4" name="validate">Mettre à jour</button>
 </div>
 </form>

   //Validation du formulaire
   if(isset($_POST['validate'])){

    //Récupérer l'identifiant de l'utilisateur
    if(isset($_GET['id']) AND !empty($_GET['id'])){

    //L'id de l'utilisateur
    $idOfUser = $_GET['id'];
     
        //Les données de l'user
        $user_image = ($_FILES['image']['tmp_name']);
        move_uploaded_file($_FILES['image']['tmp_name'], '' .$_FILES['image']['name']);

            
            //Mettre à jour l'utilisateur dans la bdd
            $insertUserOnWebsite = $bdd->prepare('UPDATE users SET  image = ? WHERE id = ?');
            $insertUserOnWebsite->execute(
                array( 
                    $user_image,
                    $idOfUser
                ));
        
        }else{
            $errorMsg = "L'utilisateur existe déjà sur le site";
        }
    }

Mammouth du PHP | 2703 Messages

06 oct. 2021, 12:42

move_uploaded_file($_FILES['image']['tmp_name'], '' .$_FILES['image']['name']);
donc le nom de l'image dans le répertoire est $_FILES['image']['name']

$user_image = ($_FILES['image']['tmp_name']);
donc le nom de l'image sauvé dans le bdd est $_FILES['image']['tmp_name']

Eléphanteau du PHP | 11 Messages

06 oct. 2021, 12:44

move_uploaded_file($_FILES['image']['tmp_name'], '' .$_FILES['image']['name']);
donc le nom de l'image dans le répertoire est $_FILES['image']['name']

$user_image = ($_FILES['image']['tmp_name']);
donc le nom de l'image sauvé dans le bdd est $_FILES['image']['tmp_name']
Je suis désolé je ne comprend pas ce que tu veux dire 8-|

edit: j'ai peut être compris, tu veux dire que j'enregistre dans ma bdd un nom temporaire ?

edit 2 j'ai trouvé !!!!!!!!!!!!!!!!! Il suffisait de rempacer le premier tmp_name par name !!!

Merci!!

Invité
Invité n'ayant pas de compte PHPfrance

06 oct. 2021, 14:56

Bon alors finalement j'ai deux problèmes. Le premier c'est que j'ai ajouté un dossier de réception nommé "avatar" pour stocker les photos, et depuis qu'elles sont stockées dedans, je n'arrive plus à les afficher sur le site, malgré le fait qu'elles soient bien entrées dans ma base de donnée et que je les récupère avec l'ID de l'utilisateur :/

Le problème c'est que je n'arrive pas à appliquer des filtres pour sécuriser les images ... j'essaye avec le bout de code en dessous mais peu importe ce que je rentre, tout est accepté :/
        $user_image = ($_FILES['image']['name']);
        move_uploaded_file($_FILES['image']['tmp_name'], 'avatars/' . $_FILES['image']['name']);
        $extension = pathinfo($user_image, PATHINFO_EXTENSION);
       
        if ($extension != "jpg" && $extension != "jpeg" && $extension != "png" && $extension != "gif") {
        }else{
            $errorMsg = "Extension non valide";
        };