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


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
Auteur

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'] ));

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
Auteur

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