Individuelle Listen

  • Themenstarter Themenstarter P_F
  • Beginndatum Beginndatum
P

P_F

Hi, ich möchte eine Funktion schreiben, die anhand eines MySQL-Statements eine HTML-Tabelle mit den asugewählten Datensätzen erzeugt:

Ich bin bis jetzt so weit:
PHP:
function CreateListFromDB($TableWidth,$MySQLStatement){
  $num_args = func_num_args();
  $args = func_get_args();
  $TableHead = '<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="'.$TableWidth.'">
  ';
  $TableFoot = '</table>';
  $TableContent = '';
  $query = mysql_query($MySQLStatement);
  $ii = 2;
  while ($result = mysql_fetch_array($query)) {
  	$data[$ii] = $result;
  	$ii++;
  }
  $i = 2;
  while ($i < $num_args) {
  	$TableContent .= '<td width="'.$args[$i].'">'.$data[$i][text].'</td>
  	';
  	$i++;
  }
  print $TableHead.$TableContent.$TableFoot;
}

Aufruf der Funktion:
PHP:
CreateListFromDB(500,'SELECT * FROM test ORDER by ID DESC',200,200,'name','mail');
Argumente:
| Tabellenbreite | Query | 1. Spalte 200px breit | 2. Spalte 200px breit | feld name in dieser Spalte | feld mail in dieser Spalte |

Nun komm ich net weiter :confused:
 
Also was definitv schonmal fehlt, sind die <tr>-Tags!

Ansonsten sehe ich eigentlich keine Fehler... Was geht denn nicht?

MfG
Hans
 
Das wird ausgegeben:

<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="500">
<td width="200">jkl</td>
<td width="200">ghi</td>
<td width="name">def</td>
<td width="mail">abc</td>
</table>

habe 4 einträge in der tabelle test: abc,def,ghi,jkl

Aber er soll ja in jeder zeile 2 Spalten haben und in die erste spalte name und in die zweite feld reinsetzen.

Ich habe immer so meine Probleme mit verchachtelten Schleifen.
 
Wie gesagt... grundsätzlich fehlen schonmal die <tr>-Tags...

PHP:
$counter = 0;
$TableContent .= '<tr>';
while ($i < $num_args) { 
$counter++;
if($counter == 2){
$TableContent .= '</tr><tr>';
$counter = 0;
}
$TableContent .= '<td width="'.$args[$i].'">'.$data[$i][text].'</td> '; 
i++;
} 
$TableContent .= '</tr>';

Ungetestet, aber so ungefähr machst Du immer zwei Spalten und dann ne neue Zeile...

Allerdings kommt mir die ganze Anordnung etwas zu kompliziert vor...

MfG
Hans
 
habe es nun so gemacht:

PHP:
function CreateListFromDB($TableWidth,$MySQLStatement,$CellElements){
  
  $num_args = func_num_args();
  $args = func_get_args();
  
  $TableHead = '<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="'.$TableWidth.'">
  ';
  $TableFoot = '</table>';
  $TableContent = '';
  
  $query = mysql_query($MySQLStatement);
  
  while ($result = mysql_fetch_array($query)) {
    $TableContent .= '<tr>';
    $i = 1;
    while ($i < $num_args-2	) {
        $TableContent .= '<td width="'.$args[$i+2].'">'.$result[$CellElements[$i-1]].'</td>';
	$i++;
    }  
  	
    $TableContent .= '</tr>';
   
  }
  
  print $TableHead.$TableContent.$TableFoot;
}
$Fields = array('ID', 'text');
CreateListFromDB(600,'SELECT * FROM test ORDER by ID DESC',$Fields,100,400);

Es funktioniert auch!

Aber ich habe gehört, dass solche geschachtelten while-schleifen nicht sein sollten. Kann mir jemand erklären, wie ich das skript anders strukturieren muss.

Oder ist nichts gegen diese Methode einzuwenden ?
 
Zuletzt bearbeitet von einem Moderator:
Du könntest aus der inneren while-Schleife vielleicht eine for-Schleife machen?

PHP:
  while ($result = mysql_fetch_array($query)) { 
    $TableContent .= '<tr>';
    for ($i=1; $i < $num_args-2; $i++) { 
        $TableContent .= '<td width="'.$args[$i+2].'">'.$result[$CellElements[$i-1]].'</td>'; 
    }
       
    $TableContent .= '</tr>'; 
  }
 
Zurück