home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 April / PCWorld_2005-04_cd.bin / akce / web / phptriad / phptriad2-2-1.exe / htdocs / phpmyadmin / tbl_change.php < prev    next >
PHP Script  |  2002-01-06  |  21KB  |  545 lines

  1. <?php
  2. /* $Id: tbl_change.php,v 1.67 2002/01/06 17:29:00 loic1 Exp $ */
  3.  
  4.  
  5. /**
  6.  * Get the variables sent or posted to this script and displays the header
  7.  */
  8. require('./libraries/grab_globals.lib.php');
  9. include('./header.inc.php');
  10. // Displays the query submitted and its result
  11. if (!empty($message)) {
  12.     if (isset($goto)) {
  13.         $goto_cpy      = $goto;
  14.         $goto          = 'tbl_properties.php'
  15.                        . '?lang=' . $lang
  16.                        . '&server=' . $server
  17.                        . '&db=' . urlencode($db)
  18.                        . '&table=' . urlencode($table)
  19.                        . '&$show_query=y'
  20.                        . '&sql_query=' . urlencode($disp_query);
  21.         unset($goto);
  22.     } else {
  23.         $show_query = 'y';
  24.     }
  25.     if (isset($sql_query)) {
  26.         $sql_query_cpy = $sql_query;
  27.         unset($sql_query);
  28.     }
  29.     if (isset($disp_query)) {
  30.         $sql_query     = (get_magic_quotes_gpc() ? stripslashes($disp_query) : $disp_query);
  31.     }
  32.     PMA_showMessage($message);
  33.     if (isset($goto_cpy)) {
  34.         $goto          = $goto_cpy;
  35.         unset($goto_cpy);
  36.     }
  37.     if (isset($sql_query_cpy)) {
  38.         $sql_query     = $sql_query_cpy;
  39.         unset($sql_query_cpy);
  40.     }
  41. }
  42. if (get_magic_quotes_gpc()) {
  43.     if (!empty($sql_query)) {
  44.         $sql_query   = stripslashes($sql_query);
  45.     }
  46.     if (!empty($primary_key)) {
  47.         $primary_key = stripslashes($primary_key);
  48.     }
  49. } // end if
  50.  
  51.  
  52. /**
  53.  * Defines the url to return to in case of error in a sql statement
  54.  */
  55. if (!isset($goto)) {
  56.     $goto    = 'db_details.php';
  57. }
  58. if ($goto != 'db_details.php' && $goto != 'tbl_properties.php') {
  59.     $err_url = $goto;
  60. } else {
  61.     $err_url = $goto
  62.              . '?lang=' . $lang
  63.              . '&server=' . $server
  64.              . '&db=' . urlencode($db)
  65.              . (($goto == 'tbl_properties.php') ? '&table=' . urlencode($table) : '');
  66. }
  67.  
  68.  
  69. /**
  70.  * Get the list of the fields of the current table
  71.  */
  72. mysql_select_db($db);
  73. $table_def = mysql_query('SHOW FIELDS FROM ' . PMA_backquote($table));
  74. if (isset($primary_key)) {
  75.     $local_query = 'SELECT * FROM ' . PMA_backquote($table) . ' WHERE ' . $primary_key;
  76.     $result      = mysql_query($local_query) or PMA_mysqlDie('', $local_query, '', $err_url);
  77.     $row         = mysql_fetch_array($result);
  78.     // No row returned
  79.     if (!$row) {
  80.         unset($row);
  81.         unset($primary_key);
  82.         $goto_cpy          = $goto;
  83.         $goto              = 'tbl_properties.php'
  84.                            . '?lang=' . $lang
  85.                            . '&server=' . $server
  86.                            . '&db=' . urlencode($db)
  87.                            . '&table=' . urlencode($table)
  88.                            . '&$show_query=y'
  89.                            . '&sql_query=' . urlencode($local_query);
  90.         unset($goto);
  91.         if (isset($sql_query)) {
  92.             $sql_query_cpy = $sql_query;
  93.             unset($sql_query);
  94.         }
  95.         $sql_query         = $local_query;
  96.         PMA_showMessage($strEmptyResultSet);
  97.         $goto              = $goto_cpy;
  98.         unset($goto_cpy);
  99.         if (isset($sql_query_cpy)) {
  100.             $sql_query    = $sql_query_cpy;
  101.             unset($sql_query_cpy);
  102.         }
  103.     } // end if (no record returned)
  104. }
  105. else
  106. {
  107.     $local_query = 'SELECT * FROM ' . PMA_backquote($table) . ' LIMIT 1';
  108.     $result      = mysql_query($local_query) or PMA_mysqlDie('', $local_query, '', $err_url);
  109.     unset($row);
  110. }
  111.  
  112.  
  113. /**
  114.  * Displays the form
  115.  */
  116. ?>
  117.  
  118. <!-- Change table properties form -->
  119. <form method="post" action="tbl_replace.php" name="insertForm">
  120.     <input type="hidden" name="lang" value="<?php echo $lang; ?>" />
  121.     <input type="hidden" name="server" value="<?php echo $server; ?>" />
  122.     <input type="hidden" name="db" value="<?php echo $db; ?>" />
  123.     <input type="hidden" name="table" value="<?php echo $table; ?>" />
  124.     <input type="hidden" name="goto" value="<?php echo $goto; ?>" />
  125.     <input type="hidden" name="pos" value="<?php echo isset($pos) ? $pos : 0; ?>" />
  126.     <input type="hidden" name="session_max_rows" value="<?php echo isset($session_max_rows) ? $session_max_rows : ''; ?>" />
  127.     <input type="hidden" name="disp_direction" value="<?php echo isset($disp_direction) ? $disp_direction : ''; ?>" />
  128.     <input type="hidden" name="repeat_cells" value="<?php echo isset($repeat_cells) ? $repeat_cells : ''; ?>" />
  129.     <input type="hidden" name="err_url" value="<?php echo urlencode($err_url); ?>" />
  130.     <input type="hidden" name="sql_query" value="<?php echo isset($sql_query) ? urlencode($sql_query) : ''; ?>" />
  131. <?php
  132. if (isset($primary_key)) {
  133.     ?>
  134.     <input type="hidden" name="primary_key" value="<?php echo urlencode($primary_key); ?>" />
  135.     <?php
  136. }
  137. echo "\n";
  138. ?>
  139.  
  140.     <table border="<?php echo $cfgBorder; ?>">
  141.     <tr>
  142.         <th><?php echo $strField; ?></th>
  143.         <th><?php echo $strType; ?></th>
  144.         <th><?php echo $strFunction; ?></th>
  145.         <th><?php echo $strNull; ?></th>
  146.         <th><?php echo $strValue; ?></th>
  147.     </tr>
  148.  
  149. <?php
  150. // Set if we passed the first timestamp field (loic1: in insert mode only -not
  151. // in edit mode-)
  152. $timestamp_seen = (isset($primary_key) ? 1 : 0);
  153. $fields_cnt     = mysql_num_rows($table_def);
  154.  
  155. for ($i = 0; $i < $fields_cnt; $i++) {
  156.     $row_table_def   = mysql_fetch_array($table_def);
  157.     $field           = $row_table_def['Field'];
  158.     if ($row_table_def['Type'] == 'datetime' && empty($row[$field])) {
  159.         $row[$field] = date('Y-m-d H:i:s', time());
  160.     }
  161.     $len             = @mysql_field_len($result, $i);
  162.     $first_timestamp = 0;
  163.  
  164.     $bgcolor = ($i % 2) ? $cfgBgcolorOne : $cfgBgcolorTwo;
  165.     ?>
  166.     <tr>
  167.         <td align="center" bgcolor="<?php echo $bgcolor; ?>"><?php echo htmlspecialchars($field); ?></td>
  168.     <?php
  169.     echo "\n";
  170.  
  171.     // The type column
  172.     $is_binary                  = eregi(' binary', $row_table_def['Type']);
  173.     $is_blob                    = eregi('blob', $row_table_def['Type']);
  174.     $row_table_def['True_Type'] = ereg_replace('\\(.*', '', $row_table_def['Type']);
  175.     switch ($row_table_def['True_Type']) {
  176.         case 'set':
  177.             $type         = 'set';
  178.             $type_nowrap  = '';
  179.             break;
  180.         case 'enum':
  181.             $type         = 'enum';
  182.             $type_nowrap  = '';
  183.             break;
  184.         case 'timestamp':
  185.             if (!$timestamp_seen) {   // can only occur once per table
  186.                 $timestamp_seen  = 1;
  187.                 $first_timestamp = 1;
  188.             }
  189.             $type         = $row_table_def['Type'];
  190.             break;
  191.         default:
  192.             $type         = $row_table_def['Type'];
  193.             $type_nowrap  = ' nowrap="nowrap"';
  194.             break;
  195.     }
  196.     ?>
  197.         <td align="center" bgcolor="<?php echo $bgcolor; ?>"<?php echo $type_nowrap; ?>><?php echo $type; ?></td>
  198.     <?php
  199.     echo "\n";
  200.  
  201.     // Prepares the field value
  202.     if (isset($row)) {
  203.         // loic1: null field value
  204.         if (!isset($row[$field])) {
  205.             $row[$field]   = 'NULL';
  206.             $special_chars = '';
  207.             $data          = $row[$field];
  208.         } else {
  209.             // loic1: special binary "characters"
  210.             if ($is_binary || $is_blob) {
  211.                 $row[$field] = str_replace("\x00", '\0', $row[$field]);
  212.                 $row[$field] = str_replace("\x08", '\b', $row[$field]);
  213.                 $row[$field] = str_replace("\x0a", '\n', $row[$field]);
  214.                 $row[$field] = str_replace("\x0d", '\r', $row[$field]);
  215.                 $row[$field] = str_replace("\x1a", '\Z', $row[$field]);
  216.             } // end if
  217.             $special_chars   = htmlspecialchars($row[$field]);
  218.             $data            = $row[$field];
  219.         } // end if... else...
  220.         // loic1: if a timestamp field value is not included in an update
  221.         //        statement MySQL auto-update it to the current timestamp
  222.         $backup_field  = ($row_table_def['True_Type'] == 'timestamp')
  223.                        ? ''
  224.                        : '<input type="hidden" name="fields_prev[' . urlencode($field) . ']" value="' . urlencode($row[$field]) . '" />';
  225.     } else {
  226.         // loic1: display default values 
  227.         if (!isset($row_table_def['Default'])) {
  228.             $row_table_def['Default'] = '';
  229.             $data                     = 'NULL';
  230.         } else {
  231.             $data                     = $row_table_def['Default'];
  232.         }
  233.         $special_chars = htmlspecialchars($row_table_def['Default']);
  234.         $backup_field  = '';
  235.     }
  236.  
  237.     // The function column
  238.     // -------------------
  239.     // Change by Bernard M. Piller <bernard@bmpsystems.com>
  240.     // We don't want binary data to be destroyed
  241.     // Note: from the MySQL manual: "BINARY doesn't affect how the column is
  242.     //       stored or retrieved" so it does not mean that the contents is
  243.     //       binary
  244.     if ((($cfgProtectBinary && $is_blob)
  245.          || ($cfgProtectBinary == 'all' && $is_binary))
  246.         && !empty($data)) {
  247.         echo '        <td align="center" bgcolor="'. $bgcolor . '">' . $strBinary . '</td>' . "\n";
  248.     } else if (strstr($row_table_def['True_Type'], 'enum') || strstr($row_table_def['True_Type'], 'set')) {
  249.         echo '        <td align="center" bgcolor="'. $bgcolor . '">--</td>' . "\n";
  250.     } else {
  251.         ?>
  252.         <td bgcolor="<?php echo $bgcolor; ?>">
  253.             <select name="funcs[<?php echo urlencode($field); ?>]">
  254.                 <option></option>
  255.         <?php
  256.         echo "\n";
  257.         if (!$first_timestamp) {
  258.             for ($j = 0; $j < count($cfgFunctions); $j++) {
  259.                 echo '                ';
  260.                 echo '<option>' . $cfgFunctions[$j] . '</option>' . "\n";
  261.             }
  262.         } else {
  263.             // for default function = NOW() on first timestamp field
  264.             // -- swix/18jul01
  265.             for ($j = 0; $j < count($cfgFunctions); $j++) {
  266.                 echo '                ';
  267.                 if ($cfgFunctions[$j] == 'NOW') {
  268.                     echo '<option selected="selected">' . $cfgFunctions[$j] . '</option>' . "\n";
  269.                 } else {
  270.                     echo '<option>' . $cfgFunctions[$j] . '</option>' . "\n";
  271.                 }
  272.             } // end for
  273.         }
  274.         ?>
  275.             </select>
  276.         </td>
  277.         <?php
  278.     }
  279.     echo "\n";
  280.  
  281.     // The null column
  282.     // ---------------
  283.     echo '        <td bgcolor="' . $bgcolor . '">' . "\n";
  284.     if ($row_table_def['Null'] == 'YES') {
  285.         echo '            <input type="checkbox"'
  286.              . ' name="fields_null[' . urlencode($field) . ']"';
  287.         if ($data == 'NULL') {
  288.             echo ' checked="checked"';
  289.         }
  290.         if (strstr($row_table_def['True_Type'], 'enum')) {
  291.             if (strlen($row_table_def['Type']) > 20) {
  292.                 echo ' onclick="if (this.checked) {document.forms[\'insertForm\'].elements[\'field_' . md5($field) . '[]\'].selectedIndex = -1}; return true" />' . "\n";
  293.             } else {
  294.                 echo ' onclick="if (this.checked) {var elts = document.forms[\'insertForm\'].elements[\'field_' . md5($field) . '[]\']; var elts_cnt = elts.length; for (var i = 0; i < elts_cnt; i++ ) {elts[i].checked = false}}; return true" />' . "\n";
  295.             }
  296.         } else if (strstr($row_table_def['True_Type'], 'set')) {
  297.             echo ' onclick="if (this.checked) {document.forms[\'insertForm\'].elements[\'field_' . md5($field) . '[]\'].selectedIndex = -1}; return true" />' . "\n";
  298.     } else {
  299.             echo ' onclick="if (this.checked) {document.forms[\'insertForm\'].elements[\'fields[' . urlencode($field) . ']\'].value = \'\'}; return true" />' . "\n";
  300.         }
  301.     } else {
  302.         echo '             ' . "\n";
  303.     }
  304.     echo '        </td>' . "\n";
  305.  
  306.     // The value column (depends on type)
  307.     // ----------------
  308.     if (strstr($row_table_def['True_Type'], 'text')) {
  309.         ?>
  310.         <td bgcolor="<?php echo $bgcolor; ?>">
  311.             <?php echo $backup_field . "\n"; ?>
  312.             <textarea name="fields[<?php echo urlencode($field); ?>]" rows="<?php echo $cfgTextareaRows; ?>" cols="<?php echo $cfgTextareaCols; ?>"><?php echo $special_chars; ?></textarea>
  313.         </td>
  314.         <?php
  315.         echo "\n";
  316.         if (strlen($special_chars) > 32000) {
  317.             echo '        <td bgcolor="' . $bgcolor . '">' . $strTextAreaLength . '</td>' . "\n";
  318.         }
  319.     }
  320.     else if (strstr($row_table_def['True_Type'], 'enum')) {
  321.         $enum        = str_replace('enum(', '', $row_table_def['Type']);
  322.         $enum        = ereg_replace('\\)$', '', $enum);
  323.         $enum        = explode('\',\'', substr($enum, 1, -1));
  324.         $enum_cnt    = count($enum);
  325. //        $seenchecked = 0;
  326.         ?>
  327.         <td bgcolor="<?php echo $bgcolor; ?>">
  328.             <input type="hidden" name="fields[<?php echo urlencode($field); ?>]" value="$enum$" />
  329.         <?php
  330.         echo "\n" . '            ' . $backup_field;
  331.  
  332.         // show dropdown or radio depend on length
  333.         if (strlen($row_table_def['Type']) > 20) {
  334.             echo "\n";
  335.             ?>
  336.             <select name="field_<?php echo md5($field); ?>[]">
  337.                 <option value=""></option>
  338.             <?php
  339.             echo "\n";
  340.  
  341.             for ($j = 0; $j < $enum_cnt; $j++) {
  342.                 // Removes automatic MySQL escape format
  343.                 $enum_atom = str_replace('\'\'', '\'', str_replace('\\\\', '\\', $enum[$j]));
  344.                 echo '                ';
  345.                 echo '<option value="' . urlencode($enum_atom) . '"';
  346.                 if ($data == $enum_atom
  347.                     || ($data == '' && (!isset($primary_key) || $row_table_def['Null'] != 'YES')
  348.                         && isset($row_table_def['Default']) && $enum_atom == $row_table_def['Default'])) {
  349.                     echo ' selected="selected"';
  350. //                    $seenchecked = 1;
  351.                 }
  352.                 echo '>' . htmlspecialchars($enum_atom) . '</option>' . "\n";
  353.             } // end for
  354.              
  355. // old null option
  356. //            if ($row_table_def['Null'] == 'YES') {
  357. //                echo '                ';
  358. //                echo '<option value="null"';
  359. //                if ($seenchecked == 0) {
  360. //                    echo ' selected="selected"';
  361. //                }
  362. //                echo '>[' . $strNull . ']</option>' . "\n";
  363. //            } // end if
  364.             ?>
  365.             </select>
  366.             <?php
  367.         } // end if
  368.         else {
  369.             echo "\n";
  370.             for ($j = 0; $j < $enum_cnt; $j++) {
  371.                 // Removes automatic MySQL escape format
  372.                 $enum_atom = str_replace('\'\'', '\'', str_replace('\\\\', '\\', $enum[$j]));
  373.                 echo '            ';
  374.                 echo '<input type="radio" name="field_' . md5($field) . '[]" value="' . urlencode($enum_atom) . '"';
  375.                 if ($data == $enum_atom
  376.                     || ($data == '' && (!isset($primary_key) || $row_table_def['Null'] != 'YES')
  377.                         && isset($row_table_def['Default']) && $enum_atom == $row_table_def['Default'])) {
  378.                     echo ' checked="checked"';
  379. //                    $seenchecked = 1;
  380.                 }
  381.                 echo ' />' . "\n";
  382.                 echo '            ' . htmlspecialchars($enum_atom) . "\n";
  383.             } // end for
  384.  
  385. // old null option
  386. //            if ($row_table_def['Null'] == 'YES') {
  387. //                echo '            ';
  388. //                echo '<input type="radio" name="field_' . md5($field) . '[]" value="null"';
  389. //                if ($seenchecked == 0) {
  390. //                    echo ' checked="checked"';
  391. //                }
  392. //                echo ' />' . "\n";
  393. //                echo '            [' . $strNull . ']' . "\n";
  394. //            } // end if
  395.         } // end else
  396.         echo "\n";
  397.         ?>
  398.         </td>
  399.         <?php
  400.         echo "\n";
  401.     }
  402.     else if (strstr($row_table_def['Type'], 'set')) {
  403.         $set = str_replace('set(', '', $row_table_def['Type']);
  404.         $set = ereg_replace('\)$', '', $set);
  405.         $set = explode(',', $set);
  406.  
  407.         if (isset($vset)) {
  408.             unset($vset);
  409.         }
  410.         for ($vals = explode(',', $data); list($t, $k) = each($vals);) {
  411.             $vset[$k] = 1;
  412.         }
  413.         $size = min(4, count($set));
  414.         ?>
  415.         <td bgcolor="<?php echo $bgcolor; ?>">
  416.             <?php echo $backup_field . "\n"; ?>
  417.             <input type="hidden" name="fields[<?php echo urlencode($field); ?>]" value="$set$" />
  418.             <select name="field_<?php echo md5($field); ?>[]" size="<?php echo $size; ?>" multiple="multiple">
  419.         <?php
  420.         echo "\n";
  421.         $countset = count($set);
  422.         for ($j = 0; $j < $countset;$j++) {
  423.             $subset = substr($set[$j], 1, -1);
  424.             // Removes automatic MySQL escape format
  425.             $subset = str_replace('\'\'', '\'', str_replace('\\\\', '\\', $subset));
  426.             echo '                ';
  427.             echo '<option value="'. urlencode($subset) . '"';
  428.             if (isset($vset[$subset]) && $vset[$subset]) {
  429.                 echo ' selected="selected"';
  430.             }
  431.             echo '>' . htmlspecialchars($subset) . '</option>' . "\n";
  432.         } // end for
  433.         ?>
  434.             </select>
  435.         </td>
  436.         <?php
  437.     }
  438.     // Change by Bernard M. Piller <bernard@bmpsystems.com>
  439.     // We don't want binary data destroyed
  440.     else if ($is_binary || $is_blob) {
  441.         if (($cfgProtectBinary && $is_blob)
  442.             || ($cfgProtectBinary == 'all' && $is_binary)) {
  443.             echo "\n";
  444.             ?>
  445.         <td align="center" bgcolor="<?php echo $bgcolor; ?>">
  446.             <?php echo $strBinaryDoNotEdit . "\n"; ?>
  447.         </td>
  448.             <?php
  449.         } else if ($is_blob) {
  450.             echo "\n";
  451.             ?>
  452.         <td bgcolor="<?php echo $bgcolor; ?>">
  453.             <?php echo $backup_field . "\n"; ?>
  454.             <textarea name="fields[<?php echo urlencode($field); ?>]" rows="<?php echo $cfgTextareaRows; ?>" cols="<?php echo $cfgTextareaCols; ?>"><?php echo $special_chars; ?></textarea>
  455.         </td>
  456.             <?php
  457.         } else {
  458.             if ($len < 4) {
  459.                 $fieldsize = $maxlength = 4;
  460.             } else {
  461.                 $fieldsize = (($len > 40) ? 40 : $len);
  462.                 $maxlength = $len;
  463.             }
  464.             echo "\n";
  465.             ?>
  466.         <td bgcolor="<?php echo $bgcolor; ?>">
  467.             <?php echo $backup_field . "\n"; ?>
  468.             <input type="text" name="fields[<?php echo urlencode($field); ?>]" value="<?php echo $special_chars; ?>" size="<?php echo $fieldsize; ?>" maxlength="<?php echo $maxlength; ?>" />
  469.         </td>
  470.             <?php
  471.         } // end if...elseif...else
  472.     } // end else if
  473.     else {
  474.         if ($len < 4) {
  475.             $fieldsize = $maxlength = 4;
  476.         } else {
  477.             $fieldsize = (($len > 40) ? 40 : $len);
  478.             $maxlength = $len;
  479.         }
  480.         echo "\n";
  481.         ?>
  482.         <td bgcolor="<?php echo $bgcolor; ?>">
  483.             <?php echo $backup_field . "\n"; ?>
  484.             <input type="text" name="fields[<?php echo urlencode($field); ?>]" value="<?php echo $special_chars; ?>" size="<?php echo $fieldsize; ?>" maxlength="<?php echo $maxlength; ?>" />
  485.         </td>
  486.         <?php
  487.     }
  488.     echo "\n";
  489.     ?>
  490.     </tr>
  491.     <?php
  492. echo "\n";
  493. } // end for
  494. ?>
  495.     </table>
  496.     <br />
  497.  
  498.     <table cellpadding="5">
  499.     <tr>
  500.         <td valign="middle" nowrap="nowrap">
  501. <?php
  502. if (isset($primary_key)) {
  503.     ?>
  504.             <input type="radio" name="submit_type" value="<?php echo $strSave; ?>" checked="checked" /><?php echo $strSave; ?><br />
  505.                   <?php echo $strOr; ?><br />
  506.             <input type="radio" name="submit_type" value="<?php echo $strInsertAsNewRow; ?>" /><?php echo $strInsertAsNewRow. "\n"; ?>
  507.     <?php
  508. } else {
  509.     echo "\n";
  510.     ?>
  511.             <input type="hidden" name="submit_type" value="<?php echo $strInsertAsNewRow; ?>" />
  512.     <?php
  513.     echo '            ' . $strInsertAsNewRow . "\n";
  514. }
  515. echo "\n"
  516. ?>
  517.         </td>
  518.         <td valign="middle">
  519.                <b>-- <?php echo $strAnd; ?> --</b>   
  520.         </td>
  521.         <td valign="middle" nowrap="nowrap">
  522.             <input type="radio" name="after_insert" value="back" checked="checked" /><?php echo $strAfterInsertBack; ?><br />
  523.                   <?php echo $strOr; ?><br />
  524.             <input type="radio" name="after_insert" value="new_insert" /><?php echo $strAfterInsertNewInsert . "\n"; ?>
  525.         </td>
  526.     </tr>
  527.  
  528.     <tr>
  529.         <td colspan="3" align="center" valign="middle">
  530.             <input type="submit" value="<?php echo $strGo; ?>" />
  531.         </td>
  532.     </tr>
  533.     </table>
  534.  
  535. </form>
  536.  
  537.  
  538. <?php
  539. /**
  540.  * Displays the footer
  541.  */
  542. echo "\n";
  543. require('./footer.inc.php');
  544. ?>
  545.