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 :

Insertion et compression d'image en BDD


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    janvier 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : janvier 2017
    Messages : 62
    Points : 18
    Points
    18
    Par défaut Insertion et compression d'image en BDD
    Bonsoir,

    J'ai un souci avec l'insertion des liens (d'images) en BDD.

    Faut savoir que je gère un site de petites annonces. Lorsque l'utilisateur upload une image, je compresse celle-ci pour l'affichage sur la page d'accueil et j'enregistre la version non compressée, pour l'affichage au clic.

    J'ai fais en sorte que le lien d'une image par défaut soit enregistrée en BDD, lorsque l'utilisateur n'upload aucune image. Mais parfois, lorsqu'on upload une image, on se rend compte que c'est l'image par défaut qui est enregistrée en BDD. J'ai constaté que ce problème survient parfois, lorsque l'image fais une certaine taille (compression qui échoue?). En effets, je n'ai jamais constaté ce problème lors de l'upload d'images faisant une trentaine de kilos. Parfois, lors de l'upload de x images, x-1 sont enregistrées en BDD.

    Voici mon formulaire d'upload (j'utilise mini ajax upload form):
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    <?php session_start();
     ?>
    <!DOCTYPE html>
    <html>
     
        <head>
            <meta charset="utf-8"/>
            <title>Ajoutez des photos</title>
             <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
            <!-- Google web fonts -->
            <link href="http://fonts.googleapis.com/css?family=PT+Sans+Narrow:400,700" rel='stylesheet' />
     
            <!-- The main CSS file -->
            <link href="assets/css/style.css" rel="stylesheet" />
        </head>
     
        <body>
            <div id="conteneur">
            <form id="upload" method="post" action="upload.php" enctype="multipart/form-data">
                <div id="drop">
                    Ajoutez des photos
     
                    <a>ICI</a>
                    <input type="file" name="upl" multiple />
                </div>
     
                <ul>
                    <!-- The file uploads will be shown here -->
                </ul>
     
            </form>
            <style type="text/css">
                a{
                    text-decoration: none;
                }
                input[type="button"]{
                    width: 150px;
                    height: 40px;
                    position:relative;
                    left: 50%;
                    right: 50%.;
                }
            </style>
     
    <a href="traitement_chemin.php"><input type="button" value="Terminer" /></a>
     
            <!-- JavaScript Includes -->
            <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
            <script src="assets/js/jquery.knob.js"></script>
     
            <!-- jQuery File Upload Dependencies -->
            <script src="assets/js/jquery.ui.widget.js"></script>
            <script src="assets/js/jquery.iframe-transport.js"></script>
            <script src="assets/js/jquery.fileupload.js"></script>
     
            <!-- Our main JS file -->
            <script src="assets/js/script.js"></script>
    </div>
        </body>
    </html>
    mon script php d'upload:
    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
     
    <?php
    session_start();
    // A list of permitted file extensions
    $allowed = array('png', 'jpg', 'gif');
     
    if(isset($_FILES['upl']) && $_FILES['upl']['error'] == 0){
     
        $extension = pathinfo($_FILES['upl']['name'], PATHINFO_EXTENSION);
     
        if(!in_array(strtolower($extension), $allowed)){
            echo '{"status":"error"}';
     
        }else{
            if($_FILES['upl']['size']<=8097152){
                $upl_name = $_FILES['upl']['size'];
                $image_choisie = imagecreatefromjpeg($_FILES['upl']['tmp_name']);
                $taille_image_choisie = getimagesize($_FILES['upl']['tmp_name']);
                $nouvelle_largeur = 200;
                $reduction = (($nouvelle_largeur * 100)/$taille_image_choisie[0]);
                $nouvelle_hauteur = (($taille_image_choisie[1] * $reduction)/100);
                $nouvelle_image = imagecreatetruecolor($nouvelle_largeur,$nouvelle_hauteur) or die ("Erreur");
                imagecopyresampled($nouvelle_image, $image_choisie, 0, 0, 0, 0, $nouvelle_largeur, $nouvelle_hauteur, $taille_image_choisie[0],$taille_image_choisie[1]);
                $name = time();
                imagejpeg($nouvelle_image,"upload_pics/$name.{$extension}",100);
        $nom = uniqid();
        move_uploaded_file($_FILES['upl']['tmp_name'], "pics/$nom.{$extension}");
             $_SESSION['compteur'] = $_SESSION['compteur'] + 1;
             $_SESSION['chemin'][$_SESSION['compteur']-1] = "pics/$nom.{$extension}";
            $_SESSION['chemin_tumb'][$_SESSION['compteur']-1] = "upload_pics/$name.{$extension}";
            }else{
                echo 'Votre photos doit faire moins de 8Mo';
                exit();
            }
        }
    }
     
    echo '{"status":"error"}';
    Et si besoin, ma page d'insertion en BDD
    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
    session_start();
    try{
                            $bdd = new PDO('mysql:host=localhost;dbname=bddName;charset=utf8','blabla','password',array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
                        }
                        catch(Exception $e){
                            die('Erreur : '.$e ->getMessage());
                        }
                        if(!empty($_SESSION['chemin']) AND !empty($_SESSION['chemin_tumb'])){//Si l'on a choisit d'upload une image
     
                        if(isset($_SESSION['psd'])){//Si l'on est un membre du site
     
                        $req = $bdd->prepare('UPDATE nomTable SET annoncePubliee = :mon_annonce ,miniatures = :tumb WHERE (titre = :titre AND description = :description AND categorie = :cat AND possesseur = :moi)');
                        $req->execute(array(':ma_vente'=>implode("$", $_SESSION['chemin']),':tumb'=>implode("$", $_SESSION['chemin_tumb']),':titre'=>$_SESSION['titre'],':description'=>$_SESSION['com'],':cat'=>$_SESSION['cat'],':moi'=>$_SESSION['psd']));
                        }else{
     
                        $req = $bdd->prepare('UPDATE nomTable SET annoncePubliee = :mon_annonce, miniatures = :tumb WHERE (titre = :titre AND description = :description AND categorie = :cat AND possesseur = :moi)');
                        $req->execute(array(':mon_annonce'=>implode("$", $_SESSION['chemin']),':tumb'=>implode("$", $_SESSION['chemin_tumb']),':titre'=>$_SESSION['titre'],':description'=>$_SESSION['com'],':cat'=>$_SESSION['cat'],':moi'=>$_SESSION['pseudo']));
                     }
                    }else{
                  $req = $bdd->prepare('UPDATE nomTable SET annoncePubliee = :mon_annonce ,miniatures = :tumb WHERE (titre = :titre AND description = :description)');
                        $req->execute(array(':ma_vente'=>"images/tools.png",':tumb'=>"images/tools.png",':titre'=>$_SESSION['titre'],':description'=>$_SESSION['com']));
     
                    }
    //On supprime toutes les variables qu'on a utilisé pour l'annonce
    unset($_SESSION['cat']);
    unset($_SESSION['titre']);
    unset($_SESSION['com']);
    unset($_SESSION['prix']);
    unset($_SESSION['campus']);
    unset($_SESSION['numero']);
    unset($_SESSION['numeroDeux']);
    unset($_SESSION['ad_mail']);
    /*unset($_SESSION['mail']);*/
    unset($_SESSION['pseudo']);
    unset($_SESSION['chemin']);
    unset($_SESSION['chemin_tumb']);
    unset($_SESSION['compteur']);
    $_SESSION['post_ok']=1;  
                        header('location:redirection_annonce_publiee.php');
     
    ?>

  2. #2
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : janvier 2006
    Messages : 1 769
    Points : 2 403
    Points
    2 403
    Par défaut
    Salut

    Reconnaitre de quel format est une image n'est pas toujours chose aisée. Vu comment tu abordes la question, c'est que tu fais comme windows.

    ça commence bien (bon moi, j'aurai mis un strtolower() et 'jpeg' )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $allowed = array('png', 'jpg', 'gif');
    mais tu ne fais que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $image_choisie = imagecreatefromjpeg($_FILES['upl']['tmp_name']);
    alors qu'au début tu avais le choix !

    imagecreatefromgif
    imagecreatefrombmp
    imagecreatefromgif


    Ensuite pour moi tu ne fais pas de la compression mais un re-échantillonnage.
    Ton conde à l'air d'être suffisement propre pour se permettre de chipoter !
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : juillet 2005
    Messages : 29 208
    Points : 43 406
    Points
    43 406
    Par défaut
    Que vaut $_FILES['upl']['error'] dans le cas ou ça ne fonctionne pas ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    janvier 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : janvier 2017
    Messages : 62
    Points : 18
    Points
    18
    Par défaut
    Salut à tous les deux et merci de bien vouloir m'aider.
    @Gene69
    si je n'ai pas pris la peine de me pencher sur les deux autres cas, c'est parce que la plupart de mes visiteurs utilisent des smartphones. Les extensions des images prises par les smartphones étant .jpg, je me suis dis que je ne perdais pas grand chose en ne gérant pas le cas des images .gif et .png

    J'utilise bel et bien strtolower...Je ne vois pas quel est le problème.

    @sabotage
    Eh bien, j'en ai aucune idée . Après avoir lu votre intervention, j'ai mis un else au premier if de mon script php d'opload , afin d'afficher le contenu de $_FILES['upl']['error'] en cas d'erreur. Mais tous les tests que j'ai effectué dès lors, n'ont rien montré: tous marche parfaitement. Et c'est là le "souci", car comment gérer un code qui semble marcher quand ça l'arrange?

Discussions similaires

  1. Insertion d'images dans BDD sql Compact
    Par bobjoumi dans le forum C#
    Réponses: 4
    Dernier message: 30/12/2010, 17h20
  2. Insertion d'une image et BDD MySql
    Par polo42 dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 16/08/2009, 10h37
  3. [MySQL] insert et afficher une image à partitr d'une bdd
    Par agnaou dans le forum PHP & Base de données
    Réponses: 19
    Dernier message: 02/03/2009, 23h53
  4. Réponses: 4
    Dernier message: 03/08/2005, 09h47
  5. [Image][Débutant]Compression d'images JPG en Java ?
    Par joe.satriani dans le forum 2D
    Réponses: 3
    Dernier message: 30/01/2005, 16h34

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