Gå til innhold

[Løst]Annenhver tabell med farge?


Anbefalte innlegg

Skrevet (endret)

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
Videoannonse
Annonse
Skrevet (endret)

$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
Skrevet

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();
?>

Skrevet (endret)

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
Skrevet

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?

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

 

Nei, dette vil nok ikke fungere. ;)

 

Hehe, ser jeg glemte noe ganske viktig der ja :whistle:

 

Likte måten du løste det på foresten, aldri tenkt sånn på det jeg :)

Skrevet (endret)
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
Skrevet (endret)

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
Skrevet

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;
}

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...