Bonjour,

Voila je rencontre un petit problème avec mon code pour telecharger un image
j'ai fait un dossier membres et sous dossier avatar a la source du dossier php
et une nouvelle ligne avatar dans php admin .

Ce que je fais

<?php
session_start();
error_reporting(E_ALL);

$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
if (isset($_SESSION['id_membres'])) {
$requser = $bdd->prepare("SELECT * FROM membres WHERE id_membres = ?");
$requser->execute(array($_SESSION['id_membres']));
$user = $requser->fetch();
var_dump($_POST);
if (isset($_POST['newpseudo']) AND ! empty($_POST['newpseudo']) AND $_POST['newpseudo'] != $user['pseudo']) {
$newpseudo = $_POST['newpseudo'];
$insertpseudo = $bdd->prepare("UPDATE membres SET pseudo = ? WHERE id_membres = ?");
$insertpseudo->execute(array($newpseudo, $_SESSION['id_membres']));
header('Location: profil.php?id_membres=' . $_SESSION['id_membres']);
}
if (isset($_POST['newmail']) AND ! empty($_POST['newmail']) AND $_POST['newmail'] != $user['mail']) {
$newmail = $_POST['newmail'];
$insertmail = $bdd->prepare("UPDATE membres SET mail = ? WHERE id_membres = ?");
$insertmail->execute(array($newmail, $_SESSION['id_membres']));
header('Location: profil.php?id_membres=' . $_SESSION['id_membres']);
}
if (isset($_POST['newmdp1']) AND ! empty($_POST['newmdp1']) AND ( isset($_POST['newmdp2']) AND ! empty($_POST['newmdp2']))) {
$mdp1 = password_hash($_POST['newmdp1'], PASSWORD_BCRYPT);
$mdp2 = password_hash($_POST['newmdp2'], PASSWORD_BCRYPT);
if ($mdp1 == $mdp2) {

        $insertmdp = $bdd->prepare("UPDATE membres SET motdepasse = ? WHERE id_membres = ?");
        $insertmdp->execute(array($mdp1, $_SESSION['id_membres']));
    } else {
        $msg = "Vos mots de passes sont incorrects";
    }

    if (isset($_POST['newadresse']) AND ! empty($_POST['newadress']) AND $_POST['newadresse'] != $user['adresse']) {
        $newadresse = $_POST['newadresse'];
        $insertadresse = $bdd->prepare("UPDATE membres SET adresse = ? WHERE id_membres = ?");
        $insertadresse->execute(array($newadresse, $_SESSION['id_membres']));
        header('Location: profil.php?id_membres=' . $_SESSION['id_membres']);
    }
    if (isset($_POST['newage']) AND ! empty($_POST['newage']) AND $_POST['newage'] != $user['age']) {
        $newage = $_POST['newage'];
        $insertage = $bdd->prepare("UPDATE membres SET age = ? WHERE id_membres = ?");
        $insertage->execute(array($newage, $_SESSION['id_membres']));
        header('Location: profil.php?id_membres=' . $_SESSION['id_membres']);
    }

if (isset($_FILES['avatar']) AND ! empty($_FILES['avatar']['name'])) {
$taillemax = 2097152;
$extensionsValides = array('jpg', 'jpeg', 'gif', 'png');
if ($_FILES['avatar']['size'] <= $_taillemax) {
$extensionUpload = strtolower(substr(strrchr($_FILES['avatar']['name'], '.'), 1));
if (in_array($extensionUpload, $extensionsValides)) {
$chemin = "membres/avatars/". $_SESSION['id_membres']. "." .$extensionUpload;
$resultat = move_uploaded_file($_FILES['avatar']['tmp_name'], $chemin);
if ($resultat) {
$updateavatar = $bdd->prepare("UPDATE membres SET avatar = :avatar WHERE id_membres = :id_membres");
$updateavatar->execute(array(
'avatar' => $_SESSION['id_membres']. "." .$extensionUpload,
'id_membres' => $_SESSION['id_membres']));
header('Location: profil.php?id_membres=' . $_SESSION['id_membres']);
} else {
$msg = "Erreur importations fichier";
}
} else {
$msg = "Votre photo doit etre au format jpg,jpeg,gif ou png";
}
} else {
$msg = "Votre photos de profil de doit pas depasser 2Mo";
}
}
}
?>
?>
<!DOCTYPE html>
<html>
<charset
<head>
<title>TODO supply a title</title>
<meta charset="utf-8">
</head>
<body>
<div align="center">
<h2>Edition de mon profil</h2>
<br/><br/>
<form method="POST" action="" enctype="multipart/form-data">
<table><tr>
<td align="right">
<label>Pseudo:</label>
</td>
<td>
<input type="text" name="newpseudo" value="<?php echo $user['pseudo']; ?>" placeholder="Pseudo" />
</td>
</tr>
<tr>
<td align="right">
<label>Age:</label>
</td>
<td>
<input type="text" name="newage" value="<?php echo $user['age']; ?>" placeholder="Age" />
</td>
</tr>
<tr>
<td align="right">
<label>Mail:</label>
</td>
<td>
<input type="text" name="newmail" value="<?php echo $user['mail']; ?>" placeholder="Mail" />
</td>
</tr>
<tr>
<td align="right">
<label>Passsword:</label>
</td>
<td>
<input type="password" name="newmdp1" placeholder="Mot de passe" />
</td>
</tr>
<tr>
<td align="right">
<label>Vérification password:</label>
</td>
<td>
<input type="password" name="newmdp2" placeholder="Confirmation mot de passe" />
</td>
</tr>
<tr>
<td align="right">
<label>Adresse:</label>
</td>
<td>

                                <textarea placeholder="taper votre adresse" type="text" name="newadresse" value="<?php echo $user['adresse']; ?>" placeholder="Adresse" /></textarea>

                            </td>
                        </tr>
                        <tr>
                            <td align="right">
                                <label>Avatar:</label>
                            </td>
                            <td>
                                <input type="file" name="Avatar" /><br/><br/>
                            </td>
                        </tr>
                    </table>
                    <br/><br/>
                    <input type="submit" value="Mise a jour du profil" />

                </form>
                <?php
                if (isset($msg)) {
                    echo $msg;
                }
                ?>
            </div>
        </body>
</html>
<?php

} else {
header('Location: connexion.php');
}

Ce que je veux

telecharger le fichier dans le dossier avant de l'afficher en html

Ce que j'obtiens

le fichier ne se telecharge pas

Merci d'avance :)

31 réponses


sty
Réponse acceptée

ton content dir la si je vois bien le chemin doit juste être
membres/avatars/
ou si cela ne fonctionne pas ./membres/avatars/ ./ : signifie que la page est cherchée à partir du répertoire courant.
la tu lui demande d'envoyer le fichier vers C:/wamp/php/wamp/www/membres/avatars/

Bonjour.
Dans ton formulaire tu assignes Avatar comme valeur de l'attribut name alors que dans ton code PHP tu demandes à vérifier avatar, soit sans majuscule, tu devrais faire la modification, car si je ne fais pas d'erreur, la casse est importante.

Jonh Mrn
Auteur

Bonsoir

merci pour ta reponse , j'ai changer le nom et mis avatar en minuscule mais rien ne change as tu une autre idée ?

Merci d'avance :)

Tu ne devrais fermer la balise php qu'une seule fois, alors que tu le fais deux fois (juste avant l'affichage du code HTML).
Est-ce que tu as bien indiqué à ton formulaire qu'il doit accepter les upload de fichiers ?
Car là dans l'état du code que tu nous montres, nous ne pouvons pas le voir.

Jonh Mrn
Auteur

Bonsoir

je le ferme une fois erreur de copie coller ^^
enctype="multipart/form-data" cela dans form accepte les upload.

Merci d'avance :)

Dans ce cas là, comme ça je ne peux pas trop te dire, le code PHP me semble plutôt correct.
Tu devrais déboger ton code avec des var_dump par exemple, notamment juste après avoir vérifié si un fichier à été soumis via le formulaire.

Jonh Mrn
Auteur

Bonsoir le vardump($_FILES);
n'affiche rien du tout

Merci d'avance :)

Bonjour,
Attention au php.ini qui pourrais bloquer la taille de tes images.

Jonh Mrn
Auteur

Bonsoir comment regler sa ? merci

essaye d'envoyer une petite image (150px X 150px et de max 300Ko) pour voir si elle passe.

Sinon il faut regarder la configuration de serveur web

Jonh Mrn
Auteur

Bonsoir cela ne vient pas de sa ,
le fichier ne veut pas etre uploader dans le dossier membres/avatars ?
merci d'avance :)

vous travaillez en local ou en ligne ?
Que dises les logs ?

Ça peut aussi venir de l'adresse du dossiers, essais de l'uploader dans le même dossier que ton script pour voir !

Jonh Mrn
Auteur

Bonjour

je travail en local avec wamp
je les mis dans ladresse du dossier membres/avatars

merci davance :)

Bonsoir le var_dump($_FILES);
n'affiche rien du tout

Si le var_dump($_FILES) ne s'affiche pas, c'est que tu ne rentres à aucun moment dans la condition if (isset($_FILES['avatar']) AND !empty($_FILES['avatar']['name'])) {, tu devrais donc t'orienter à ce niveau pour comprendre pourquoi ce n'est pas le cas.

Je ne voit pas à quel moment tu met le boutton pour soumettre le formulaire !

Jonh Mrn
Auteur

bonjour

<tr>
<td align="right">
<label>Avatar:</label>
</td>
<td>
<input type="file" name="avatar" value="2000000"/>

                            </td>
                        </tr>
                    </table>
                    <br/><br/>
                    <input type="submit" value="Mise a jour du profil" />

                </form>

                voila  merci :)

Que dises les logs de wamp ?

Jonh Mrn
Auteur

Bonjour

c'est a dire ?

Merci d'avance

Jonh Mrn
Auteur

Bonjour je test un autre code mais le transfer de fichier ne marche pas non plus ?

if (isset($_POST['upload'])) { // si formulaire soumis
            $content_dir = '/wamp/www/membres/avatars'; // dossier où sera déplacé le fichier

            $tmp_file = $_FILES['fichier']['tmp_name'];

            if (!is_uploaded_file($tmp_file)) {
                exit("Le fichier est introuvable");
            }

            // on vérifie maintenant l'extension
            $type_file = $_FILES['fichier']['type'];

            if (!strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'bmp') && !strstr($type_file, 'gif') && !strstr($type_file, 'png')) {
                exit("Le fichier n'est pas une image");
            }

            // on copie le fichier dans le dossier de destination
            $name_file = $_FILES['fichier']['name'];

            if (!move_uploaded_file($tmp_file, $content_dir . $name_file)) {
                exit("Impossible de copier le fichier dans $content_dir");
            }

            echo "Le fichier a bien été uploadé";
        }
        if (preg_match('#[\x00-\x1F\x7F-\x9F/\\\\]#', $name_file)) {
            exit("Nom de fichier non valide");
        } else if (!move_uploaded_file($tmp_file, $content_dir . $name_file)) {
            exit("Impossible de copier le fichier dans $content_dir");
        }

et le html

`<form method="POST" action="" enctype="multipart/form-data">`
   <input type="hidden" name="MAX_FILE_SIZE" value="200000">  
                                    <input type="file" name="fichier" />
                                    <input type="submit" name="upload" value="Valider"/>

il ne veut pas se transfere vers le fichier C:/wamp/php/membres/avatars
resultat du post FILE
array (size=8)
'newpseudo' => string 'toto06' (length=6)
'newage' => string '40' (length=2)
'newmail' => string 'toto06@gmail.com' (length=16)
'newmdp1' => string '' (length=0)
'newmdp2' => string '' (length=0)
'newadresse' => string '' (length=0)
'MAX_FILE_SIZE' => string '200000' (length=6)
'upload' => string 'Valider' (length=7)
merci d'avance :)

J'identifie un problème ici :

if (!move_uploaded_file($tmp_file, $content_dir . $name_file))

Si j'ai bien suivi ta variable de dossier est : /wamp/www/membres/avatars, ton fichier : image.jpg donc le résultats avec le bout de code ci-dessus : /wamp/www/membres/avatarsimage.jpg.

Essais comme ça :

if (!move_uploaded_file($tmp_file, $content_dir .'/'. $name_file))
//ou alors comme ça
$content_dir = '/wamp/www/membres/avatars/';
Jonh Mrn
Auteur

Bonsoir

merci pour ta reponse mais quand je selectionne un image et que je fait submit (je travail en local) l'image n'apparer pas dans le dossier avatars je ne comprends pas ?
merci :)

Pourrait nous montrer “l'architecture” de tes dossiers ?

Jonh Mrn
Auteur

bonjour

le dossier se trouve dans C:/wamp/www/php/membres/avatars voila le dossier de destination
quand je valider le fichier n'est pas uploader ?

Merci

Et ton fichier formulaire ainsi que de traitement ?

Jonh Mrn
Auteur

bonsoir non mon formulaire est dans le dossier wamp/www/php le probleme vient de la ?

Jonh Mrn
Auteur

upload en local c'est pas possible ??

Jonh Mrn
Auteur

Bonjour j'ai commencer a trouver la solution en créant un formulaire a part et a faire un include();

le formulaire

<?php
if (isset($_POST['upload'])) { // si formulaire soumis
    $content_dir = dirname($_SERVER['SCRIPT_FILENAME']).'/membres/avatars/';//'/wamp/www/php/membres/avatars/'; // dossier où sera déplacé le fichier
    $uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
    $tmp_file = $_FILES['fichier']['tmp_name'];

    if (!is_uploaded_file($tmp_file)) {
        exit("Le fichier est introuvable");
    }

    // on vérifie maintenant l'extension
    $type_file = $_FILES['fichier']['type'];

    if (!strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'bmp') && !strstr($type_file, 'gif') && !strstr($type_file, 'png')) {
        exit("Le fichier n'est pas une image");
    }

    // on copie le fichier dans le dossier de destination
    $name_file = $_FILES['fichier']['name'];

    if (!move_uploaded_file($tmp_file, $content_dir . '/' . $name_file)) {
        exit("Impossible de copier le fichier dans $content_dir");
    }
    echo "Le fichier a bien été uploadé";
}
if( preg_match('#[\x00-\x1F\x7F-\x9F/\\\\]#', $name_file) )
{
    exit("Nom de fichier non valide");
}
elseif (!move_uploaded_file($tmp_file, $content_dir . $name_file))
{
    exit("Impossible de copier le fichier dans $content_dir");
}
?>
<html>
    <charset 
        <head>
        <meta charset="utf-8">
        </head>
        <body>

                <form method="post" action="" enctype="multipart/form-data">
                    <td>
                    <tr> 
                        <input type="hidden" name="MAX_FILE_SIZE" value="200000">  
                        <input type="file" name="fichier" />
                        <input type="submit" name="upload" value="Valider"/>
                </td>
                </tr>

                </form>
        </body>
</html>

je l'ai inclus ici

         </td>
                            </tr>
                        </table>
                        <label>Avatar:</label>
                        <?php include('avatars.php'); ?>
                        <br/><br/>
                        <input type="submit" value="Mise a jour du profil" />
                    </form>

voici l'erreur quil me retourne avec la verification preg_match
![]()
( ! ) Notice: Undefined variable: name_file in C:\wamp\www\php\avatars.php on line 26
Call Stack

Time Memory Function Location

1 0.0010 153344 {main}( ) ..\editionprofil.php:0
2 0.0340 172784 include( 'C:\wamp\www\php\avatars.php' ) ..\editionprofil.php:113

( ! ) Notice: Undefined variable: tmp_file in C:\wamp\www\php\avatars.php on line 30
Call Stack

Time Memory Function Location

1 0.0010 153344 {main}( ) ..\editionprofil.php:0
2 0.0340 172784 include( 'C:\wamp\www\php\avatars.php' ) ..\editionprofil.php:113

( ! ) Notice: Undefined variable: name_file in C:\wamp\www\php\avatars.php on line 30
Call Stack

Time Memory Function Location

1 0.0010 153344 {main}( ) ..\editionprofil.php:0
2 0.0340 172784 include( 'C:\wamp\www\php\avatars.php' ) ..\editionprofil.php:113

( ! ) Notice: Undefined variable: content_dir in C:\wamp\www\php\avatars.php on line 30
Call Stack

Time Memory Function Location

1 0.0010 153344 {main}( ) ..\editionprofil.php:0
2 0.0340 172784 include( 'C:\wamp\www\php\avatars.php' ) ..\editionprofil.php:113

( ! ) Notice: Undefined variable: content_dir in C:\wamp\www\php\avatars.php on line 32
Call Stack

Time Memory Function Location

1 0.0010 153344 {main}( ) ..\editionprofil.php:0
2 0.0340 172784 include( 'C:\wamp\www\php\avatars.php' ) ..\editionprofil.php:113

Peut ont m'aider ?

Pour : ( ! ) Notice: Undefined variable: name_file in C:\wamp\www\php\avatars.php on line 26 Call Stack : L'erreur vient du fait que tu es en dehors de ton if ou tu as définit la variable !

Ce qui as l'air d'être l'erreur qui en produit tant, essais de corriger ça et reviens vers nous !

En plus de ce que te dit JeremieMeunier, c'est une mauvaise idée d'inclure un formulaire à l'intérieur d'un autre formulaire, de plus que tu y introduit les balises html, , head, body, etc ...
Sans compter que tu ouvres une balise charset (?) que tu ne refermes pas.

Jonh Mrn
Auteur

Bonsoir
tout d'abort merci pour vos reponse j'inclus car si je fait a la suite de mon formulaire le move upload n'est pas pris en compte .
Merci d'avance pour ta reponse :)