MySQL cols ausgeben

G

GrU3nL!nG

Gast
Hi,

ich habe eine Tabelle in der die ganzen rechte stehen.
Das sind nun kanpp 20 spalten.
Ich möchte dies nicht per hand aus geben lassen, sondern dynamisch:

versucht habe ich es so:
PHP:
$result = mysql_query ("SELECT * FROM rights LIMIT 0,1");
        $fields = mysql_num_fields ($result);
        echo 'Spalten: '.$fields; //-> richtige ausgabe, es sind 20
        $query3 = mysql_query("SHOW COLUMNS FROM rights ;");
        $i = 0;
        while($test = mysql_fetch_array($query3))
        {
        	echo 'query: '.$test[$i].'<br/>';
        	$i++;
        }
Nun habe ich das Problem den Namen der rechte auszugeben.

Hat wer eine Idee?
 

tobiasge

Cadet 4th Year
Dabei seit
Apr. 2002
Beiträge
70
Hallo,

das Problem ist, dass du das $i als Index verwendest. Am geschicktesten machst das so:
PHP:
$query3 = mysql_query("SHOW COLUMNS FROM rights ;");
while( $test = mysql_fetch_assoc($query3) )  {
  echo 'query: '.$test['Field'].'<br/>';
}
Das mysql_fetch_assoc() gibt dir ein assoziatives Array für jede Zeile in dem Ergebnis, dann kannst du mit dem jeweiligen Namen auf das Feld zugreifen.

Gruß
Tobias
 
G

GrU3nL!nG

Gast
Ha, da war also mein Denkfehler!

Ich danke dir!

Das war wohl die schnellste Antwort, die ich jemals erhalten habe ;-)

Schönes Wochenende!
 
G

GrU3nL!nG

Gast
Hmm ich wieder einen Denkfehler:
PHP:
	<table align="center" cellspacing="0" cellpadding="0" border="1">
		<tr>
			<th>&nbsp;</th>
			<?php
			$query = @mysql_query("SELECT * FROM rights ORDER BY right_name") or die('Select ist fehlgeschlagen!');
			while($right_group = mysql_fetch_object($query))
        	{
        		echo '<th class="userprofil" valign="bottom" align="center">'.chunk_split($right_group->right_name,1,'<br/>').'</th>';
        	}
        	?>
        </tr>
        <?php
        $query3 = mysql_query("SHOW COLUMNS FROM rights ;");
        while( $test = mysql_fetch_assoc($query3) ) 
        {
          echo '<tr>
          			<td class="userprofil">'.$test['Field'].'</td>';
          			$status = mysql_fetch_object(mysql_query("SELECT ".$test['Field']." FROM rights ORDER BY right_name LIMIT 1"));
          echo '	<td class="userprofil">'.$satus->$test['Field'].'</td>
          	   </tr>';
        }
        ?>
		</table>
Aussehen soll das grob so:

--------|rechte_name1|rechte_name2|....
recht1|----WERT-------|----WERT-------|
recht2|----WERT-------|----WERT-------|
recht3|----WERT-------|----WERT-------|
.
.
.
 
Zuletzt bearbeitet:
G

GrU3nL!nG

Gast
Habe das Problem gelöst.

Für alle, die interesse an der Lösung haben:

PHP:
<table align="center" cellspacing="0" cellpadding="0" border="1">
		<tr>
			<th>&nbsp;</th>
			<?php
			$query = @mysql_query("SELECT * FROM rights ORDER BY right_name") or die('Select ist fehlgeschlagen!');
			$gruppen = array();
			while($right_group = mysql_fetch_object($query))
        	{
        		$gruppen[] = $right_group->right_name;
        		echo '<th class="userprofil" valign="bottom" align="center">'.chunk_split($right_group->right_name,1,'<br/>').'</th>';
        	}
        	?>
        </tr>
        <?php
        $query3 = mysql_query("SHOW COLUMNS FROM rights ;");
        echo count($gruppen);
        $anz = 4;
        while( $test = mysql_fetch_assoc($query3) )
        {
            $i = 0;
            echo '<tr>
                    <td class="userprofil">'.$test['Field'].'</td>';
            for($b=0;$b<$anz;$b++)
            {
                $status = mysql_fetch_object(mysql_query("SELECT * FROM rights WHERE right_name='".$gruppen[$i]."'"));
                echo '<td class="userprofil">'.$status->$test['Field'].'</td>';
              $i = $i + 1;
            }
            echo '</tr>';
        }
        ?>
		</table>
 
Top