Image dans base de donnée

Par Maxine99, il y a 6 ans


Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

je veux prendre une photo, et l'inserer à ma base de donnée pour la recuperer sur les profils de chacun.
Ca c'est ma page de modiffication de profil: tout fonctionne sauf la photo

<?php session_start(); try { $bdd = new PDO('mysql:host=localhost;dbname=dbprotect', 'root', ''); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);; } catch (Exception $e) { die('Erreur : ' . $e->getMessage()); } if(isset($_SESSION['id_user'])) { $req= $bdd->prepare("SELECT * FROM membres WHERE id_user= ?"); $req ->execute(array($_SESSION['id_user'])); $userinfo= $req->fetch(); /*remplacer login (nom d'utilisateur)*/ if(isset($_POST['new_login']) AND !empty($_POST['new_login']) AND $_POST['new_login'] != $userinfo['login']) { $new_login = htmlspecialchars($_POST['new_login']); $insert_login = $bdd->prepare("UPDATE membres SET login = ? WHERE id_user = ?"); $insert_login->execute(array($new_login, $_SESSION['id_user'])); header('Location: profil.php?id_user='.$_SESSION['id_user']); } /*remplacer mail*/ if(isset($_POST['new_mail']) AND !empty($_POST['new_mail']) AND $_POST['new_mail'] != $userinfo['mail']) { $new_mail = htmlspecialchars($_POST['new_mail']); $insert_mail = $bdd->prepare("UPDATE membres SET mail = ? WHERE id_user = ?"); $insert_mail->execute(array($new_mail, $_SESSION['id_user'])); header('Location: profil.php?id_user='.$_SESSION['id_user']); } /*remplacer mot de passe si les deux sont égaux */ if(isset($_POST['new_pass']) AND !empty($_POST['new_pass']) AND isset($_POST['new_pass2']) AND !empty($_POST['new_pass2'])) { $new_pass= sha1($_POST['new_pass']); $new_pass2= sha1($_POST['new_pass2']); if($new_pass==$new_pass2) { $insert_pass = $bdd->prepare("UPDATE membres SET pass = ? WHERE id_user = ?"); $insert_pass->execute(array($new_pass, $_SESSION['id_user'])); header('Location: profil.php?id=_user'.$_SESSION['id_user']); } else { $msg = "Vos mots de passe ne correspondent pas!"; } } if(isset($_FILES['photo_profil']) AND !empty($_FILES['photo_profil']['name'])) { /*2 mega octet */ $tailleMax= 2097152; $extensionsValides= array('jpg', 'jpeg', 'gif', 'png'); if($_FILES['photo_profil']['size']<=$tailleMax) { /* strtolower= mettre en minuscule au cas où "JPeg" substr= ignorer premier caractere (ici 1) strrchr=prendre extension fichier avec '.' */ $extensionUpload = strtolower(substr(strrchr($_FILES['photo_profil']['name'], '.'),1)); if(in_array($extensionUpload, $extensionsValides)) { $chemin= "membres/photo_profil/".$_SESSION['id_user'].".".$extensionUpload; $resultat = move_uploaded_file($_FILES['photo_profil']['tmp_name'], $chemin); if($resultat) { $updatephoto=$bdd->prepare("UPDATE membres SET photo_profil = ? WHERE id_user = ?"); $updatephoto ->execute(array( 'photo_profil' => $_SESSION['id_user'].".".$extensionUpload , 'id_user'=> $_SESSION['id_user'] )); } else { echo'Erreur lors du transport de vote fichier '; } } else { echo'Votre photo de profil doit être du format jpg, jpeg, gif, png '; } } else { echo'Votre photo de profil ne doit pas dépasser 2Mo'; } } if(isset($_POST['new_login']) AND $_POST['new_login'] == $userinfo['login']) { header('Location: profil.php?id_user='.$_SESSION['id_user']); } ?> <html> <head> <title> Profil </title> <link rel = "stylesheet" type="text/css" href="css/visuel_modif_profil.css" /> </head> <body> <form method="POST" action="" enctype="multipart/form-data"> <label> Nom d'utilisateur: </label> <input type="text" name="new_login" placeholder="Nom utilisateur" value=<?php echo $userinfo['login']?> /> <br /> <br /> <label> Mail: </label> <input type="text" name="new_mail" placeholder="mail"value=<?php echo $userinfo['mail']?> /> <br /> <br /> <label> Nouveau Mot de passe: </label> <input type="password" name="new_pass" placeholder="Mot de passe" /> <br /> <br /> <label> Confimation: </label> <input type="password" name="new_pass2" placeholder="Confirmation du mot de passe"/> <br /> <br /> <input type="submit" value="Mettre à jour"/> <br /> <br /> </form> <p><a href="profil.php?id_user=".<?php $_SESSION['id_user']?> ."> <strong> Ne rien changer et retourner au profil <a></p> <?php if(isset($msg)) {echo $msg; } ?> <br /> <a href='deconnexion.php'> Se déconnecter </a> </div> </body> </html> <?php } else {header("Location:ConnexionDepart.php"); exit; } ?>

Ce que je veux

Donc je mets l'image dans mon dossier membres puis photo de profil en lui donnant le nom: "id de la session"."extension"
Ce nom je le mets dans ma base de donnée pour qu'on puisse le retrouver facilement

Ce que j'obtiens

L'image se mets bien dans mes dosser et a le bon nom, SAUF! qu'ellle n'apparait pas dans ma base de donnée... Qu'est ce qui cloche?

4 réponses

Carouge10, il y a 6 ans

Bonjour,

  • Pas de htmlspecialchar sur les données entrées en bdd
  • Pour plus de sécurité, passe plutôt par les fonctions password_hash et password_verify pour le mot de passe
  • Pour la photo, tu utilises des paramètres non nommés dans la requête (?) alors que tu les nommes dans le execute.
Maxine99, il y a 6 ans

Bonjour!
Je devrais le placer où? comme pour des $-POST classiques mais du coup sur le $FILES?
D'accord! Je vais cherche comment çamarche, merci!
En fait dans le code de base ils etaient nommé, mais comme je n'arrivais pas à les rentrer je les ai remplacé par "?" dans la requete pour voir si ca changait quelque chose, j'ai oublie de remodifier après. Ca ne change rien au resultat.

$updatephoto=$bdd->prepare("UPDATE membres SET photo_profil = :photo_profil WHERE id_user = :id_user"); $updatephoto ->execute(array( 'photo_profil' => $_SESSION['id_user'].".".$extensionUpload , 'id_user'=> $_SESSION['id_user'] ));
Lartak, il y a 6 ans

Bonsoir.
Il n'y a aucun input dans ton formulaire correspondant à ton upload de fichier.
Autre chose, ton lien pour la page profil.php, tu devrais le corriger au niveau PHP.

Maxine99, il y a 6 ans

C´est a dire le corriger niveau php? Ou est mon erreur?