Zitat:
|
prüfen obs ne spalte ist, würd ich auch.. weiss aber grad nicht, wie die funktion heisst, mit der man die spalten (resp. metadaten) auslesen kann..
|
Vielleicht hilft es dem einen oder anderen weiter, auch wenn es nicht direkt zur Eingangsfrage gehört.
Enum-Felder werden ausgewertet und Datumsfelder als Auswahl mit gesetztem aktuellen Datum, gesplittet in Tag Monat und Jahr dargestellt.
Darum die drei Funktionen vor dem Hauptteil.
Code:
<?php
include("dbconnect.php");
$tabelle = $_GET['tabelle'];
if ($tabelle == "") exit; # Tabellenname muss als Variable übergeben werden (in diesem Beispiel)
##################################################################
function showEnum($tabelle,$field,$leer)
##################################################################
{
$items = '';
$xq = mysql_query("SHOW COLUMNS FROM ".$tabelle." LIKE '".$field."'") or die (mysql_error());
if(mysql_num_rows($xq)>0)
{
$row=mysql_fetch_row($xq);
$ops=explode("','",preg_replace("/(enum|set)\('(.+?)'\)/","\\2",$row[1]));
}
for ($i=0;$i<count($ops);$i++)
{
$items .="<option value=\"".$ops[$i]."\">".ucfirst($ops[$i])."</option>\n";
}
$text = "<select name=".$field." style='width:350px;'>";
if ($leer != 0)
{ $text .= "<option value=''>Auswahl</option>"; }
$text .= $items."</select>\n\n";
return $text;
}
##################################################################
##################################################################
function testEnum($tabelle,$feldname = '*')
##################################################################
{ # Ergebnis(liste) enthält Feldernamen, die den Typ enum haben
$eresult = mysql_query("SELECT ".$feldname." FROM ".$tabelle);
$fields = mysql_num_fields($eresult);
$felder = '';
$xi = 0;
while ($xi < $fields)
{
$flags = mysql_field_flags ($eresult, $xi);
if ($flags == 'enum')
{
#$type = mysql_field_type ($eresult, $xi);
#$len = mysql_field_len ($eresult, $xi);
$name = mysql_field_name ($eresult, $xi);
$felder .= $name;
if ($feldname == '*') $felder .= ",";
}
$xi++;
}
return $felder;
}
##################################################################
##################################################################
function generate_dt_form($feldname)
##################################################################
{
$text = "<input type=hidden name=".$feldname." value='$feldname'>";
$text .= "<select style='width:40px;' name=".$feldname."_tag>";
for ($xj=1;$xj<=31;$xj++) { $text .= "<option "; if ($xj == date("d")) {$text .= "SELECTED ";} $text .= "value=".$xj.">".$xj."</OPTION>\n"; }
$text .= "</select> . ";
$text .= "<select style='width:40px;' name=".$feldname."_monat>";
for ($xj=1;$xj<=12;$xj++) { $text .= "<option "; if ($xj == date("m")) {$text .= "SELECTED ";} $text .= "value='".$xj."'>".$xj."</OPTION>\n"; }
$text .= "</select> . ";
$text .= "<select style='width:55px;' name=".$feldname."_jahr>";
$jv = date("Y")-1;
$jb = date("Y")+8;
for ($xj=$jv;$xj<=$jb;$xj++) { $text .= "<option "; if ($xj == date("Y")) {$text .= "SELECTED ";} $text .= "value='".$xj."'>".$xj."</OPTION>\n"; }
$text .= "</select> - ";
$text .= "<select style='width:40px;' name=".$feldname."_stunde>";
for ($xj=0;$xj<=23;$xj++) { $text .= "<option "; if ($xj == date("H")) {$text .= "SELECTED ";} $text .= "value='".$xj."'>".$xj."</OPTION>\n"; }
$text .= "</select> : ";
$text .= "<select style='width:40px;' name=".$feldname."_minute>";
for ($xj=0;$xj<=59;$xj++) { $text .= "<option "; if ($xj == date("i")) {$text .= "SELECTED ";} $text .= "value='".$xj."'>".$xj."</OPTION>\n"; }
$text .= "</select> : ";
$text .= "<select style='width:40px;' name=".$feldname."_sekunde>";
for ($xj=1;$xj<=59;$xj++) { $text .= "<option "; if ($xj == date("i")) {$text .= "SELECTED ";} $text .= "value='".$xj."'>".$xj."</OPTION>\n"; }
$text .= "</select>";
echo $text;
}
##################################################################
$query = "SELECT * FROM ".$tabelle;
$result = mysql_query($query) or die(mysql_error());
$felder = mysql_num_fields($result);
for ($i=0;$i<$felder;$i++)
{
$meta = mysql_fetch_field($result);
echo "\n<tr valign=top><td>".$meta->name."</td><td> </td><td>";
Festlegung bei bestimmten (bekannten) Feldnamen
if ($meta->name == 'shadow'||$meta->name == 'weiterleitung')
echo "<select name=".$meta->name." size=1 width=60 style='width:350px;'><option value=''>Auswahl</option>".$dopt."</select>";
else # Enum-Feld
if (testEnum($tabelle,$meta->name) == $meta->name)
echo showEnum($tabelle,$meta->name,0);
else # Datum Feld
if ($meta->type == 'datetime')
generate_dt_form($meta->name);
else # Blobfeld
if ($meta->type == 'blob')
echo "<textarea name='".$meta->name."' wrap='physical' rows='5' cols='60' style='width:350px;'>".$meta->def."</textarea>";
else # alles nix - dann halt Textfeld zeigen.
echo "<input type=text size=60 style='width:350px;' name=".$meta->name." value='".$meta->def."'>";
if ($meta->type != 'blob' && $meta->type != 'datetime')
echo "</td></tr>";
echo "</table>";
?>