Inserer less liens url d'images dans une base de données

hannao Messages postés 98 Date d'inscription mercredi 5 novembre 2003 Statut Membre Dernière intervention 26 janvier 2012 - 18 mai 2009 à 15:33
hannao Messages postés 98 Date d'inscription mercredi 5 novembre 2003 Statut Membre Dernière intervention 26 janvier 2012 - 18 mai 2009 à 21:32
bonjour tous le monde,

voilà d'un côté j'ai fait un code pour faire des vignettes qui fonctionne bien.
J'ai un dossier images qui contient x dossier images qui eux même contiennent x images
ex : dossier 1 contient les images 1-1.jpg, 1-2.jpg
dossier2 contient 2-1.jp,2-2.jpg etc...
je voudrais maintenant faire une requête qui insére l'adresse des dossiers et images qu'il contient dans un seul champs de la base de données mysql etje ne sais pas comment m'y prendre
je vous donne le code php pour la création de vignette
<?php
    //Vérifie si un fichier ou un dossier existe)
//phpinfo();
$racine = "images";
$dossier_reduit = "petite_images";
$max = 250;

lit_dossier($racine);

function lit_dossier($dir) {
    global $dossier_reduit;
    if (!is_dir($dir)) {
        echo "$dir n'est pas un dossier";
        return;
    }
    //Ouvre le dossierPrincipale et renvoi un tableau
    $liste = scandir($dir);
    foreach ($liste as $d) {
        if ($d!="." && $d!=".." && $d!=$dossier_reduit && is_dir($dir."/".$d)) {
            echo "$dir/$d est un dossier
\n";
            echo"$d
\n"; // pour recuperer le n° de dossier images
            lit_dossier($dir."/".$d);
        } else {
            //echo "$dir/$d est un fichier ou . ou ..
\n";
        }
    }
    traiter_dossier($dir);
}

function traiter_dossier($gf) {
    global $dossier_reduit, $max;
    $gf .= "/";
    $pf = $gf.$dossier_reduit."/";

    // tester si le dossier de destination existe, sinon le créer
    if (!is_dir($pf)) {
        mkdir($pf);
    }

    // lister les images du dossier grand_format    $liste glob($gf."*{jpg,gif,png,jpeg}",GLOB_BRACE); //> "${gf}*jpg" -> "images/*jpg"
    // $liste = array('images/un.jpg','images/deux.jpg','images/trois.jpg','images/quatre.jpg');
    $imgs = array();
    // pour chaque image du dossier grand_format
    foreach ($liste as $imageG) {        $fichier basename($imageG); // "images/un.jpg"> "un.jpg"
        echo "- ${pf}${fichier}
\n";
        // si pas jpg alors renommer en jpg sinon ne rien ajouter
        if (!is_file("${pf}${fichier}")) { // "imagesDesti/un.jpg"
            // créer une copie de l'image dans le dossier petit_format
            reduire($fichier,$gf,$pf,$max);
            echo "j'ai du réduire
\n";
        }
    }
}

function reduire($fichier, $d_src, $d_dest, $max) {
    // Crée une nouvelle image à partir d'un fichier src
    $ext = trouver_extension($fichier);
    switch($ext) {
        case "jpg":
        case "jpeg":
            $f = "imagecreatefromjpeg";
            $fe = "imagejpeg";
        break;
        case "gif":
            $f = "imagecreatefromgif";
            $fe = "imagegif";
        break;
        case "png":
            $f = "imagecreatefrompng";
            $fe = "imagepng";
        break;
        default:
            return;
    }
    $grande_image = $f("${d_src}${fichier}");
   
    // prend les mesures de l'image src
    $ls = imagesx($grande_image);
    $hs = imagesy($grande_image);

    //    On établi une regle de traitement --- si largeur src>hauteur de la source alors
    if ($ls > $hs) {
        $ld = $max;
        $hd = $hs / $ls * $max;
    } else {
        $hd = $max;
        $ld = $ls / $hs * $max;
    }
    $petite_image = imagecreatetruecolor($ld,$hd);
    imagecopyresampled($petite_image, $grande_image, 0, 0, 0, 0, $ld, $hd, $ls, $hs);
    /* Enregistre l'image_gd $petite_image dans le fichier "$d_dest$fichier" */
    $fe($petite_image, $d_dest.$fichier);
}
   
function trouver_extension($fichier){
   
    $ext = explode(".",$fichier);
    $extension = array_pop($ext);
    return $extension;
}

?>      

et maintenant le code qui est sur un autre fichier.php pour l'insertion tout marche sauf les images
17/05/2009 22:08:53
<?php
    mysql_connect("localhost","root",""); // declaration de la connexion
    mysql_select_db("interieu");
    $ligne = 0;
    $handle = fopen("test.csv", "r");
    while (($data = fgetcsv($handle, 0, chr(9),'|')) !== FALSE) {
    $ligne++;
    $num = count($data);
    for ($c=0; $c < $num; $c++) {
      echo $data[$c].'
';
      $var1 = substr($data[2], 0, 20);
     
      }
    $query = "INSERT INTO jos_content (`id`,`title`,`alias`,`title_alias`,`introtext`,`fulltext`,`state`,`sectionid`,`mask`,`catid`,`created`,`created_by`,`created_by_alias`,`modified`,`modified_by`,`checked_out`,`checked_out_time`,`publish_up`,`publish_down`) VALUES ('".
    $data[0] ."','".$data[1]."','".$data[1]."','".$img."','".$var1."','".$data[2]."',1,5,0,0,now(),62,'".idem."',now(),62,76392,now(),now(),'2010-10-10 00:00:00')";
    mysql_query($query);
    ($query);
    echo $query.'
';
   
 }
?>

Voilà et là je ne sais pas comment faire pour insérer l'adresse des images et le numéro de dossier dans $img

j'espère que c'est clair

4 réponses

nautilus99 Messages postés 661 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 18 septembre 2009 1
18 mai 2009 à 18:11
vu que je vois une table 'jos_content', il est fort probable que tu utilises Joomla. Pourquoi dans ce cas ne pas utiliser le framework et ses chemins relatifs par exemple $this->baseurl après avoir instancié ou vérifié l'existence des libs core joomla ?
0
hannao Messages postés 98 Date d'inscription mercredi 5 novembre 2003 Statut Membre Dernière intervention 26 janvier 2012
18 mai 2009 à 20:14
exact nautilus99 , c'est du joomla, le problème est que l'on m'a confié ce travail aolrs que je ne connais pas du tout joomla alors avec ce que tu me dit il doit donc y avoir quelque chose à faire de plus simple que ce que j'ai fait
pourrais tu m'orienté un peu ce serais sympa cela me permettra d'apprendre joomla plus vite  .
sinon j'ai aussi appris que j'aurais pu utiliser des extensions pour faire mes redimensionnement d'images plutôt que de tout coder à la main
, mais bon c'est fait. Je dois pour finir ce qui m'a été demandé
insérer un csv dans le content c'est a dire d'après ce que j'ai compris les articles.
dans ce même article je dois insérer mes photos.
Je ne connais pas bien le frameworks, je vais ouvent pourtant sur l'api de joomla.
Merci nautilus99 de ton aide.
0
nautilus99 Messages postés 661 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 18 septembre 2009 1
18 mai 2009 à 20:24
Il existe uncomposant admin tout fait pour l'import d'articles en csv, pourquoi réinventer la roue ?

Pour réussir ton composant supplémentaire, commences par utiliser directement les classes, ça évitera les problèmes futurs.

Regardes le code du comoosant content, et tu auras vraiment tout sous la main, y compris les diverses tables à alimenter, et comment s'insèrent le sliens image, pour rester compatible par exemple avce l'uage des extensions lightbox...
0
hannao Messages postés 98 Date d'inscription mercredi 5 novembre 2003 Statut Membre Dernière intervention 26 janvier 2012
18 mai 2009 à 21:32
merci  nautilus99 je comprends mieux la philosophie de joomla, je suis entrain de me faire l'api mais j'avoue que c'est large je suis aller dans framework et recherche ou plutôt visite l'ensemble.
Comme tu dis on ne va pas réinventer la roue alors si joomla le permet je vais me tenir bien au courant.
Merci je crois que j'étais parti sur une mauvaise piste : tout codé à la main.
0
Rejoignez-nous