• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Die ersten 7 Zeilen einer generierten Tabelle hervorheben

fiedel

Mitglied
Hallo Forumsmitglieder!

Ich habe wieder einmal ein kleines Problem, bei dem ich nicht mehr weiter weiß...
und zwar lasse ich mit einer while-Schleife bestimmte Datenbankfelder in eine Tabelle schreiben (Code stark vereinfacht):
PHP:
echo "<table>\n";
        
while ($feld = mysql_fetch_assoc($res)) 
{
echo "<tr>\n";
echo "<td>" . $feld['title'] . "</td>\n";
echo "<td>" . $feld['description'] . "</td>\n";
echo "<td><a href='...'>Bearbeiten</a></td>\n";
echo "<td><a href='...'>Löschen</a></td>\n"
echo "</tr>\n";
}
        
echo "</table>\n";
Das klappt soweit, doch jetzt möchte ich noch, dass bei den ersten 7 Zeilen (<tr>) ein class-Attribut eingefügt wird. Leider weiß ich nicht, wie eine Schleife dazu aussehen muss, geschweige denn, welche Schleife ich verwenden soll (for oder while)... Ich hoffe ihr könnt mir helfen!

Danke im Voraus!

Gruß,
fiedel
 
Wenn du einfach einer $counter einfügst, die sich am Ende der Schleife um 1 erhöht (Startwert bei 1) und dann beim <tr> überprüfst ob $counter größer oder kleiner-gleich 7 ist? Sollte funktionieren.
 
Zähl innerhalb der bereits vorhandenen Schleife eine Variable hoch. Prüfe an der Stelle an der Du die Klasse setzen willst ob diese Variable kleinergleich 7 ist und wenn ja setze die Klasse.
 
Okay, danke euch beiden für die schnelle Antwort! Hat super funktioniert!

PHP:
echo "<table>\n";

$counter = 1;
     
while ($feld = mysql_fetch_assoc($res)) 
{
if($counter <= 7) {
   echo "<tr class=\"markiert\">\n";
} else {
   echo "<tr>\n";
}
echo "<tr>\n";
echo "<td>" . $feld['title'] . "</td>\n";
echo "<td>" . $feld['description'] . "</td>\n";
echo "<td><a href='...'>Bearbeiten</a></td>\n";
echo "<td><a href='...'>Löschen</a></td>\n"
echo "</tr>\n";
}
        
echo "</table>\n";
 
Na das kannst du doch genauso machen.. Mittendrin 2 Abfragen:

wenn $counter == 1 --> <tbody class="markiert">

und unten

wenn $counter == 7 --> </tbody>
 
Danke, Tar!

Hat funktioniert:
PHP:
echo "<table>\n";

$counter = 1;
     
while ($feld = mysql_fetch_assoc($res)) 
{
   if($counter == 1) {
     echo "<tbody class=\"markiert\">\n";
   }
   if($counter > 7) {
     echo "<tbody>\n";
   }
   echo "<tr>\n";
   echo "<td>" . $feld['title'] . "</td>\n";
   echo "<td>" . $feld['description'] . "</td>\n";
   echo "<td><a href='...'>Bearbeiten</a></td>\n";
   echo "<td><a href='...'>Löschen</a></td>\n"
   echo "</tr>\n";

   if($counter >= 7) {
     echo "</tbody>\n";
   }    
  $counter++;
}  
echo "</table>\n";
Mir fehlt zu sowas leider noch das richtige Denken! :oops:
 
PHP:
<tbody>
<?php
for ($i = 0; $i < 7 && $feld = mysql_fetch_assoc($res); $i++)
{
   echo "<tr>\n";
   echo "<td>" . $feld['title'] . "</td>\n";
   echo "<td>" . $feld['description'] . "</td>\n";
   echo "<td><a href='...'>Bearbeiten</a></td>\n";
   echo "<td><a href='...'>Löschen</a></td>\n"
   echo "</tr>\n";
} 
?>
</tbody>
<tbody>
<?php
while ($feld = mysql_fetch_assoc($res))
{
   echo "<tr>\n";
   echo "<td>" . $feld['title'] . "</td>\n";
   echo "<td>" . $feld['description'] . "</td>\n";
   echo "<td><a href='...'>Bearbeiten</a></td>\n";
   echo "<td><a href='...'>Löschen</a></td>\n"
   echo "</tr>\n";
} 
?>
</tbody>
 
Es hat zwar jetzt nichts mit deinem Problem direkt zu tun, aber dennoch: Mal eine Frage, wieso arbeitest du nicht Objektorientiert?! Damit könntest du alles viel einfacher steuern und verwalten....oder nicht?!

So würdest du die Daten aus der Datenbank abholen, in objekte legen und diese in ein Array und später, wenn du eine Funktion für die Ausgabe machst, könntest du alles einfach händeln, so ungefähr:

deineKlasse.php:
PHP:
<?php

class Table {
  var $id;
  var $title;
  var $desc;

  function Table($id){
      $this->id = $id;
  }

  function getId(){
      return $this->id;
  }

  function setTitle($title){
      $this->title = $title;
  }

  function getTitle(){
      return $this->title;
  }

  function setDesc($desc){
      $this->desc = $desc;
  }

  function getDesc(){
      return $this->desc;
  }
}
?>
deineConfig.php:
PHP:
<?php
$query = "SELECT ID, title, description FROM DeineTabelle";

$dbc        = odbc_connect($db_host, $db_user, $db_pass);
$resultID    = odbc_exec($dbc, $query);

$aTable = array();

if(!is_null($resultID))
    while($aRecord = odbc_fetch_array($resultID)){
        $ID = (int)$aRecord["id"];
        $oTable = new Table($ID);
        $oTable->setTitle($aRecord["title"]);
        $oTable->setDesc($aRecord["description"]);
        $aTable[$ID] = $oTable;        
    }
?>
Ausgabe-Funtkion (deineFunktion.php):
PHP:
<?php
function getTable(){
    global $aTable;
    $i = 0;
    foreach($aTable as $tableID => $v){
        $oTable = $aTable[$tableID];
        printTable($oTable, $i);
        $i++;
    }
}

function printTable($oTable, $i){
    <tr <?($i < 7) ? "class="\\"test\"" : "";?>>
     <td><?=$oTable->getTitle()?></td>
     <td><?=$oTable->getDesc()?></td>
     <td><a href="/index.php?editID=<?=$oTable->getId()?>">Bearbeiten</a></td>
     <td><a href="/index.php?deleteID=<?=$oTable->getId()?>">Löschen</a></td>
    </tr>
}
?>
Die Ausgabe im html-dokument:
PHP:
<? 
include("deineKlasse.php");
include("deinefunktion.php");
include("deineConfig.php");
?>


<!-- html......-->

<?
switch(true){
   case($_REQUEST["editID"]):
      .........
      break;
   case($_REQUEST["deleteID"]):
      .........
      break;
  default:?>
     <table>
          <? getTable(); ?>
      </table><?
}
?>
oder so ähnlich...bin noch müd..schau später nochmal drüber..*brmml*

Gruß
Loon3y


EDIT: oh ups, habs mir odbc gemacht..naja weißt ja was du für deine sachen eintragen musst....also msql ^^"

Edit2: hmpf...und nimm bitte sinnvollere Bezeichnungen für das $aTable und $oTable und die Klasse ^^" weiß ja net was es ist ;D
 
Zuletzt bearbeitet:
:shock: .... *sprachlos*
Warum ich nicht objektorientiert arbeite? Ganz einfach, den Begriff höre ich heute zum ersten Mal!

Ich verstehe auch so gut wie nichts von dem, was du geschrieben hast, denn ich kenn im Moment wirklich nur die absoluten Basics...
Könntest du also bitte noch ein paar Kommentare neben die einzelnen Abschnitte in den Dateien schreiben? Das wär echt nett!
 
ich habe die objektorientieung in php5 mit diesem tutorial gelernt, finde es sehr gut.
hatte aber schon vorwissen aus anderen programmiersprachen.

Professionelle Softwareentwicklung mit PHP 5

es ist aber nicht nötig mit php objektorientiert zu arbeiten, wenn es sich um solche kleinen aufgaben handelt.
 
Hallo.

im Prinzip ist es nicht schwer. Objektorientiert Programmieren heißt nur, dass du dir einen Bauplan von etwas machst. Nehmen wir mal an du hast eine Newsseite. Da brauchst du für EINE News folgende bestandteile:

NewsID
Headline
Subheadline
Body (text)
Preview (vorschautext auf startseite)
Author
Quelle
Bilder
Erstelldatum
Update-Datum
Veröffentlichungsdatum
Endedatum (wann es z.B. ins Archiv kommt oder von der Seite fliegt)

Das war auch schon der Bauplan, danach baust du deine News. Dazu machst du dir eine klasse und legst diese Bausteine als variablen fest. Wenn du das getan hast, arbeitest du mit ihnen. Ich setze z.B. immer "set-er" und "get-er" um fehler abzufangen:

PHP:
<?
class News{
    var $id;
    var $headline;
    var $subheadline;
     ....

 function News($id){
   $this->id = $id;
 }

  function getId(){
    return $this->id;
  }


 function setHeadline($headline){
   $this->headline = $headline
 }

  function getHeadline(){
    return $this->headline;
  }

...........
}

?>
Das hat auch den Vorteil, man schreibt etwas in einen "set-er" und liest etwas in einen "get-er" aus.

Als nächstes füllst du eben ein Array mit diesen Objekten.

PHP:
<?
aNews = array();      /* leeres Array erzeugen */

$ID = 10;
$oNews = new News($id);      /* erzeugt ein neues Objekt News*/
$oNews->setHeadline("Ich bin eine Headline");
$oNews->setSubheadline("Ich bin eine Subheadline");
$oNews->setBody("ich bin der Content");
......
$aNews[$ID] = $oNews;  /* legt das neue Objekt mit dem oben festgelegten Key "10" in das Array News */
?>
Anschließend willst du ja dein eines Objekt ausgeben:

PHP:
<?
foreach($aNews as $k => $v){
    $oNews = $aNews[$k];      /* damit greifst du wieder auf deine Objekte zu */
   ?><h1><=$oNews->getHeadline();?></h1><?    /* und hier rufst deine Haadline aus dem objekt mit dem "get-er" auf */

}
?>
Hoffe das war ein bisschen verständlich...ist scher über internet das kurz u knapp zu erklären...könnte darüber stunden schreiben ^^

Der vorteil ist einfach, du machst einen Bauplan, füllst dein objekt nach bauplan und liest aus was du brauchst...egal ob du alles brauchst oder nur kurz u knapp eine headline und einen previewtext...und wenn du etwas hinzufügen willst: neue spalte in der datenbank, neue "var" in der klasse und in der ausgabefunkion und scon ist es erweitert.

Grüßli
Loon3y
 
Ah, so langsam dämmert's mir! :smile:
Ich probier einfach mal ein wenig herum, dann versteh ich's wahrscheinlich noch besser!

Danke, Loon3y!
 
Wenn OOP in PHP dann doch bitte gleich PHP5. PHP4s OOP ist grausam!

Ich arbeite momentan noch mit php4 oop, da ich ja auch erst so wirklich vor 1 1/2 monaten mit dem ganzen angefnagen haben....und eigentlich komme ich ganz gut zurrecht..was für nachteile gibt es mit php4 gegenüber php5? bzw was sind die vorteile von oop php5?!
 
Viel mehr Möglichkeiten, die in anderen Sprache zu Selbstverständlichkeit gehören, wie:
  • Starke Kapselung (private, protected, public)
  • Magische Methode (__isset, __set, __get)
  • Destruktoren und __contruct (statt Klassenname)
  • Autoloading (!!!)
  • das OOP ist strikter. D.h. weniger Fehlertolerant, dass erhöht zwar den Lernaufanwand, dafür aber auch die Wartung, bessere "Vereinbarungen" im Team, Einheitlichkeit und leichteres Debugging.
 
Zurück
Oben