IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

enregistrer une images via un formulaire


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Guinée

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 112
    Points : 90
    Points
    90
    Par défaut enregistrer une images via un formulaire
    Salut tout le monde voilà j'essaye d'envoyer une image dans ma base de données en vérifiant d'abord si le nom de l'image existe ou pas et tout en contrôlant la taille de l'image. Et le problème en faite c'est l'utilisation de la fonction filesize voilà le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    session_start();
    // On vérifie que le login et le mot de passe ont été précisés 
    if(array_key_exists('pseudo', $_SESSION)) {
    	// Connexion à la base 
    	$connexion=mysql_connect("localhost", "root", "" )or die("cannot connect" );
    	mysql_select_db("nomdemabase" )or die("cannot select DB" );
    	mysql_query("SET NAMES 'utf8'" );
    	$pseudo=$_SESSION['pseudo'];
    	$photo=$_FILES['photo']['name'];
    	$max=$_POST['max_file_size'];
    	if(($_FILES['photo']['name']<>"avatar.png")&&(filesize($_FILES['photo']['name']) <$_POST['max_file_size'])){
    		echo'verification reussie taille de l image <'.$max;	
    }
    Bon c'est juste un morceau de mon code mais largement suffisant pour voir mon problème et voici le code d'erreur associé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Warning: filesize() [function.filesize]: stat failed for batigoal.jpg in C:\wamp\www\profil\reqenvimg.php on line 12
    verification reussie taille de l image <50000
    Si quelqu'un pouvait m'aidier

  2. #2
    Expert éminent sénior

    Avatar de FirePrawn
    Homme Profil pro
    Consultant technique
    Inscrit en
    Mars 2011
    Messages
    3 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : Mars 2011
    Messages : 3 179
    Points : 19 373
    Points
    19 373
    Par défaut
    Bonjour,

    Cette erreur vient a priori d'un problème de lecture du fichier.
    Es-tu sûr d'avoir les droits sur ce répertoire ?

  3. #3
    Membre régulier
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Guinée

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 112
    Points : 90
    Points
    90
    Par défaut
    Bien sûre que oui j'ai tous les droits sur le dossier et sur le fichier!

  4. #4
    Membre éprouvé
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Points : 1 057
    Points
    1 057
    Par défaut
    Salut,

    Fait ton filesize() sur le tmp_name et non sur name :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (($_FILES['photo']['name'] <> "avatar.png") && (filesize($_FILES['photo']['tmp_name']) < $_POST['max_file_size'])) {

  5. #5
    Membre régulier
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Guinée

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 112
    Points : 90
    Points
    90
    Par défaut
    Ouf oh la la il me fallait juste remplacé name par tmp_name et pourtant c'est tmp_name qui était la ba mais bon on va voir la suite!
    Maintenant toutes mes conditions ne sont pas vérifier par ce que si la taille de l'image dépasse 50kb le deuxième test ne s'éffectue pas c'est toujours: verification reussie taille de l image <50000 qui s'affiche (le premier test).
    Normalement si la taille de l'image dépasse 50kb voilà le message qui doit s'afficher: Taille de l Image trop grande > 50kb
    et voici la suite du code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <?php
    session_start();
    // On vérifie que le login et le mot de passe ont été précisés 
    if(array_key_exists('pseudo', $_SESSION)) {
    	// Connexion à la base 
    	$connexion=mysql_connect("localhost", "root", "" )or die("cannot connect" );
    	mysql_select_db("basedugenie" )or die("cannot select DB" );
    	mysql_query("SET NAMES 'utf8'" );
    	$pseudo=$_SESSION['pseudo'];
    	$photo=$_FILES['photo']['name'];
    	$max=$_POST['max_file_size'];
    	if(($_FILES['photo']['name']<>"avatar.png")&&(filesize($_FILES['photo']['tmp_name']) < $max)){
    		echo'verification reussie taille de l image <'.$max;
    }
    elseif(($_FILES['photo']['name']<>"avatar.png")&&(filesize($_FILES['photo']['tmp_name']) > $max)){
    		echo'Taille de l Image trop grande > '.$max;
    }
    else{
    		$photo="avatar.png";	 
    	}
    }
    else{
    		header('Location:http://www.lesitedugenie.com/Connexion/');
    	}
     
    ?>

  6. #6
    Expert éminent sénior

    Avatar de FirePrawn
    Homme Profil pro
    Consultant technique
    Inscrit en
    Mars 2011
    Messages
    3 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : Mars 2011
    Messages : 3 179
    Points : 19 373
    Points
    19 373
    Par défaut
    Vide le cache de ton navigateur ?

  7. #7
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Faits afficher tes variables $_POST['max_file_size'] et filesize($_FILES['photo']['tmp_name']) pour contrôler d'où vient le fait que ta condition n'est pas respectée.

  8. #8
    Membre régulier
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Guinée

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 112
    Points : 90
    Points
    90
    Par défaut
    J'ai vider le cache de mon navigateur toujours le probleme persiste et voila maintenant j' ai fais echo de mes variables $_POST['max_file_size'] et ($_FILES['photo']['tmp_name']) ,$_POST['max_file_size'] s'affiche mais $_FILES['photo']['tmp_name']) ne s'affiche pas du tout! et je suis a court d' idée

  9. #9
    Membre éprouvé
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Points : 1 057
    Points
    1 057
    Par défaut
    Citation Envoyé par onesat Voir le message
    J'ai vider le cache de mon navigateur toujours le probleme persiste et voila maintenant j' ai fais echo de mes variables $_POST['max_file_size'] et ($_FILES['photo']['tmp_name']) ,$_POST['max_file_size'] s'affiche mais $_FILES['photo']['tmp_name']) ne s'affiche pas du tout! et je suis a court d' idée
    T'a fait un echo de ($_FILES['photo']['tmp_name']) ou de filesize($_FILES['photo']['tmp_name']) ?

  10. #10
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Ton code est pas clair, normalement tu devrais avoir une condition pour afficher ces variables (dépendante d'une variable post issue du formulaire). Fais voir ton formulaire d'envoi de fichier.

  11. #11
    Membre régulier
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Guinée

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 112
    Points : 90
    Points
    90
    Par défaut
    voici mon code du formulaire d'envoi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      <FORM ACTION="reqenvimg.php" method="post" ENCTYPE="multipart/form-data" name="max_file_size" value="50000">
    <input type="hidden" name="max_file_size" value="50000">
    image:<input TYPE="file" NAME="photo"><br>
    <INPUT TYPE="submit" NAME="telecharger" VALUE="envoyer">
    </form>

  12. #12
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    C'est parce que $_FILES['photo']['tmp_name'] est toujours vide si tu charge des fichiers d'un poids supérieur à $_POST['MAX_FILE_SIZE']. Regarde http://www.php.net/manual/fr/feature...ost-method.php

    Il faut d'abord gérer les erreurs via $_FILES['photo']['error']

    Teste ce code dans une page séparée pour comprendre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?php if(isset($_FILES['photo']))
    { 
    	//uniquement pour debugger
    	echo '<pre>';
    	print_r($_FILES);
    	echo '</pre>';
     
    	$photo = $_FILES['photo']['name'];
    	$max = $_POST['MAX_FILE_SIZE'];
     
    	if($_FILES['photo']['error'] == 2)
    	{
    		echo'Taille de l Image trop grande > '.$max;	
    	}
        else 
    	{
    		echo'verification reussie taille de l image <'.$max;
    	}
    }
     
     
     
    ?>
    <form action="#" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="50000">
    image:<input type="file" name="photo"><br>
    <input type="submit" name="telecharger" value="envoyer">
    </form>
    A savoir cependant que $_FILES et $_POST seront vides si tu dépasse la directive post_max_size du serveur (et donc cela te renverra une page blanche sans message). Pour gérer si besoin cette erreur spécifique tu peux envoyer une variable get en même temps que le formulaire. D'où ce second exemple plus complet (toujours à tester dans une page séparée) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    <?php
    $message_tele = null;
     
    if(isset($_FILES['photo']))
    { 
    	//uniquement pour debugger
    	echo '<pre>';
    	print_r($_FILES);
    	echo '</pre>';
     
    	$photo = $_FILES['photo']['name'];
    	$max = $_POST['MAX_FILE_SIZE'];
     
    	if($_FILES['photo']['error'] == 4)
    	{
    		$message_tele = 'aucun fichier n\'a été téléchargé';
    	}
    	else if($_FILES['photo']['error'] == 2)
    	{
    		$message_tele = 'Taille de l Image trop grande > '.$max;	
    	}
        else 
    	{
    		$message_tele = 'Verification reussie taille de l image <'.$max;
    	}
    }
     
     
    // Si post_max_size est dépassé
    if (isset($_GET['tele']) && $_GET['tele'] == 'ok' && !isset($_POST['MAX_FILE_SIZE']))
    {
    	$message_tele = 'Maximum autorisé par le serveur '.ini_get('post_max_size').' dépassé';
    }
     
     
     
    ?>
    <form action="?tele=ok" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="50000">
    image:<input type="file" name="photo"><br>
    <input type="submit" name="telecharger" value="envoyer">
    </form>
    <?php if (isset($message_tele)) echo $message_tele;?>

    Pour info il y a une classe de téléchargement ici qui permet de gérer les erreurs, faire si besoin des redimensionnements, imposer un nom de fichier de destination etc..

  13. #13
    Membre régulier
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Guinée

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 112
    Points : 90
    Points
    90
    Par défaut
    Ok voilà le code que j'ai adopté même sil y a des erreurs (page blanche sans message en cas d'erreur) si la taille du fichier depasse la taille limite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <?php
    session_start();
    // On vérifie que la session existe  
    if(array_key_exists('pseudo', $_SESSION)) {
    	// Connexion à la base 
    	$connexion=mysql_connect("localhost", "root", "" )or die("cannot connect" );
    	mysql_select_db("basedugenie" )or die("cannot select DB" );
    	mysql_query("SET NAMES 'utf8'" );
    	$pseudo=$_SESSION['pseudo'];
    	$photo=$_FILES['photo']['name'];
    	$max=$_POST['max_file_size'];
    	if(($_FILES['photo']['name']<>"avatar.png")&&(filesize($_FILES['photo']['tmp_name']) < $max)){
    	// Requete à la base  
    	$SQL = 'UPDATE utilisateurs SET avatar="'.$photo.'" WHERE pseudo="'.mysql_real_escape_string($_SESSION['pseudo']).'"';
    	$request = mysql_query($SQL, $connexion) or die(mysql_error());
    	// transfert du fichier dans le dossier avatar.
    	move_uploaded_file($_FILES['photo']['tmp_name'],"../profil/images/avatar/".$_FILES['photo']['name']);
    		// fin de transfert du fichier
    		$_SESSION['images']='<img src="http://www.lesitedugenie.com/profil/images/avatar/'.$photo.'" width="50" height="50" align="top"/>';
    		header('location:imgprofil.php');
    	}
    	else{
    		$photo="avatar.png";	 
    	}
     
    }
    else{
    		header('Location:http://www.lesitedugenie.com/Connexion/');
    	}
     
    ?>
    maintenant le problème qui se pose c'est le choix des extensions que faire pour que je pusse seulement téléchargé les fichiers images de type jpg, png et gif seulement par ce que pour le moment mon code télécharger n'importe quel type de fichier et ce n'est pas le résultat attendu!

  14. #14
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Avec php >= 5.3 tu peux essayer avec finfo_file. Sinon te reste la méthode avec getimagesize qui retourne les dimensions d'une image, donc si pas de dimension retournée ce n'est pas une image.

    Sinon y'a quelque chose que tu n'a pas saisi dans mes exemples précédents ? Y'avait pourtant tous les éléments pour te permettre de résoudre ton problème alors pourquoi ne pas t'en servir ?

  15. #15
    Membre régulier
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Guinée

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 112
    Points : 90
    Points
    90
    Par défaut
    ABCIWEB
    Sinon y'a quelque chose que tu n'a pas saisi dans mes exemples précédents ? Y'avait pourtant tous les éléments pour te permettre de résoudre ton problème alors pourquoi ne pas t'en servir ?

    J'ai beaucoup apprécier ton exemple de classe seulement suis null en POO et je n'es pas pu adaptée ta classe a mon exemple donc si tu pouvais adaptée mon exemple a ta classe sa m'aiderais beaucoup!

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/06/2013, 03h09
  2. envoyer une image via un formulaire vers son mail
    Par cdevl32 dans le forum Langage
    Réponses: 2
    Dernier message: 02/09/2007, 20h52
  3. Réponses: 4
    Dernier message: 24/07/2007, 12h05
  4. [MySQL] problème d'enregistrement dans une db via un formulaire
    Par momoh dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/04/2007, 09h56
  5. scanner une image via un formulaire
    Par pat04 dans le forum IHM
    Réponses: 1
    Dernier message: 05/02/2007, 08h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo