Page 1 sur 2

mise en forme PHP

Posté : 12 déc. 2005, 17:48
par epilogg
Salut tout le monde, prêt à attaquer la semaine ?!! :lol:

Je viens aux conseils en fait. Avec une base de données et php, j'ai créé un agenda en ligne sur le net. Mais il est très très basique. La premiere chose que je voudrais faire. C'est changer la couleur de fond une ligne sur deux. Mais je sais pas comment dire ca à php. J'arrive à mettre un CSS pour l'ensemble du tableau mais pas ligne par ligne. Je peux appliquer un CSS en fonction des ID de lignes ? si vous aviez un peu de doc ce serait sympa, je n'en trouve pas. Merci :wink:

Posté : 12 déc. 2005, 18:09
par Grummfy
Hello, avec les css tu pourais assez facielment (enfin normalement) le faire via les css 2 ou 3 mais bon comme c'est pas suporter par tous....

sinon le plus simple:
lorsque tu généres ton tableau en php tu fais ecrire une fois sur deux que la class css doit être différent.
tu test avec modulo si c'est divisible pas deux

donc :
<html>
	<head>
		<style>
			.maclass1 {background-color: #fff000;}
			.maclass2 {background-color: #000fff;}[/code]
		</style>
	</head>
	<body>
		<table>
		<?php
		for ($i=0; $i<=10; $i++)
		{
			if ($i % 2)
			{
				echo '<tr><td class="maclass1">' . $i . '</td></tr>';
			}
			else
			{
				echo '<tr><td class="maclass2">' . $i . '</td></tr>';
			}
		}
		?>
		</table>
	</body>
</html>

Posté : 12 déc. 2005, 18:25
par epilogg
merci beaucoup !

j'ai bien compris le principe et c'est tout à fait ça que je cherchais! par contre j'ai des problemes de syntaxe, je sais pas si tu peux m'aider. J'arrive pas à insérer mon " echo $data['heure'] " dans le code que tu m'as donné, j'ai essayé à plusieurs endroits mais il en veut pas... t'as une idée ?

Posté : 12 déc. 2005, 19:33
par Grummfy
<html>
    <head>
        <style>
            .maclass1 {background-color: #fff000;}
            .maclass2 {background-color: #000fff;}[/code]
        </style>
    </head>
    <body>
        <table>
        <?php
        for ($i=0; $i<=10; $i++)
        {
            if ($i % 2)
            {
                echo '<tr><td class="maclass1">' . $i . ' - ' . $data['heure'] . '</td></tr>';
            }
            else
            {
                echo '<tr><td class="maclass2">' . $i . ' - ' . $data['heure'] . '</td></tr>';
            }
        }
        ?>
        </table>
    </body>
</html>
par exemple

Posté : 13 déc. 2005, 11:38
par epilogg
oki j'ai passé un bout de soirée dessus hier soir mais y a encore deux ou trois trucs que j'ai pas capté (et oui je suis une buse... )

mon code ressemble à ceci :

<table width="530" border="0" cellpadding="0" cellspacing="0">
<tr>
<?php 
        for ($i=0; $i<=10; $i++) 
        { 
            if ($i % 2) 
            { 
                echo '<tr><td width="90" height="40" valign="top" class="maclass1">' . $i . ' - ' . $data['heure'] . '</td>';
				echo '<td width="350" valign="top" class="maclass1">' . $i . ' - ' . $data['type'] . '</td>';
				echo '<td width="90" valign="top" class="maclass1">' . $i . ' - ' . $data['prix'] . '</td></tr>';
				
            } 
            else 
            { 
                echo '<tr><td width="90" height="40" valign="top" class="maclass2">' . $i . ' - ' . $data['heure'] . '</td>';
				echo '<td width="350" valign="top" class="maclass2">' . $i . ' - ' . $data['type'] . '</td>';
				echo '<td width="90" valign="top" class="maclass2">' . $i . ' - ' . $data['prix'] . '</td></tr>';
            } 
        } 
        
		?>
		
</tr>
</table> 
au niveau de la mise en forme tableau, c'est nickel par contre je comprends pas pourquoi la boucle se répète indéfiniment... en effet, le meme champ de la base se répète 7 ou 8 fois, je vois pas d'ou vient le probleme... pour vous donner une idée http://sceno.fr/v3/index.php?page=ag_fev06

une p'tite idée ? :oops:

Posté : 13 déc. 2005, 12:10
par mere-teresa
Faut ptet lui demander les $data['type'] en fonction de $i non ?
Quelle est la structure de ton tableau $data ?

(astuce : fais un echo "<pre>"; var_dump($data); echo "</pre>"; en PHP)

Posté : 13 déc. 2005, 12:13
par epilogg
mon tableau se compose de 4 champs, le 1er ID, le second "heure" en text, le troisieme "type" en text et le quatrième " prix" si c'est bien ce que tu me demandes... ? j'essaie ton astuce

Posté : 13 déc. 2005, 12:21
par mere-teresa
Tu lui demandes d'afficher $data['type'] à chaque fois...donc il affiche la même variable non?
A moins que ton code pour le tableau ne soit déjà dans une boucle ?

Posté : 13 déc. 2005, 12:31
par epilogg
mon tableau n'est pas déjà dans une boucle.
je sais pas comment dire à php d'afficher $data['type1'] avec ma class1, $data['type2] avec ma class2, $data['type3'] avec ma class1 etc. sachant que type1 correspond à mon événément n°1 et ainsi de suite. je veux qu'il applique un style CSS une ligne sur deux en fait, peu importe le nombre d'événements et sans me répéter chaque événement. J'essaie ton astuce mais j'avoue pas capter grand chose. En tout cas, merci de te pencher sur mon sujet...

Posté : 13 déc. 2005, 12:39
par Cyrano
Au niveau du code actuellement indiqué, on peu simplifier un peu :
<table width="530" border="0" cellpadding="0" cellspacing="0">
  <tr>
<?php
        for ($i = 0; $i <= 10; $i++)
        {
            $class_css = ($i % 2) ? "maclass1" : "maclass2";
?>
    <td width="90" height="40" valign="top" class="<?php echo($class_css); ?>"><?php echo($i ." - ". $data['heure']); ?></td>
    <td width="350" valign="top" class="maclass1"><?php echo($i ." - ". $data['type']); ?></td>
    <td width="90" valign="top" class="maclass1"><?php echo($i ." - ". $data['prix']); ?></td>
<?php                
        }
?>
  </tr>
</table>
Ceci dit, rien n'indique en effet qu'il faut passer à la ligne suivante des résultats. Donc il faut procéder autrement. Proposition:
<table width="530" border="0" cellpadding="0" cellspacing="0">
  <tr>
<?php
        $i = 0;
        while($data = mysql_fetch_assoc($execution_requete))
        {
            $class_css = ($i % 2) ? "maclass1" : "maclass2";
?>
    <td width="90" height="40" valign="top" class="<?php echo($class_css); ?>"><?php echo($i ." - ". $data['heure']); ?></td>
    <td width="350" valign="top" class="maclass1"><?php echo($i ." - ". $data['type']); ?></td>
    <td width="90" valign="top" class="maclass1"><?php echo($i ." - ". $data['prix']); ?></td>
<?php
            $i++;
        }
?>
  </tr>
</table>

Posté : 13 déc. 2005, 13:41
par epilogg
Merci Cyrano :wink:

je commence légèrement à capter... mais j'ai encore un probleme, je sens que je vais encore passer pour un idiot... je me lance, mon code :
<style> 

            .maclass1 {background-color: #FFF000;} 
            .maclass2 {background-color: #000fff;}

</style>
 
<?php
	mysql_connect('localhost','root','');
	mysql_select_db('v3_essai');
	
	$requete='SELECT heure,type,prix FROM ag_fev1';
	
	  $i = 0;
        	$var = mysql_query($requete) or die;
		while($data = mysql_fetch_assoc($requete))
		
		$class_css = ($i % 2) ? "maclass1" : "maclass2";
	{
	
	?>

<table width="530" border="0" cellpadding="0" cellspacing="0">
  <tr>

    <td width="90" height="40" valign="top" class="<?php echo($class_css); ?>"><?php echo($i ." - ". $data['heure']); ?></td>
    <td width="350" valign="top" class="maclass1"><?php echo($i ." - ". $data['type']); ?></td>
    <td width="90" valign="top" class="maclass1"><?php echo($i ." - ". $data['prix']); ?></td>

<?php
            $i++;
			mysql_close();
        }
?>
  </tr>
</table> 
voila ou j'en suis, je maitrise pas du tout le mysql_fetch_assoc. le navigateur me répond donc " mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource
j'ai pourtant appliquer mes variables à la fonction mais voilou pas moyen de faire fonctionner! à l'image de Denisot, je suis "désolé"

cyrano, j'ai regardé ta réponse à the_grinch http://www.phpfrance.com/forums/voir_su ... 99559cd0d5
mais j'ai pas capté...

Posté : 13 déc. 2005, 13:59
par mere-teresa
Tu as fait un peu trop de copier-coller :
 $requete='SELECT heure,type,prix FROM ag_fev1';
    
      $i = 0;
            $var = mysql_query($requete) or die;
    //    while($data = mysql_fetch_assoc($requete)) 
while($data = mysql_fetch_assoc($var)) // ouiii

Posté : 13 déc. 2005, 18:28
par epilogg
J'étais motivé mais là je désespèèèèèèèère !! en plus c'est que le début :? vous me dites si vous en avez marre d'essayer de régler mon probleme, je le comprendrai parfaitement...

alors j'ai deux types de code (tous deux issus du sujet) le premier :
<link href="../../styles.css" rel="stylesheet" type="text/css">

<style> 
            .maclass1 {background-color: #FFF000;} 
            .maclass2 {background-color: #000fff;}
</style>
 
<?php
	mysql_connect('****,'****','****');
	mysql_select_db('****');
	
$requete='SELECT heure,type,prix FROM agenda_6';
    
      $i = 0;
            $var = mysql_query($requete) or die;
			while($data = mysql_fetch_assoc($var))
  
		$class_css = ($i % 2) ? "maclass1" : "maclass2";
	{
	
?>

<table width="530" border="0" cellpadding="0" cellspacing="0">
  <tr>

<?php
        for ($i=0; $i<=10; $i++)
        {
            if ($i % 2)
            {
                echo '<tr><td width="90" height="40" valign="top" class="maclass1">' . $i . ' - ' . $var['heure'] . '</td>';
                echo '<td width="350" valign="top" class="maclass1">' . $i . ' - ' . $var['type'] . '</td>';
                echo '<td width="90" valign="top" class="maclass1">' . $i . ' - ' . $data['prix'] . '</td></tr>';
                
            }
            else
            {
                echo '<tr><td width="90" height="40" valign="top" class="maclass2">' . $i . ' - ' . $data['heure'] . '</td>';
                echo '<td width="350" valign="top" class="maclass2">' . $i . ' - ' . $data['type'] . '</td>';
                echo '<td width="90" valign="top" class="maclass2">' . $i . ' - ' . $data['prix'] . '</td></tr>';
            }
        }
        
?> 

  </tr>
</table>

<?
}

mysql_close();
?>
qui donne ca : http://sceno.fr/v3/index.php?page=ag_fev06

donc la c cool j'ai bien mes CSS qui s'appliquent à chaque ligne mais j'ai rien à l'intérieur de ces lignes donc ca m'inquiète (ca vient pas de la base de données ni de mes id de connexion) comme d'hab je comprends pas.

et le second qu'on m'a conseillé également :
<style> 
            .maclass1 {background-color: #FFF000;} 
            .maclass2 {background-color: #000fff;}
</style>
 
<?php
	mysql_connect('***','****','****');
	mysql_select_db('*****');
	
$requete='SELECT heure,type,prix FROM agenda_6';
    
      $i = 0;
            $var = mysql_query($requete) or die;
			while($data = mysql_fetch_assoc($var))
  
		$class_css = ($i % 2) ? "maclass1" : "maclass2";
	{
	
	?>

<table width="530" border="0" cellpadding="0" cellspacing="0">
  <tr>

    <td width="90" height="40" valign="top" class="<?php echo($class_css); ?>"><?php echo($i ." - ". $data['heure']); ?></td>
    <td width="350" valign="top" class="maclass1"><?php echo($i ." - ". $data['type']); ?></td>
    <td width="90" valign="top" class="maclass1"><?php echo($i ." - ". $data['prix']); ?></td>

<?php
            $i++;
       
?>
  </tr>
</table>

<?
}

mysql_close();
?>
qui donne ca : http://sceno.fr/v3/index.php?page=ag_fev07

j'avoue que je suis à bout là... à deux doigts de mettre un coup de tête à mon écran :evil:
toutes les idées sont les bienvenues (exceptées toutes celles qui ont trait à la complexité de faire pousser des patates sur mars :? )

Posté : 13 déc. 2005, 19:09
par mere-teresa
Le second code : oublie ! Ta boucle ne tourne pas (et pour cause l'accolade n'a rien avant, pas un for, pas un while...).
Quand à la première, tu as pas un souci ?

Fais (avant ta boucle et après avoir récupéré les données de la bdd) un var_dump de $data.

Posté : 14 déc. 2005, 12:51
par epilogg
aller on rattaque ! zarabotak.com

Perso, je préfère la premiere méthode, parce qu'au moins je la comprends ! :oops: donc j'ai revu les erreurs que t'avais noté MT et ca donne
 

<style> 
            .maclass1 {background-color: #FFF000;} 
            .maclass2 {background-color: #000fff;}
</style> 
 
<?php
 
		mysql_connect _____;
		mysql_select_db _____;	
		$requete='SELECT heure,type,prix FROM agenda_6';
	
	$var = mysql_query($requete) or die;
	while ($data=mysql_fetch_assoc($var))
	{
	?>

  

<table width="530" border="0" cellpadding="0" cellspacing="0">
<tr>
<?php 
        for ($i=0; $i < count($data['heure']); $i++) 
        { 
            if ($i % 2) 
			{
                echo '<tr><td width="90" height="40" valign="top" class="maclass1">' . $i . ' - ' . $data['heure'] . '</td>';
				echo '<td width="350" valign="top" class="maclass1">' . $i . ' - ' . $data['type'] . '</td>';
				echo '<td width="90" valign="top" class="maclass1">' . $i . ' - ' . $data['prix'] . '</td></tr>';
				
            } 
            else 
            { 
                echo '<tr><td width="90" height="40" valign="top" class="maclass2">' . $i . ' - ' . $data['heure'] . '</td>';
				echo '<td width="350" valign="top" class="maclass2">' . $i . ' - ' . $data['type'] . '</td>';
				echo '<td width="90" valign="top" class="maclass2">' . $i . ' - ' . $data['prix'] . '</td></tr>';
            } 
        } 
        
		?>
		
</tr>
</table>

<?
		}
		
		mysql_close();
		
	?> 
Dans la boucle j'ai mis
 for ($i=0; $i < count($data['heure']); $i++) 
qui donne http://sceno.fr/v3/index.php?page=ag_fev06 donc la je m'approche pas mal de ce que je veux sauf que j'ai pas un CSS différent une ligne sur deux (en gros ce que je veux faire depuis deux jours en vain!!) par contre avec cette boucle
for ($i=0; $i <=10; $i++)
j'ai bien un CSS différent une ligne sur deux mais les memes données se répètent et j'arrive pas à modifier ca... en gros je nage complètement !!