Page 1 sur 2
Combiner php et css
Posté : 06 juil. 2005, 11:26
par bzayid
Bonjour à tous,
Voici mon problème, j'essaie d'insérer du code php dans ma feuille de style
j'ai donc un fichier "index.php" qui comporte la ligne suivante
<link href="css.php" rel="stylesheet" type="text/css" />
et donc bien entendu le fichier "css.php"
Les valeurs que vont prendre les différents éléments de la css se trouvent dans une DB mysql. Je fais donc un appel aux éléments de la db au début du fichier "css.php". Ce qui donne:
<?
include ("connect.inc");
$table_css="css";
$rq="SELECT * FROM $table_css WHERE site_accn='$site_accn'";
$sq=mysql_query($rq);
while ($ligne=mysql_fetch_array($sq)) {
extract($ligne);
$body_color=$body_color;
$body_font=$body_font;
$body_font_color=$body_font_color;
$contener_border_color=$contener_border_color;
$navigation_background_color=$navigation_background_color;
}
?>
Code : Tout sélectionner
body {
font-family: <? echo "$body_font"; ?>;
font-size: 0.8em;
color: <? echo "$body_font_color"; ?>;
background-color: <? echo "$body_color"; ?>;
margin: 0;
padding: 0;
}
Seulement voilà, le style ne s'appliqe pas !!!
Note: ça fonctionne très bien en "simple" html...
Y a-t-il une astuce car j'ai déjà vu que c'était possible de combiner php et css (notamment dans PhpMyChat) ?
Merci d'avance pour votre aide.
Posté : 06 juil. 2005, 11:31
par mere-teresa
Enlève les guillemets aux echo...pas besoin pour les variables
Posté : 06 juil. 2005, 11:39
par bzayid
Merci, effectivement je n'en ai pas besoin...
Mais ça résoud pas mon problème

Re: Combiner php et css
Posté : 06 juil. 2005, 11:46
par mere-teresa
ESt-ce qu'au lieu d'utiliser la fonction extract() ce ne serait pas aussi simple de faire :
<?php
//utilise ?php au lieu du point d'interro tout seul
include ("connect.inc");
$table_css="css";
$rq="SELECT body_color, body_font, body_font_color, contener_border_color, navigation_background_color FROM $table_css WHERE site_accn='$site_accn'";
// plutôt que de demander * demande les champs dont tu as besoin, dans ton SELECT, MySQL préfère
$sq=mysql_query($rq);
$css = "";//on vide la variable au cas où
while ($ligne=mysql_fetch_array($sq)) {
//à chaque tour de boucle mets les données issues de la requête dans les variables à toi
//tu mettais une variable dans elle mm = manip inutile
$color=$ligne['body_color'];
$font=$ligne['body_font'];
$font_color=$ligne['body_font_color'];
$cont_bdr_color=$ligne['contener_border_color'];
$nav_bgd_color=$ligne['navigation_background_color'];
// pkoi ne pas en profiter pour raccourcir tes noms de variables = moins de risques d'erreur en les tapant...
$css .=" body {
font-family: ".$font.";
font-size: 0.8em;
color: ". $font_color .";
background-color: <". $color.";
margin: 0;
padding: 0;"
//mettre dans le while direct
// auras tu plusieurs CSS ?
}
?>
Posté : 06 juil. 2005, 11:53
par bzayid
Merci encore pour tes optimisations, c'est vrai que c'est bien plus propre comme ça.
Mais ça fonctionne toujours pas, le style ne s'applique pas!
Posté : 06 juil. 2005, 11:56
par mere-teresa
Mes conseils:
- vérifie le noms des colonnes dans ta table 
- exécute ta requête dans PHPMyAdmin ou Eskuel
- echo les variables dans le while avant de les echo dans la feuille de style... pour voir ce que cela donne
Posté : 06 juil. 2005, 11:56
par bzayid
Petite précision:
Avec Firefox: le style ne s'applique pas
Avec Explorer: le style s'applique sauf là où on a mis du php
Posté : 06 juil. 2005, 11:58
par pjl
2 remarques pour commencer :
- quand tu postes du code PHP, tu as un bouton PHP prévu afin de mettre le code en valeur et ca le rend beaucoup plus agréable à lire ;
- prends l'habitude d'utiliser le tag <?php à la place de <?. ca pourrait te poser des problèmes sur certains serveurs.
D'ou vient cette variable : $site_accn
Posté : 06 juil. 2005, 12:00
par mere-teresa
Je te propose d'enregistrer ton fichier sous... ou de mettre en commentaire ton script actuel et de mettre ça à la place
<?php
include ("connect.inc");
$table_css="css";
$rq="SELECT body_color, body_font, body_font_color, contener_border_color, navigation_background_color FROM $table_css WHERE site_accn='$site_accn'";
echo "<pre>".$rq."</pre>"; // et tu copies colles dans ce forum le résultat ou MIEUX tu testes ta requete dans PHPMyAdmin
$sq=mysql_query($rq);
while ($ligne=mysql_fetch_array($sq)) {
$color=$ligne['body_color'];
$font=$ligne['body_font'];
$font_color=$ligne['body_font_color'];
$cont_bdr_color=$ligne['contener_border_color'];
$nav_bgd_color=$ligne['navigation_background_color'];
echo "font devrait contenir :".$font."<br />";
echo $ligne['body_color']; // et tu copies colles ici ce que ça donne
}
?>
Posté : 06 juil. 2005, 12:00
par mere-teresa
2 remarques pour commencer :
- quand tu postes du code PHP, tu as un bouton PHP prévu afin de mettre le code en valeur et ca le rend beaucoup plus agréable à lire ;
Tu te drogues ?
Posté : 06 juil. 2005, 12:12
par bzayid
Je te propose d'enregistrer ton fichier sous... ou de mettre en commentaire ton script actuel et de mettre ça à la place
<?php
include ("connect.inc");
$table_css="css";
$rq="SELECT body_color, body_font, body_font_color, contener_border_color, navigation_background_color FROM $table_css WHERE site_accn='$site_accn'";
echo "<pre>".$rq."</pre>"; // SELECT body_color, body_font, body_font_color, contener_border_color, navigation_background_color FROM css WHERE site_accn='1'
$sq=mysql_query($rq);
while ($ligne=mysql_fetch_array($sq)) {
$color=$ligne['body_color'];
$font=$ligne['body_font'];
$font_color=$ligne['body_font_color'];
$cont_bdr_color=$ligne['contener_border_color'];
$nav_bgd_color=$ligne['navigation_background_color'];
echo "font devrait contenir :".$font."<br />";
echo $ligne['body_color']; // font devrait contenir :Geneva, Arial, Helvetica, sans-serif
#6D7F91
}
?>
Il sort bien les bonnes valeurs...
Posté : 06 juil. 2005, 12:16
par bzayid
J'ai l'impression qu'à cause du php, firefox ne considère pas du tout la css tandis que Explorer ne considère que ce qui n'est pas en php
Si je ne met pas de php, ça fonctionne parfaitement!
Je comprends rien!
Posté : 06 juil. 2005, 12:16
par mere-teresa
Alors nouvel exercice : puisqu'apparemment tu récupères les bonnes infos dans la BDD, fais un echo de $css (enfin ce que j'ai renommé $css)...
Et colle nous le résultat ici
et si tu veux qu'on teste en local sur nos machines, mets nous un extrait HTML de ton fichier auquel (ne) s'applique (pas) cette CSS.
Tes propriétés ne sont pourtant pas extraordinaires ou incompatibles MSIE ?
Posté : 06 juil. 2005, 12:30
par bzayid
Voici le code de la page html:
<!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>
<title>TITRE</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link href="css_html.css" rel="stylesheet" type="text/css" /> //remplacer par css.php pour la css contenant le php
</head>
<body>
<div id="conteneur1">
<div id="conteneur2">
<div id="header">
<p>LOGO</p>
<p>DESCRIPTION</p>
<br />
</div>
<div id="haut">
<ul class="menuhaut">
<li>lien1</li>
<li>lien2</li>
<li>lien3</li>
<li>lien4</li>
<li>lien5</li>
<li>lien6</li>
</ul>
</div>
<div id="gauche"></div>
<div id="incrustationgauche"> <img src="images/scientifique.jpg" alt="scientifique" border="0" width="140px" />
</div>
<div id="droite">
</div>
<div id="centre">
<p class="menucentre_titre">TITRE DE LA PAGE</p>
<p>TEXTE</p>
</div>
<div id="pied">
<p>PIED DE PAGE</p>
</div>
</div>
</div>
</body>
Voici le code de la css:
(supprimer les parties php et remplacer les variables par des valeurs pour la css html)
<?php
include ("connect.inc");
$table_css="css";
$rq="SELECT body_color, body_font, body_font_color, contener_border_color, navigation_background_color FROM $table_css WHERE site_accn='$site_accn'";
$sq=mysql_query($rq);
while ($ligne=mysql_fetch_array($sq)) {
$color=$ligne['body_color'];
$font=$ligne['body_font'];
$font_color=$ligne['body_font_color'];
$cont_bdr_color=$ligne['contener_border_color'];
$nav_bgd_color=$ligne['navigation_background_color'];
}
?>
body {
font-family: <?php echo $font; ?>;
font-size: 0.8em;
color: <?php echo $font_color; ?>;
background-color: <?php echo $color; ?>;
margin: 0;
padding: 0;
}
a:hover {
color: #CC0000;
text-decoration: none;
}
#conteneur1 {
position: absolute;
width: 90%;
margin: 20px 35px 35px 35px;
padding: 15px;
background-color: #FFFFFF;
}
#conteneur2 {
width: 98%;
margin: 5px;
padding: 0px;
background-color:#FFFFFF;
border: 3px solid <?php echo $cont_bdr_color; ?>;
}
#header {
height: 80px;
background-color: #FFFFFF;
text-align: center;
margin-top: 20px;
}
#haut {
background-color: <?php echo $nav_bgd_color; ?>;
border: 1px solid #CEAA18;
text-align: center;
margin: 20px 15px 10px 15px;
height: 25px;
}
#centre {
background-color:#FFFFFF;
margin-left: 170px;
margin-right: 170px;
text-align: justify;
padding: 15px;
margin-top: 27px;
}
#gauche {
float: left;
left: 0px;
margin-top: 20px;
width: 150px;
padding: 15px;
}
#incrustationgauche {
float: left;
right:0;
margin-top: 20px;
width: 150px;
padding: 15px;
}
#droite {
float: right;
right:0;
margin-top: 20px;
width: 150px;
padding: 15px;
text-align: center;
}
#pied {
clear: both;
height: 80px;
margin-top: 30px;
background-color: #FFFFFF;
text-align: center;
}
.menuhaut {
list-style-type: none;
margin: 0px;
padding: 5px;
}
.menuhaut li {
display: inline;
}
.menuhaut a {
margin: 0 3px;
color: #003366;
font-weight: bold;
text-decoration: none;
}
.menuhaut a:hover {
text-decoration: none;
font-weight: bold;
color: #CC0000;
}
.header_titre {
font-weight: bold;
}
.menugauche {
list-style-type: square;
margin: 0;
padding: 0px 10px 0px 15px;
list-style-image: url(images/fleche.gif);
}
.menugauche_titre {
font-weight: bold;
text-decoration: underline;
}
.menugauche li {
margin-bottom: 5px;
}
.menugauche a {
margin: 0;
text-decoration: none;
}
.menugauche a:hover {
text-decoration: none;
color: #CC0000;
}
.menucentre_titre {
font-weight: bold;
color: #CC0000;
font-size: 1.3em;
}
p {
margin: 0 0 15px 0;
}
.gras {
font-weight: bold;
margin: 0 0 15px 0;
}
.italique {
font-style: italic;
margin: 0 0 15px 0;
}
.tableau {
text-align: left;
background-color: #E2E2E2;
border: 1px solid #CCCCCC;
margin: 0px 0px 30px 0px;
vertical-align: top;
}
Posté : 06 juil. 2005, 12:34
par mere-teresa
Voici le code de la css:
(supprimer les parties php et remplacer les variables par des valeurs pour la css html)
Ah bah non ! Tes valeurs doivent être générées, quand mm ! Dis donc, c'est pour cela que ça ne fonctionne pas...on veut le contenu de $css pas du PHP qui construit la CSS.
Parce que ce serait un problème de génération de ta CSS si tout marhce en dur mais pas en dynamique !