All pastes #294272 Raw Edit

Miscellany

public text v1 · immutable
#294272 ·published 2006-12-28 08:58 UTC
rendered paste body
Firstly my script

<?php
        function DBLookupComboBox($name, $table, $keyfield, $displayfield)
        {
                $query = "SELECT $keyfield, $displayfield FROM $table ORDER BY $displayfield";
                $result = pg_query($query);

                if (!$result) {return 0;}
                $ret_string = "<select name=$name>";

                while($line = pg_fetch_array($result,null,PGSQL_ASSOC)) {
                        $ret_string .= "<option label='" . $line["$displayfield"] .
                                "' name='" . $line["$keyfield"] . "' />";
                }
                $ret_string .= "</select>";
                return $ret_string;
        }

        function DisplayTable($configfile, $tablename)
        {
                $dspt_modify = "&#1048;&#1079;&#1084;&#1077;&#1085;&#1080;&#1090;&#1100;";
                $dspt_delete = "&#1059;&#1076;&#1072;&#1083;&#1080;&#1090;&#1100;";
                if (file_exists($configfile)) {
                        $xml = simplexml_load_file($configfile);
                } else {
                        return 0;
                }
                $table_settings = $xml->xpath("/tables/table[@name='$tablename']");

                //Adding text fields
                $sqltablename = $table_settings[0]["sqlname"];
                $keyfield = $sqltablename . "." . $table_settings[0]["key"];
                $fields[] = $keyfield;
                $tables[] = $sqltablename;

                foreach ($table_settings[0]->field as $field) {
                        if ($field["type"] == "text") {
                                $fieldname = $sqltablename . "." . $field["name"];
                                $labels[$fieldname] = $field->label;
                                $fields[] = $fieldname;
                        }
                }

                //Adding lookup fields
                $lookupfields = $table_settings[0]->xpath("/field[@type='lookup']");

                foreach($lookupfields as $lookupfield) {
                        $lookuptable = $lookupfield->lookup[0]["table"];
                        $displayfield = $lookupfield->lookup[0]["display"];
                        $lookupkeyfield = $lookupfield->lookup[0]["key"];

                        $fields[] = $lookuptable . "." . $displayfield;
                        $joins[$lookup[0]["table"]] =
                                $sqltablename . "." . $lookupfield["name"] . " = " .
                                $lookuptable . "." . $lookupkeyfield;
                        $labels[$displayfield] = $lookupfield->label;
                }

                //now building the query string

                foreach($fields as $key => $field) {
                        $fields[$key] = "$field AS $field";
                }

                $query = "SELECT " . implode(',',$fields);
                $query .= " FROM  $sqltablename ";



                //now adding joins if they are present
                foreach($joins as $jointable => $joinexpression) {
                        $query .= " INNER JOIN $jointable ON $joinexpression";
                }

                echo $query;

                $result = pg_query($query);
                if (!$result) {return 0;}

                //Generating table
                $res_string =  "<table>";

                //Head
                $res_string .= "<thead><tr>";
                foreach($labels as $label) {
                        $res_string .= "<td>$label</td>";
                }
                $res_string .= "<td>$dspt_modify</td><td>$dspt_delete</td>";
                $res_string .= "</tr></thead>";

                while($line = pg_fetch_array($result,null,PGSQL_ASSOC)) {
                        $res_string .= "<tr>";
                        foreach($labels as $key => $value) {
                                $res_string .= "<td>$line[$key]</td>";
                                var_dump($line);
                        }
                        $res_string .= "<td><a href='?action=modify&id=" .
                                        $line[$keyfield] . "'></a></td>";
                        $res_string .= "<td><a href='?action=delete&id=" .
                                        $line[$keyfield] . "'></a></td>";
                        $res_string .= "</tr>";
                }

                $res_string =  "</table>";
        }

?>

Example xml-document<?xml version="1.0" encoding="windows-1251"?>
<tables>
        <table name="locomotive_series" sqlname="locomotive_series" key="id">
                <field name="name" type="text">
                        <label>123</label>
                </field>
        </table>


        <table name="locomotives" sqlname="locomotives" key="id">
                <field name="series_id" type="lookup">
                        <lookup table="locomotive_series" key="id" display="name"/>
                        <label>123</label>
                </field>
        </table>
</tables>

SQL string produced

SELECT locomotive_series.id AS locomotive_series.id,locomotive_series.name AS locomotive_series.name FROM locomotive_series

seems it's ok... but still does not work