mise en forme PHP

Eléphant du PHP | 90 Messages

12 déc. 2005, 17:48

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:

Eléphant du PHP | 142 Messages

12 déc. 2005, 18:09

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>

Eléphant du PHP | 90 Messages

12 déc. 2005, 18:25

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 ?

Eléphant du PHP | 142 Messages

12 déc. 2005, 19:33

<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

Eléphant du PHP | 90 Messages

13 déc. 2005, 11:38

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:

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

13 déc. 2005, 12:10

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)
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphant du PHP | 90 Messages

13 déc. 2005, 12:13

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

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

13 déc. 2005, 12:21

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 ?

Eléphant du PHP | 90 Messages

13 déc. 2005, 12:31

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...

Mammouth du PHP | 19672 Messages

13 déc. 2005, 12:39

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>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 90 Messages

13 déc. 2005, 13:41

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é...

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

13 déc. 2005, 13:59

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
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphant du PHP | 90 Messages

13 déc. 2005, 18:28

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 :? )

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

13 déc. 2005, 19:09

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.
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphant du PHP | 90 Messages

14 déc. 2005, 12:51

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 !!
Modifié en dernier par epilogg le 14 déc. 2005, 13:51, modifié 1 fois.