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 :

Envoie des images dans la base de données


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Février 2015
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Consultant E-Business
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2015
    Messages : 78
    Par défaut Envoie des images dans la base de données
    Bonjour à tous, j'ai un petit probleme voici mon code php:
    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
     
    /****ENVOI IMAGES DANS LE DOSSIER******************/
    $workid = $_GET['id'];
    //$work_id = "3602";
    //var_dump($workid);
    //var_dump($work_id);
     if (isset($_FILES['images'])) {
        $manager = new ImageManager();
    	$images = $_FILES['images']['tmp_name'];
    	 	 foreach($images as $image){
    	 	 	$db ->query("INSERT INTO images SET work_id=$workid"); 
    			$image_id = $db ->lastInsertId();
    			$image_name =  $image_id . '.jpg';
    			$image_name = $db->quote($image_name);
    			$db ->query("UPDATE images SET name=$image_name WHERE id=$image_id");
       	        $manager->make($image)->orientate()->fit(150,100)
       	        ->save('../img/tmp_img/' .$image_id . '.jpg');
    			}         
              }
    Quand j’exécute ce code avec l'initialisation directe de ma variable workid voir le code en commentaire: $workid = "3602"; l'insertion dans la BDD $db ->query("INSERT INTO images SET work_id=$workid"); passe bien mais si j’essaie de l’exciter avec le workid récupéré dans ma variable GET, $workid = $_GET['id']; ce qui est mon but Rien ne marche et pourtant le $_GET['id'] contient belle et bien l'id de la réalisation, quand j’essaie de vérifier le deux variables celle initialisée et celle récupérée var_dump($workid); et var_dump($work_id);
    ça donne ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    C:\wamp\www\site\users\work_edit.php:60:string '3602' (length=4)
     
    C:\wamp\www\site\users\work_edit.php:61:string '3602' (length=4)
    donc ça donne exactement la même chose, je ne comprend vraiment pourquoi avec le $workid = $_GET['id']; indique 0, votre aide svp

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- il faudrait déjà utiliser la bonne syntaxe pour l'INSERT...



    2- Il faut utiliser des requêtes préparées !

  3. #3
    Membre confirmé
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Février 2015
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Consultant E-Business
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2015
    Messages : 78
    Par défaut
    Merci pour votre réaction voici je viens de changer mon code avec des requettes préparées:
    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
     
    $workid = $_GET['id'];
     if (isset($_FILES['images'])) {
        $manager = new ImageManager();
        $images = $_FILES['images']['tmp_name'];
             foreach($images as $image){
                $req = $db->prepare("INSERT INTO images SET work_id= ?");
                $req->execute([$workid]);
                $image_id = $db ->lastInsertId();
                $image_name =  $image_id . '.jpg';
                $image_name = $db->quote($image_name);
                $req = $db->prepare("UPDATE images SET name=$image_name WHERE id= ?");
                $req->execute([$image_id]);
                $manager->make($image)->orientate()->fit(150,100)
                ->save('../img/tmp_img/' .$image_id . '.jpg');
                }         
              }
    Mais l'insertion ne se fais toujours pas il y'a t-il moyen de peut être convertir le *$_GET['id'] * du string en interger? psk je crois que le problème vient de là, quand j'essai de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $work_id = $db-> $_GET['id'];
    $workid = (int) $work_id;
    donc essayé de convertir la valeur que je recois de *$_GET['id'] * en un entier
    là les images sont bien enregistrées dans la BDD mais avec un faut workid qui est de 0; votre aide svp

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,

    La syntaxe de la requête insert n'est pas bonne.
    Utilise une seule requête pour les deux colonnes au lieu de faire un update pour la seconde.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into images(work_id, name) values (? , ?)
    A+.

  5. #5
    Membre confirmé
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Février 2015
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Consultant E-Business
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2015
    Messages : 78
    Par défaut
    Merci bien pour votre réaction je crois que le problème n'est pas au niveau de la requette sql, cette dernière marche parfaitement le problème réside à la valeur de ma variable $workid = $_GET['id']. Quand j’essaie d'initialiser cette variable avec l'id de l'un de work par exemple: $work_id = "3602"; tout marche parfaitement mais quand je l'initialise avec l'id récupéré de l'url $workid = $_GET['id'] l'insertion ne marche pas.
    et pourtant l'id est bien récupéré de l'url et après un var_dump il affiche bien l'id du work, alors je ne comprend pas le pourquoi.
    Merci bien encore

  6. #6
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    insert ... set est seulement valable que pour mysql mais c'est pas standard. Essaie d'afficher l'erreur.

    A+.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
                $req = $db->prepare("INSERT INTO images SET work_id= ?");
    Cette syntaxe est FAUSSE !

    La BONNE syntaxe :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
                $req = $db->prepare("INSERT INTO images (work_id) VALUES (?)");


    2- De même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                $req = $db->prepare("UPDATE images SET name=$image_name WHERE id= ?");
                $req->execute([$image_id]);
    Tant qu'à faire une requête préparée, fais-le correctement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                $req = $db->prepare("UPDATE images SET name=? WHERE id=?");
                $req->execute([$image_name, $image_id]);

    3- Enfin (?), la préparation des requête peut/doit se faire UNE SEULE FOIS, en mettant les 2 $db->prepare(...) AVANT la boucle foreach().

    En prenant soin de distinguer les 2 :
    • $req_insert = $db->prepare(...);,
    • $req_update = $db->prepare(...);,
    • et en modifiant les exécutions (qui restent DANS la boucle) en conséquence.

  8. #8
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,

    Citation Envoyé par jreaux62 Voir le message
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
                $req = $db->prepare("INSERT INTO images SET work_id= ?");
    Cette syntaxe est FAUSSE !
    Cette syntaxe est valable pour mysql (seulement), mais c'est pas un SQL standard. Après, je ne sais pas pourquoi il insiste à utiliser une telle syntaxe.

    A+.

  9. #9
    Membre confirmé
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Février 2015
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Consultant E-Business
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2015
    Messages : 78
    Par défaut
    Merci beaucoup pour toutes ces corrections j'ai vraiment beaucoup appris durant ces échanges, voici j'ai tout modifié selon vos remarquent et voici mon nouveau code et ça passe bien, mais mon problème là persiste toujours:
    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
     
    //$work_id = $db->quote($_GET['id']);
    //$workid = (int) $work_id;
    //$workid = intval($_GET['id']);
    //$workid = '3602';
    $workid = $_GET['id'];
    //var_dump($_GET['id']);
    //var_dump($workid);exit;
     if (isset($_FILES['images'])) {
        $manager = new ImageManager();
    	$images = $_FILES['images']['tmp_name'];
    	$req_insert = $db->prepare("INSERT INTO images (work_id) VALUES (?)");
    	$req_update = $db->prepare("UPDATE images SET name=? WHERE id=?");
    	 	 foreach($images as $image){
    		    $req_insert->execute([$workid]);
    		    $image_id = $db ->lastInsertId();
    		    $image_name =  $image_id . '.jpg';
    			$image_name = $db->quote($image_name);
    		    $req_update->execute([$image_name, $image_id]);
    			$manager->make($image)->orientate()->fit(150,100)
       	        ->save('../img/tmp_img/' .$image_id . '.jpg');
    			}         
              }

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Dans la table de la base de données, la colonne "work_id" est bien en INT ?

    Car si elle est en VARCHAR, ça peut expliquer le problème. (quoi que... )

    Teste avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $workid = 3602; // numérique

  11. #11
    Membre confirmé
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Février 2015
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Consultant E-Business
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2015
    Messages : 78
    Par défaut
    Oui c'est bel et bien un INT. voici sa structure:

    Nom : image.jpg
Affichages : 430
Taille : 47,1 Ko

    Citation Envoyé par jreaux62 Voir le message
    Teste avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $workid = 3602; // numérique
    Avec ça ça marche très bien.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. insertion des image dans une base de données oracle
    Par tayeb_dev dans le forum Oracle
    Réponses: 2
    Dernier message: 12/08/2011, 01h48
  2. Mettre des images dans une base de donnée
    Par hugo7 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 21/01/2009, 18h46
  3. Des images dans les bases de données !
    Par micky57 dans le forum C++Builder
    Réponses: 3
    Dernier message: 07/03/2006, 16h09
  4. Comment stocker des images dans une base de données ?
    Par [Silk] dans le forum Bases de données
    Réponses: 4
    Dernier message: 21/07/2005, 11h29
  5. inserer des images dans une base de données
    Par alilou04 dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/06/2004, 18h54

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