problème avec les caracteres speciaux

Eléphanteau du PHP | 10 Messages

25 juil. 2005, 13:51

bonour à tous;
je vous explique avant d'entrer ds le vif du sujet en quoi mon projet consiste,
je souhaite réaliser une galerie d'images dynamiques
voici les fonctions que je souhaite:

-interface administrateur qui permette de rentrer les commentaires (stockés ds une base de donnée) et autres infos sur les images.
-les images en petit format sont placées ds un dossier du site, au rafraichissement de la page "banque images" les noms des images sont récupérés et stockés ds une base, puis utilisés pour afficher l'image "petit format sur la page "banque images", la mise en forme est faite avec les css, et les commentaires sont mis automatiquement en dessous de chaque images.
- derniere fonction qui me pose problème : sur un clic d'une image petit format dans la galerie une popup s'ouvre avec l'image en grand format, chaque popup est crée automatiquement en même temps que le rafraichissement de la page "image banques". les grandes images sont ds un autre dossier et porte le même nom que les petites.

pour créer ses popups automatiques j'ai utilisé la fonction touch ("monfichier.php",time()); et la fonction fwrite($id_file,"mon code de ma page"); $id_file représente l'identifiant de fichier qui est fait lors de la l'ouverture d'un fichier.

le problème c'est que ds mon code pour afficher l'image que contient ma popup j'ai le code suivant <img src=\"img_gd/<? $id_file2=fopen (\"cookiem.txt\",\"r\"); fpassthru($id_file2);?>\"> à la place de me garder $id_file2 il m'inscrit ds le code de la page "#25" (qui correspond à l'identifiant de fichier) le caractère "#" est interprété comme étant une mise en commentaire de ce qui suit et donc le script ne passe pas.
J'ai essayé avec "\" devant mais ca ne change rien. également en remplacant fpassthru par readfile qui utilise le nom du fichier et non pas l'identifiant de fichier mais le problème c'est qu'il faut utiliser un fclose($id_file2); ce qui revient au même.
j'ai testé aussi de passer par des cookies,mais le problème c'est qu'avec php le cookie doit être créer avant qu'auncune information d'écriture n'ai été envoyé à l'utilisateur et vue que le cookie est mis à jour ds une boucle qui récupère les valeurs ds la base de donnée, ca marche pour la première ligne mais pas pour les autres.(l'ecriture se fait progressivement à chaque boucle)

bref comment faire comprendre à php que # n'est pas une mise en commentaire mais bien l'identifiant de fichier.



voici le code utilisé pour la création de la page popup (création_fichier.php):


<?
//concatenation pour le nom du fichier $titre est une valeur de la table ref_tbl
//qui varie ds la boucle while du fichiers ecrit.php
$img=$titre.'.php';
//si le fichier $titre.php n'existe pas on le créé avec touch
if(!file_exists($img))
{
touch($img,time());
}


$id_file = fopen($img,"r+");
if(!$id_file) echo "erreur d'acces au fichier";


//ecriture ds la page
fwrite($id_file,"
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">
<html>
<head>
<title>Document sans nom</title>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">
<link href=\"style.css\" rel=\"stylesheet\" type=\"text/css\">
</head>
<body>
<img src=\"img_gd/<? $id_file2=fopen (\"cookiem.txt\",\"r\"); fpassthru($id_file2);?>\">
</body>
</html>");
fclose ($id_file);
?>


et celui ecrit ds le fichier issu de "création_fichier.php" :


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Document sans nom</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
<img src="img_gd/<? Resource id #24=fopen ("cookiem.txt","r"); fpassthru(Resource id #24);?>">
</body>
</html>tml>


merci par avance pour votre aide
bruno

Mammouth du PHP | 19672 Messages

25 juil. 2005, 13:54

Modération : nobo, merci de lire les règles du forum et de t'attarder en particulier sur la première ligne de l'article 3.

Reviens ensuite apporter les corrections nécessaires, merci
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 10 Messages

25 juil. 2005, 15:44

désolé Cyrano, je connaissais pas les balises de mise en forme sur les forum, domage que l'on ne puisse éditer les messages, j'espere que cectte fois ce sera lisible :D
[Edit Cyrano] Pas prudent de te payer ma tête: mon pseudo, c'est Cyrano, pas cyanure ok ?[/Edit]

bonjour à tous
je vous explique avant d'entrer ds le vif du sujet en quoi mon projet consiste,
je souhaite réaliser une galerie d'images dynamiques
voici les fonctions que je souhaite:

-interface administrateur qui permette de rentrer les commentaires (stockés ds une base de donnée) et autres infos sur les images.
-les images en petit format sont placées ds un dossier du site, au rafraichissement de la page "banque images" les noms des images sont récupérés et stockés ds une base, puis utilisés pour afficher l'image "petit format sur la page "banque images", la mise en forme est faite avec les css, et les commentaires sont mis automatiquement en dessous de chaque images.
- derniere fonction qui me pose problème : sur un clic d'une image petit format dans la galerie une popup s'ouvre avec l'image en grand format, chaque popup est crée automatiquement en même temps que le rafraichissement de la page "image banques". les grandes images sont ds un autre dossier et porte le même nom que les petites.

pour créer ses popups automatiques j'ai utilisé la fonction touch
("monfichier.php",time()); et la fonction fwrite($id_file,"mon code de ma page"); $id_file représente l'identifiant de fichier qui est fait lors de la l'ouverture d'un fichier.

le problème c'est que ds mon code pour afficher l'image que contient ma popup j'ai le code suivant <img src=\"img_gd/<? $id_file2=fopen (\"cookiem.txt\",\"r\"); fpassthru($id_file2);?>\"> à la place de me garder $id_file2 il m'inscrit ds le code de la page "#25" (qui correspond à l'identifiant de fichier) le caractère "#" est interprété comme étant une mise en commentaire de ce qui suit et donc le script ne passe pas.
J'ai essayé avec "\" devant mais ca ne change rien. également en remplacant fpassthru par readfile qui utilise le nom du fichier et non pas l'identifiant de fichier mais le problème c'est qu'il faut utiliser un fclose($id_file2); ce qui revient au même.
j'ai testé aussi de passer par des cookies,mais le problème c'est qu'avec php le cookie doit être créer avant qu'auncune information d'écriture n'ai été envoyé à l'utilisateur et vue que le cookie est mis à jour ds une boucle qui récupère les valeurs ds la base de donnée, ca marche pour la première ligne mais pas pour les autres.(l'ecriture se fait progressivement à chaque boucle)

bref comment faire comprendre à php que # n'est pas une mise en commentaire mais bien l'identifiant de fichier.



voici le code utilisé pour la création de la page popup (création_fichier.php):
<? 
//concatenation pour le nom du fichier $titre est une valeur de la table ref_tbl 
//qui varie ds la boucle while du fichiers ecrit.php 
$img=$titre.'.php'; 
//si le fichier $titre.php n'existe pas on le créé avec touch 
if(!file_exists($img)) 
{ 
touch($img,time()); 
} 


$id_file = fopen($img,"r+"); 
if(!$id_file) echo "erreur d'acces au fichier"; 


//ecriture ds la page 
fwrite($id_file," 
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\"> 
<html> 
<head> 
<title>Document sans nom</title> 
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\"> 
<link href=\"style.css\" rel=\"stylesheet\" type=\"text/css\"> 
</head> 
<body> 
<img src=\"img_gd/<? $id_file2=fopen (\"cookiem.txt\",\"r\"); fpassthru($id_file2);?>\"> 
</body> 
</html>"); 
fclose ($id_file); 
?> 


et celui ecrit ds le fichier issu de "création_fichier.php" : 


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<title>Document sans nom</title> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
<link href="style.css" rel="stylesheet" type="text/css"> 
</head> 
<body> 
<img src="img_gd/<? Resource id #24=fopen ("cookiem.txt","r"); fpassthru(Resource id #24);?>"> 
</body> 
</html>
merci par avance pour votre aide
bruno

Eléphanteau du PHP | 10 Messages

25 juil. 2005, 16:25

désolé cyrano, je sortais d'unn autre forum, avec un posteur dont le speudo est cyanure, c'etait pas une envie de te payer ta tête sorry :?

Mammouth du PHP | 19672 Messages

25 juil. 2005, 16:40

Si tu ne souhaites pas qu'une variable PHP soit interprétée dans une chaine de caractères, il faut l'échapper:
<?php
//......
//ecriture ds la page
fwrite($id_file,"
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">
<html>
<head>
<title>Document sans nom</title>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">
<link href=\"style.css\" rel=\"stylesheet\" type=\"text/css\">
</head>
<body>
<img src=\"img_gd/<? \$id_file2=fopen (\"cookiem.txt\",\"r\"); fpassthru(\$id_file2);?>\">
</body>
</html>");
fclose ($id_file);
//....
?>
Regarde les changements de la valeur de img src.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 10 Messages

25 juil. 2005, 18:09

merci cyrano pour ton aide, je vais tester de suite :)