8795 sujets

Développement web côté serveur, CMS

Bonjour,

Je voudrais afficher une image de fond dont l'url vient d'une variable PHP

Je pensais donc faire comme ceci mais visiblement ma syntaxe est fausse :

background: url("<? echo $img_background ?>") no-repeat top center;


J'ai debugé pour tester le contenu de ma variable, pas de problème de ce coté.
La variable est définie avant l'appel de la feuille CSS, donc la aussi l'erreur ne vient surement pas de ma variable mais bien de la syntaxe dans le CSS (Je suppose...)

Merci de votre aide et bon week end Smiley cligne
Modifié par supercanard (21 Jul 2007 - 15:06)
Ca devrait fonctionner. Assure-toi que le fichier se termine bien par .php, style style.php. Et appelle-le bien par
<link rel="stylesheet" type="text/css" href="style.php" />

Ca posera pas de problème, l'extension ne servant strictement à rien (sauf à indiquer au serveur que le fichier contient du php.


Note : n'utilise jamais la balise "<?", mais plutôt "<?php". Certains serveurs désactivent <?
Salut Smiley cligne ,

je vois plusieurs erreurs possibles :

- soit ta feuille de style n'a pas une extension en .php

- soit dans ta feuille de style tu n'as pas la ligne header("Content-type: text/css");

- soit tu ne passes pas ta variable en get à ta feuille de style (et donc elle est vide au moment de ton echo)

- soit tu as un problème de chemin (depuis ta css jusqu'à l'image)

- soit toutes ces erreurs en même temps Smiley lol .


Un exemple qui fonctionne :
index.php
<?php
$image = '../../include/images/fondsite.gif';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Document sans nom</title>
<link rel="stylesheet" type="text/css" href="include/css/styles_test.php?image=<?php echo $image ?>" media="screen" />
</head>
<body>
blablabla
</body>
</html>

styles_test.php
<?php
header("Content-type: text/css");
$image = (isset($_GET['image'])) ? $_GET['image'] : '';
?>
body {
	background:url(<?php echo $image ?>);
}


Bon mais du coup c'est un peu compliqué vu ce que tu veux faire Smiley ohwell ... Donc tu pourrais simplifier en laissant ta feuille de style en .css et en faisant :
index.php
<?php
$image = 'include/images/fondsite.gif';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Document sans nom</title>
<link rel="stylesheet" type="text/css" href="include/css/styles.css" media="screen" />
<style type="text/css">
body {
background:url(<?php echo $image ?>);
}
</style>
</head>
<body>
blablabla
</body>
</html>

A+ Smiley smile
Modifié par Heyoan (21 Jul 2007 - 14:56)
Merci pour vos réponses.
L'extension etait pas . php (un oubli)
Maintenant par contre ma feuille de style n'est pas prise en compte.
Je suis un peu perdu, voilà mon code exact :

Dabord la variable :
<? echo $img_background= 'img/'.$_SESSION['background'] ?>;


Ensuite l'appel CSS:
<link href="styles.php" rel="stylesheet" type="text/css" />


Le fichier styles.php:
<php
echo '
body,html {
font-family: verdana;
margin: 0;
background: url($img_background) no-repeat top center;
}

Suite...
'
?>

Modifié par supercanard (21 Jul 2007 - 14:47)
Heu... tu as lu ma réponse Smiley rolleyes ?

Il n'y a pas la ligne header et tu ne passes pas ta variable en get...

*Edit: d'autre part je vois 2 erreurs dans ton code : ce n'est pas
<? echo $img_background= 'img/'.$_SESSION['background'] ?>;
mais
<?php $img_background= 'img/'.$_SESSION['background']; ?>


Et ce n'est pas
<php
echo '
body,html {
font-family: verdana;
margin: 0;
background: url($img_background) no-repeat top center;
}
Suite...
'
?>
mais
<php
echo [b][#blue]"[/#][/b]
body,html {
font-family: verdana;
margin: 0;
background: url($img_background) no-repeat top center;
}
Suite...
[b][#blue]"[/#][/b]
?>

Modifié par Heyoan (21 Jul 2007 - 15:03)
Heyoan a écrit :
Heu... tu as lu ma réponse Smiley rolleyes ?

Il n'y a pas la ligne header et tu ne passes pas ta variable en get...


Oui
En fait je me suis embrouillé totalement mais je viens de corriger le probleme :


<? include "styles.php" ?>


Et le fichier styles.php
<style type="text/css">
body,html {
font-family: verdana;
margin: 0;
background: url(<? echo $img_background ?>) no-repeat top center;
}
h1 {
font-size: 16px; ect...


Merci pour votre aide
Oui je vais le faire ^^ Sinon pour les erreurs PHP quand il n'y a qu'une seule ligne on est pas obligé de terminer par ; mais bon c'est vrai mieux d'en prendre l'habitude. Pour le coup des " à la place des ' la aussi les avis sont partagés. Perso je touve plus simple d'utiliser les ' quand il y a des variables au milieu des chaine de caractères et parrait'il c'est plus rapide, puisque PHP ne cherche pas à interpreter dans ce cas. Enfin ça e tient à quelques chouillas, mais bon tout ça pour dire que c'ets pas une erreur d'utiliser les ' au lieu es ", question d'habitude et de préférences. Merci pour votre aide en tous cas Smiley cligne
supercanard a écrit :
Pour le coup des " à la place des ' la aussi les avis sont partagés. Perso je touve plus simple d'utiliser les ' quand il y a des variables au milieu des chaine de caractères et parrait'il c'est plus rapide, puisque PHP ne cherche pas à interpreter dans ce cas.
Oui sauf que si tu écris :
echo 'ma variable est égale à $mavar';
cette dernière ne sera pas interprétée Smiley cligne .

Il faut donc mettre :
[b]soit[/b]
echo 'ma variable est égale à '.$mavar;

[b]soit[/b]
echo "ma variable est égale à $mavar";
a écrit :
Sinon pour les erreurs PHP quand il n'y a qu'une seule ligne on est pas obligé de terminer par ; mais bon c'est vrai mieux d'en prendre l'habitude.


Tiens ... personne n'a tilté sur ce passage ? Smiley sweatdrop

Le ; n'est pas facultatif en PHP (ce n'est pas comme en Ruby, Javascript & cie) ! (C'est d'ailleurs l'erreur la plus courante qu'on se chope en se lançant en PHP ...) Smiley decu

<edit>Autant pour moi, je ne savais pas que le ?> indique implicitement la fin de l'instruction ... </edit>
Modifié par yodaswii (04 Aug 2007 - 00:38)
Ben même si C MAL, tu n'es effectivement pas obligé de mettre le ; sur la dernière (ou la seule) ligne de ton script... Smiley murf