Gå til innhold

[Løst]Annenhver tabell med farge?


Anbefalte innlegg

Hei,

Eg driv å lager ein tabell med data henta ut frå MySQL.

Lista har to moglege fargar, og skifter for kvar rad PHP skriv ut.

Korleis kan eg gjere det på ein enkel og elegant måte? Her kjem koden så dei forstår betre:

 

echo '<table id="navn" cellspacing="0"> <tbody>';
echo '<tr class="merket">';
echo "<td>$1"." $modell</td>";
echo "<td>$2</td>";
echo "<td>$3</td>";
echo "<td>$4</td>";
echo "<td>$5</td>";
}
// så vil eg ha ein med class som ikkje er merka annankvar gong dette kjøres.

 

Eg tenkjer på å bruke while, men korleis?

Endret av steffenz
Lenke til kommentar
Videoannonse
Annonse

$i = 1;
$p = '<table id="navn">';
while($row = mysql_fetch_array($en_eller_annen_spoerring)) {
$class = ($i % 2 == 1) ? 'enten' : 'eller';
$p .= '<tr class="' . $class . '">';
$p .= '<td>'. $row['data_1'] .'</td>';
$p .= '<td>'. $row['data_2'] .'</td>';
$p .= '<td>'. $row['data_3'] .'</td>';
$p .= '<td>'. $row['data_4'] .'</td>';
$p .= '<td>'. $row['data_5'] .'</td>';
$p .= '</tr>';
$i ++;
}
$p .= '</table>';

 

Du må gjøre noe ala dette. Merk bruken av modulo operator på $class. :)

Endret av funkyboy
Lenke til kommentar

Dette burde fungere, men jeg mener nå at det skal gå ann å krypme koden mer enn det det der. Nå vet jeg ikke hvordan tilkoblingskoden for databasen din ser ut, men her er et forslag:

 

<?php
$host="localhost"; // Host name
$username=""; // Mysql username
$password=""; // Mysql password
$db_name="test"; // Database name
$tbl_name="test_mysql"; // Table name

// Connect to server and select databse
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

$sql="SELECT * FROM $tbl_name";
$result=mysql_query($sql);

// Define $color=1
$color="1";

echo '<table width="400" border="1" align="center" cellpadding="2" cellspacing="0">';
while($rows=mysql_fetch_array($result)){

// If $color==1 table row color = #FFC600
if($color==1){
echo "<tr bgcolor='#FFC600'>
<td>".$rows['id']."</td><td>".$rows['name']."</td><td>".$rows['email']."</td>
</tr>";
// Set $color==2, for switching to other color
$color="2";
}

// When $color not equal 1, use this table row color
else {
echo "<tr bgcolor='#C6FF00'>
<td>".$rows['id']."</td><td>".$rows['name']."</td><td>".$rows['email']."</td>
</tr>";
// Set $color back to 1
$color="1";
}

}
echo '</table>';
mysql_close();
?>

Lenke til kommentar

Eller noe så enkelt som

 

 

$p = '<table id="navn">';

 

$class1 = 'navn1';

$class2 = 'navn2';

 

$class = $class1;

 

while($row = $db->fetch_array($result)) {

if($class == $class1) $class = $class2;

 

$p .= '<tr class="' . $class . '">';

$p .= '<td>'. $row['data_1'] .'</td>';

$p .= '<td>'. $row['data_2'] .'</td>';

$p .= '<td>'. $row['data_3'] .'</td>';

$p .= '<td>'. $row['data_4'] .'</td>';

$p .= '<td>'. $row['data_5'] .'</td>';

$p .= '</tr>';

}

 

$p .= '</table>';

 

 

Edit: class navn i stedet for farger ;)

Endret av fhugas
Lenke til kommentar

Takk! Det fungerte utmerka, funkyboy!

Men korleis gjer du det?

 

Eg tenkte først å nytte partall og oddetall og fann nok liknande - er det det du har gjort? 1,3,5 er ein farge medan 2,4 og 6 er ein anna?

 

Eg tenkte somsagt nemleg på å gjer nettopp det, men eg var redd at hvis eg nytta ID'en i tabellen kunne kanskje to rader få samme farge etter kvarandre om eg sletta noko? Forstår du korleis eg tenkjer?

Lenke til kommentar
Takk! Det fungerte utmerka, funkyboy!

Men korleis gjer du det?

 

Eg tenkte først å nytte partall og oddetall og fann nok liknande - er det det du har gjort? 1,3,5 er ein farge medan 2,4 og 6 er ein anna?

 

Eg tenkte somsagt nemleg på å gjer nettopp det, men eg var redd at hvis eg nytta ID'en i tabellen kunne kanskje to rader få samme farge etter kvarandre om eg sletta noko? Forstår du korleis eg tenkjer?

 

Bra det fungerte. :)

 

Det som egentlig skjer, er at jeg legger til variabel $i (kort for integer) i starten. For hver gang loopen kjøres, legges det til 1 i verdi ($i ++). Det er denne variabelen du benytter for å sjekke om du skal ha skrive ut verdi for enten partall eller oddetall. Variabelen $class assignes videre via short notation/syntax. Det kunne forsåvidt også blitt gjort på følgende måte, (noe som dog er mer tungvint å skrive);

 

if ($i % 2 == 1) {$class = "enten";}
else {$class = "eller";}

 

Dersom det blir igjen en rest om variabelen deles på to, er tallet et oddetall. $class vil dermed assignes til å være 'enten'. :)

 

Edit: Det å legge til farge i databasen er nok ikke noe lurt, som du selv sier. Skriv det heller ut i looper, eventuelt benytt javascript til å style tabeller på tilsvarende måte som det er blitt gjort her. Du slipper dermed unødvendig data i tabeller, som igjen kan føre til treg lasting.

Endret av funkyboy
Lenke til kommentar

Uten å gidde å lese hva andre har skrevet, og jeg ignorerer helt at problemet er løst, men jeg kjeder meg og har 15 min å slå ihjel, så her er min måte å gjøre det på.

 

Man definerer 2 stiler i css filen, f.eks.:

 

tr.row1 { background-color: red; } 
tr.row2 { background-color: blue; }

 

og da kan man enkelt skrive php-koden slik:

 

<table>
<?php
$rowStyle = 1;

for ($i = 1; $i < 10; $i++) {
  ?><tr class="row<?php echo $rowStyle; ?>">
	   <td>Rad nr. <?php echo $i; ?></td>
  </tr><?php

  $rowStyle = 3 - $rowStyle;
}
?>
</table>

 

Da slo jeg ihjel 5 minutter, på tide å ta ferie :D

Endret av xibriz
Lenke til kommentar

Ser problemet ditt allerede er løst, men poster det her alikevel.

Lettere enn det her får du det ikke:

	$farge1 = "farge1";
$farge2 = "farge2";

$farge = ($i++ & 1) ? $farge1 : $farge2;

 

da skriver du bare print("<td class=\"$farge\">");

 

CSSen blir da f.eks.

.farge1 {
background-color: #ffffff;
}

.farge2 {
background-color: #cccccc;
}

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...