4588pkdkrikue5c Skrevet 29. juni 2009 Del Skrevet 29. juni 2009 (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 29. juni 2009 av steffenz Lenke til kommentar
funkyboy Skrevet 29. juni 2009 Del Skrevet 29. juni 2009 (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 29. juni 2009 av funkyboy Lenke til kommentar
Asbjørn T. Skrevet 29. juni 2009 Del Skrevet 29. juni 2009 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
fhugas Skrevet 29. juni 2009 Del Skrevet 29. juni 2009 (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 29. juni 2009 av fhugas Lenke til kommentar
funkyboy Skrevet 29. juni 2009 Del Skrevet 29. juni 2009 if($class == $class1) $class = $class2; Nei, dette vil nok ikke fungere. Lenke til kommentar
4588pkdkrikue5c Skrevet 29. juni 2009 Forfatter Del Skrevet 29. juni 2009 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
fhugas Skrevet 29. juni 2009 Del Skrevet 29. juni 2009 if($class == $class1) $class = $class2; Nei, dette vil nok ikke fungere. Hehe, ser jeg glemte noe ganske viktig der ja Likte måten du løste det på foresten, aldri tenkt sånn på det jeg Lenke til kommentar
funkyboy Skrevet 29. juni 2009 Del Skrevet 29. juni 2009 (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 29. juni 2009 av funkyboy Lenke til kommentar
xibriz Skrevet 3. juli 2009 Del Skrevet 3. juli 2009 (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 Endret 3. juli 2009 av xibriz Lenke til kommentar
Yankes Skrevet 6. juli 2009 Del Skrevet 6. juli 2009 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå