Page 1 sur 1

Correction d'une ligne svp

Posté : 02 août 2005, 08:03
par Manio 54
Bonjour !! Alors j'ai piké une fonction mais je n'arrive pas a la faire marcher car je n'arrive pas a afficher l'adresse de ma photo !!!

Regarder plutôt mon code :
function create_thumb("./photo/.'$lien'.",400 ,300 );
Enfait la requete SQL me rapporte que le nom de la photo et cette photo se trouve dans le dossier photo mais je n'arrive pas a faire pour que le lien soit bon !!!

Merci de votre aide !!![/php][/code]

Posté : 02 août 2005, 08:10
par Cyrano
Tu as en effet un problème de concaténation de chaîne : corrigé :
function create_thumb("./photo/".$lien,400 ,300 );
PHP dans cette fonction va traiter chacun des trois paramètres séparément. Donc tu dois les construire séparément aussi : tu assembles un bout de chaîne (./photos/) et une variable PHP ($lien) . Dans tu PHP, tu dois mettre la chaine de caractères entre guillemets et concaténer avec l'opérateur de concaténation qu'est le point : ce qui donne :

Code : Tout sélectionner

- "./photo/".$lien - | ^ | ^ | - | chaine | PHP |

Posté : 02 août 2005, 08:15
par Manio 54
Je sais pas si sa vient de moi mais

Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ')'

juste a la ligne de la fonction et il n'y a qu'elle !!

Posté : 02 août 2005, 08:18
par slipndi
Bonjour
Peu tu nous copier le code avec les lignes avant s'il te plait, car le bug peut se situer avant, ou si tu as fait une erreur de recopiage ;)

Posté : 02 août 2005, 08:21
par Cyrano
Note que j'ai corrigé la concaténation: maintenant il reste en effet un problème : le ";" après la parenthèse de fermeture. Après une ligne function xyz(), on attend un "{" à moins que ce soit une interface en POO. Donc :
function create_thumb("./photo/".$lien,400 ,300 )
{
    /* Code de ta fonction */
}

Posté : 02 août 2005, 18:27
par Manio 54
la fonction a déja été codé c'est pour cela que j'ai mis le ; !!!

je vous passe la fonction
<?php
//Pour fonctionner, la fonction aurra besoin de plusieurs informations: l'adresse de l'image à redimensionner, la largeur et la hauteur maximale de la miniature.
function create_thumb($adresse, $Xmax, $Ymax)
{
//On commence par vérifier le type de l'image, il faut donc récupérer l'extension du fichier.
   //L'extension se trouve après le point, on utilise strrchr(), qui renvoie tout ce qui se trouve à partir du point
     $ext = strrchr($adresse,'.');
   //Comme on a pris le point, il faut le retirer, on va donc utiliser substr(), qui va prendre tout ce qui commence après le premier caractère (le point)
     $ext = substr($ext,1);
   //Enfin, nous allons mettre l'extension en minuscule
     $ext = strtolower($ext);

//Une fois que nous avons l'extension, nous allons vérifier qu'elle est utilisable, si elle ne l'est pas, la fonction s'arrête et retourne FALSE
   if ($ext !== 'gif' AND $ext !== 'jpg' AND $ext !== 'jpeg' AND $ext !== 'png') return FALSE;

//Il faut maintenant ouvrir l'image.
   if ($ext == 'gif')                   $res1 = imagecreatefromgif($adresse);
   if ($ext == 'jpg' || $ext == 'jpeg') $res1 = imagecreatefromjpeg($adresse);
   if ($ext == 'png')                   $res1 = imagecreatefrompng($adresse);

//Ensuite il faut récupérer la taille de l'image
   $x1 = imagesx($res1);
   $y1 = imagesy($res1);

//Maintenant, nous allons voir de combien il faudrait réduire l'image pour qu'elle soit en dessous du maximum permis
//On calcul donc le rapport entre le maximum et la taille de l'image. Ainsi, si l'image fait 300px de large, et que le maximum est de 100px, l'image devra être redimensionné à 1/3 (100 / 300 <:> Xmax / X)
   $rx = $Xmax / $x1;
   $ry = $Ymax / $y1;

//Il faut maintenant vérifier de combien il faut réduire l'image pour qu'elle ne dépasse NI en largeur, NI en hauteur.
//Ainsi, si il faut redimensionner à 1/3 en largeur, et à 1/4 en hauteur, nous mettrons l'image à 1/4, car nous souhaitons garder les proportions
//On prend donc le rapport le plus petit
   $r0 = ($rx < $ry) ? $rx : $ry ;

//Ensuite, pour connaitre la taille de la miniture, il ne reste plus qu'à multplié la taille d'origine par le rapport
   $x2 = $x1 * $r0;
   $y2 = $y1 * $r0;

//On crée l'image qui servira à mettre la miniature, avec la largeur et la hauteur calculée jsute avant
   $res2 = imagecreatetruecolor($x2,$y2);

//On redimensionne l'image originale et on colle la miniature sur la nouvelle image, pour pouvoir l'enregistrer.
   imagecopyresized($res2,$res1,0,0,0,0,$x2,$y2,$x1,$y1);
   
//On peut retirer l'images originale de la mémoire, pour pouvoir réenregistrer la miniature à la place.
   imagedestroy($res1);

//On enregistre l'image à la place de l'originale
   if ($ext == 'gif')                   $reussi = imagegif($res2,$adresse);
   if ($ext == 'jpg' || $ext == 'jpeg') $reussi = imagejpeg($res2,$adresse);
   if ($ext == 'png')                   $reussi = imagepng($res2,$adresse);

//On peut retirer le'image de la mémoire, puisqu'elle est sauvegardée sur le disque.
   imagedestroy($res2);

//On renvoie le résultat, si l'opération à réussi, $reussi vaut TRUE, sinon, il vaudra FALSE
   return $reussi;
}
?> 

Posté : 03 août 2005, 00:47
par NoNos
Lors de l'appel de ta fonction il ne faut pas mettre function devant

Posté : 03 août 2005, 07:45
par Manio 54
Merci !! J'avais reussi a faire marcher mais j'avais tout changé et en effet quand je ne marquais pas sn nom et sa marchait nikel merci de m'avoir expliquer l'erreur !!

Posté : 03 août 2005, 07:47
par Manio 54
tite question quand j'ai appelé ma fonction a la fin je met le ; ou pas ?

Posté : 03 août 2005, 10:37
par Cyrano
Si tu as une fonction quelque part, par exemple
<?php
function xyz()
{
    //... code de la fonction
    return $zzz;
}
?>
Quand tu veux utiliser cette fonction pour transformer une valeur, tu feras:
<?php
//...
$valeur = xyz();
//...
?>
Donc là tu mets en effet lle ";" à la fin de l'instruction.