table_name = $table_name; // Get table information $query = "show columns from $table_name"; $result = mysql_query($query); if (! $result) { $this->err = mysql_error(); $this->err_no = 103; return; } // Get column information $c = 0; $data = array(); while ($row = mysql_fetch_array($result)) { $data[$c] = $row; $c++; } $this->num_columns = count($data); $this->columns = $data; for ($i = 0; $i < $this->num_columns; $i++) { $row = $data[$i]; $name = $row[0]; $type = ereg_replace("\(.*\)", "", $row[1]); $type = ereg_replace(" unsigned", "", $type); $null = ($row[2] ? "Y" : "N"); $key = $row[3]; $this->column_names[$i] = $name; $this->column_types[$i] = $type; $this->column_nulls[$i] = $null; $this->key_columns[$i] = ($key == "PRI"); $this->column_types[$name] = $type; $this->column_nulls[$name] = $null; $this->key_columns[$name] = ($key == "PRI"); } $this->err_no = 0; } // End of Table() function // // Display the table structure in report format // function ShowTable() { printf(" Table: $this->table_name\n\n"); printf(" %-20s %-15s %-15s% -15s\n", "Column", "Type", "Null", "Pri"); for ($i = 0; $i < count($this->column_names); $i++) { printf("%4d %-20s %-15s %-15s %-15s\n", $i + 1, $this->column_names[$i], $this->column_types[$i], $this->column_nulls[$i], $this->key_columns[$i]); } return; } // End of ShowTable() function // // Display table structure in SQL format // function ShowStructure() { print("create table $this->table_name (\n"); for ($i = 0; $i < count($this->columns); $i++) { $row = $this->columns[$i]; $name = $row[0]; $type = $row[1]; $null = ($row[2] ? "" : " not null"); switch ($row[3]) { case "PRI": if ($primary) $primary .= ", "; $primary .= $name; break; case "UNI": $unique .= " unique ($name),\n"; break; case "MUL": $index .= " index ($name),\n"; break; default: if ($row[3]) printf("%s - ", $row[3]); } printf(" %-20s%s%s,\n", $name, $type, $null); } printf("\n"); if ($unique) { printf("%s\n", $unique); } if ($index) { printf("%s\n", $index); } if ($primary) { printf(" primary key (%s)\n", $primary); } print(");\n\n"); return; } // End of ShowStructure() function // // Build an SQL query statement based on the current values // of GLOBALS variables // // - This assumes that all values that are set in GLOBALS are to be used. // It may be a problem if lingering data is in the GLOBALS array // function BuildQuery($orderby_fields="",$special_where="",$prefix="") { // Initialize variables $query = ""; $where = "$special_where"; $orderby = ""; $col = 0; $ord = 0; // Process each field in the table for ($i = 0; $i < count($this->column_names); $i++) { $name = $this->column_names[$i]; $data = $GLOBALS[$name]; if (! empty($data) && $data != "NULL") { // If there is a column already in the where clause add 'and' if ($where) { $where .= " and "; } // LIKE WILDCARD if (ereg("[\*\?%]", $data)) { $data = ereg_replace("[\*]", "%", $data); $where .= "$prefix$name like " . $this->FieldData($name, $data); } // NOT EQUAL TO elseif (ereg("^!= ",$data)) { $data = ereg_replace("^!= ","",$data); $where .= "$prefix$name != " . $this->FieldData($name, $data); } // LESS THAN OR EQUAL TO elseif (ereg("^<= ",$data)) { $data = ereg_replace("^<= ","",$data); $where .= "$prefix$name <= " . $this->FieldData($name, $data); } // LESS THAN elseif (ereg("^< ",$data)) { $data = ereg_replace("^< ","",$data); $where .= "$prefix$name < " . $this->FieldData($name, $data); } // GREATER THAN OR EQUAL TO elseif (ereg("^>= ",$data)) { $data = ereg_replace("^>= ","",$data); $where .= "$prefix$name >= " . $this->FieldData($name, $data); } // GREATER THAN elseif (ereg("^> ",$data)) { $data = ereg_replace("^> ","",$data); $where .= "$prefix$name > " . $this->FieldData($name, $data); } // EQUAL TO else { $where .= "$prefix$name = " . $this->FieldData($name, $data); } $col = 1; } // Build order by part based on field sequence if ($name != "record_num" && $this->key_columns[$i]) { if ($ord) { $orderby .= ","; } $orderby .= "$prefix$name"; $ord = 1; } } // Build up the statement $query = "select * from $this->table_name"; // If where clause then append it if ($where) { $query .= " where $where"; } // If there is an orderby clause append it if ($orderby_fields) { $query .= " order by " . $orderby_fields; } else { if ($ord) { $query .= " order by $orderby"; } } return $query; } // End of BuildQuery() function // // Build the set of hidden fields for this table // - This function has probably been replaced with the script: // "hidden-form-fields.php" // function BuildHidden() { // Initialize variables $hidden = ""; $col = 0; $ord = 0; // Process each field in the table for ($i = 0; $i < count($this->column_names); $i++) { $name = $this->column_names[$i]; $data = mysql_real_escape_string($GLOBALS[$name]); $hidden .= "\n"; } return $hidden; } // End of BuildHidden() function // // Build an SQL insert statement based on the values in the GLOBALS array // function BuildInsert($include_record_num='No') { // Initialize variables $query = ""; $q1 = "insert into $this->table_name ("; $q2 = "values ("; // Process each field in the table for ($i = 0; $i < count($this->column_names); $i++) { $name = $this->column_names[$i]; $data = $GLOBALS[$name]; if ($name != "record_num" || $include_record_num == 'Yes') { // If there is a column already in the string add a comma if ($i) { $q1 .= ", "; $q2 .= ", "; } $q1 .= $name; $q2 .= $this->FieldData($name, $data); } } $query = $q1 . ") " . $q2 . ")"; return $query; } // End of BuildInsert() function // // Build an SQL update statement based on the values in the GLOBALS array // function BuildUpdate($mode="single") { // Initialize variables $query = "update $this->table_name set "; $update = ""; // Process each field in the table for ($i = 0; $i < count($this->column_names); $i++) { $name = $this->column_names[$i]; if (($name != "record_num") && (isset($GLOBALS[$name]))) { // If there is a column already in the string add a comma $value = $this->FieldData($name, $GLOBALS[$name]); // Single record update statement if ($mode == "single") { if ($update) $update .= ", "; $update .= $name . " = " . $value; } // Multi record update statement if ($mode == "multi") { if ($value == "''") $value = NULL; if ($value == "NULL") $value = NULL; if ($value == "0") $value = NULL; if ($value) { if ($update) $update .= ", "; $update .= $name . " = " . $value; } } $col = 1; } } // Define the where clause $where_clause = ""; if ($mode == "single") { $record_num = intval($GLOBALS["record_num"]); $where_clause = "where record_num = $record_num"; } $query = "$query $update $where_clause"; return $query; } // End of BuildUpdate() function // // Format the data correctly based on the field type in // the table structure // function FieldData($field_name, $data) { $value = ""; $type = $this->column_types[$field_name]; $null = $this->column_nulls[$field_name]; $data = trim($data); // format data based on field type switch ($type) { case "varchar": case "text": case "longtext": case "char": case "time": case "enum": $data = mysql_real_escape_string($data); $value = "'$data'"; break; case "int": case "smallint": case "decimal": if (strlen($data) == 0) { if ($null == "Y") { $value = "NULL"; } else { $value = "0"; } } else { if ($type == 'decimal') $value = floatval($data); else $value = intval($data); } break; case "date": if (empty($data)) { if ($null == "Y") { $value = "NULL"; } else { $dt = date("Y-m-d", time()); $value = "'$dt'"; } } else { $data = mysql_real_escape_string($data); $value = "'$data'"; } break; case "datetime": if (! $data) { $dt = date("Y-m-d H:i:s", time()); $value = "'$dt'"; } else { $data = mysql_real_escape_string($data); $value = "'$data'"; } break; case "timestamp": if (! $data) { $dt = date("YmdHis", time()); $value = "'$dt'"; } else { $data = mysql_real_escape_string($data); $value = "'$data'"; } break; default: $data = mysql_real_escape_string($data); $value = "'$data'"; } // return the correctly formatted data return $value; } // End of FieldData() function // // Function to convert a data record into GLOBALS data // function RecordData($record) { // Process each field in the table for ($i = 0; $i < count($this->column_names); $i++) { $name = $this->column_names[$i]; $GLOBALS[$name] = $record[$name]; } } // End of RecordData() function } // End of class definition } // End of if TABLE_INCLUDED statement ?>