Statistiques
| Branche: | Révision :

root / src / admin.php @ master

Historique | Voir | Annoter | Télécharger (6,33 ko)

1
<?php
2
session_start();
3
require("headers.php");
4

    
5
if (! defined('PHP_EOL')) {
6
        define('PHP_EOL', strtoupper(substr(PHP_OS, 0, 3) == 'WIN') ? "\r\n"
7
                        : strtoupper(substr(PHP_OS, 0, 3) == 'MAC') ? "\r" : "\n");
8
}
9

    
10

    
11

    
12

    
13

    
14

    
15

    
16

    
17
  
18
  
19

    
20
$hn = SERVEUR;
21
$un = NOM;
22
$pw = PASSE;
23
$db = BASE;
24
$submit        = "Submit";
25
$options       = 1;
26
$baseFilename  = $tb;
27
$pageTitle     = $tb;
28

    
29

    
30
function mysql_tables($database='')
31
{
32
    $tables = array();
33
    $list_tables_sql = "SHOW TABLES FROM {$database};";
34
    $result = mysql_query($list_tables_sql);
35
    if($result)
36
    while($table = mysql_fetch_row($result))
37
    {
38
        $tables[] = $table[0];
39
    }
40
    return $tables;
41
}
42
$tbs = mysql_tables($db);
43

    
44

    
45
if (!in_array($_SESSION["tb"], $tbs)) {
46
  unset($_SESSION["tb"]);
47
}
48
if (@$_REQUEST["action"] == "CHANGE_TB") {
49
  $_SESSION["tb"] = $_REQUEST["tb"];
50
} else {
51
  if (!isset($_SESSION["tb"]) || $_SESSION["tb"] == "admin") {
52
    $_SESSION["tb"] = "lab_members";
53
  }
54
}
55
$tb = $_SESSION["tb"];
56

    
57
$phpExtension = '.php';
58
if (isset($baseFilename) && $baseFilename != '') {
59
        $phpFile = $baseFilename.$phpExtension;
60
        //$contentFile = $baseFilename.'Content.inc';
61
        $contentFile = $baseFilename.'.php';
62
} elseif (isset($tb)) {
63
        $phpFile = $tb.$phpExtension;
64
        //$contentFile = $tb.'Content.inc';
65
        $contentFile = $tb.'.php';
66
} else {
67
        $phpFile = 'index'.$phpExtension;
68
        //$contentFile = 'Content.inc';
69
        $contentFile = 'phpMyEdit-content.php';
70
}
71

    
72
$buffer = '';
73

    
74
function echo_buffer($x)
75
{
76
        global $buffer;
77
        $buffer .= $x.PHP_EOL;
78
}
79

    
80
function check_constraints($tb,$fd)
81
{
82
  $query    = "show create table $tb";
83
  $result   = mysql_query($query);
84
  $tableDef = preg_split('/\n/',mysql_result($result,0,1));
85

    
86
  $constraint_arg="";
87
  while (list($key,$val) = each($tableDef)) {
88
    $words=preg_split("/[\s'`()]+/", $val);
89
    if ($words[1] == "CONSTRAINT" && $words[6]=="REFERENCES") {
90
      if ($words[5]==$fd) {
91
        $constraint_arg="  'values' => array(\n".
92
                        "    'table'  => '$words[7]',\n".
93
                        "    'column' => '$words[8]'\n".
94
                        "  ),\n";
95
      }
96

    
97
    }
98
  }
99
  return $constraint_arg;
100
}
101

    
102
$self = basename($_SERVER['PHP_SELF']);
103
$dbl  = @mysql_pconnect($hn, $un, $pw);
104

    
105

    
106

    
107

    
108

    
109

    
110

    
111

    
112

    
113

    
114

    
115

    
116

    
117

    
118

    
119

    
120
$select_tb = "<form action='admin.php' method='POST'>";
121
$select_tb .= "<input type='hidden' name='action' value='CHANGE_TB'/>";
122
$select_tb .= "<select name='tb'>";
123
$tbs     = @mysql_list_tables($db, $dbl);
124
$num_tbs = @mysql_num_rows($tbs);
125
for ($j = 0; $j < $num_tbs; $j++) {
126
        $tb_choice = @mysql_tablename($tbs, $j);
127
  $tb_choice = htmlspecialchars($tb_choice);
128
  $checked = $tb_choice == $tb ? ' selected="selected" ' : '';
129
        $select_tb .= "<option value='$tb_choice' $checked>$tb_choice</option>";
130
}
131
$select_tb .= "</select>";
132
$select_tb .= "<input type='Submit' name='Submit' value='Show this table' />";
133
$select_tb .= "</form>";
134

    
135
echo $select_tb;
136

    
137

    
138

    
139

    
140

    
141

    
142

    
143

    
144

    
145

    
146

    
147

    
148

    
149

    
150

    
151

    
152

    
153

    
154
@mysql_select_db($db);
155
$tb_desc = @mysql_query("DESCRIBE $tb");
156
$fds     = @mysql_list_fields($db,$tb,$dbl);
157
$j = 0; 
158
$fd = @mysql_field_name($fds, $j);
159
$ff = @mysql_field_flags($fds, $j);
160

    
161
if (!stristr($ff, 'primary_key')) {
162
  echo "ERROR, first field is not a primary_key.";
163
  exit();
164
}
165

    
166
$id = htmlspecialchars($fd);
167

    
168
{
169
        echo_buffer("
170
// MySQL host name, user name, password, database, and table
171
\$opts['hn'] = '$hn';
172
\$opts['un'] = '$un';
173
\$opts['pw'] = '$pw';
174
\$opts['db'] = '$db';
175
\$opts['tb'] = '$tb';
176

177
// Name of field which is the unique key
178
\$opts['key'] = '$id';
179

180
// Type of key field (int/real/string/date etc.)");
181

    
182
        if ($id == '') {
183
                echo_buffer("\$opts['key_type'] = '';");
184
        } else {
185
                $fds = @mysql_list_fields($db,$tb,$dbl);
186
                for ($j = 0; ($fd = @mysql_field_name($fds, $j)) != ''; $j++) {
187
                        if ($fd == $id) {
188
                                echo_buffer("\$opts['key_type'] = '".@mysql_field_type($fds, $j)."';");
189
                                break;
190
                        }
191
                }
192
        }
193
        echo_buffer("
194
// Sorting field(s)
195
\$opts['sort_field'] = array('$id');
196

197
// Options you wish to give the users
198
// A - add,  C - change, P - copy, V - view, D - delete,
199
// F - filter, I - initial sort suppressed
200
\$opts['options'] = \$privopt;
201
");
202

    
203
        @mysql_select_db($db);
204
        $tb_desc = @mysql_query("DESCRIBE $tb");
205
        $fds     = @mysql_list_fields($db, $tb, $dbl);
206
        $num_fds = @mysql_num_fields($fds);
207
        $ts_cnt  = 0;
208
        for ($k = 0; $k < $num_fds; $k++) {
209
                $fd = mysql_field_name($fds,$k);
210
                $fm = mysql_fetch_field($fds,$k);
211
                $fn = strtr($fd, '_-.', '   ');
212
                $fn = preg_replace('/(^| +)id( +|$)/', '\\1ID\\2', $fn); // uppercase IDs
213
                $fn = ucfirst($fn);
214
                $row = @mysql_fetch_array($tb_desc);
215
                echo_buffer('$opts[\'fdd\'][\''.$fd.'\'] = array('); // )
216
                echo_buffer("  'name'     => '".str_replace('\'','\\\'',$fn)."',");
217
                $auto_increment = strstr($row[5], 'auto_increment') ? 1 : 0;
218
                if (substr($row[1],0,3) == 'set') {
219
                        echo_buffer("  'select'   => 'M',");
220
                } else {
221
                        echo_buffer("  'select'   => 'T',");
222
                }
223
                if ($auto_increment) {
224
                        echo_buffer("  'options'  => 'AVCPDR', // auto increment");
225
                }
226
                // timestamps are read-only
227
                else if (@mysql_field_type($fds, $k) == 'timestamp') {
228
                        if ($ts_cnt > 0) {
229
                                echo_buffer("  'options'  => 'AVCPD',");
230
                        } else { // first timestamp
231
                                echo_buffer("  'options'  => 'AVCPDR', // updated automatically (MySQL feature)");
232
                        }
233
                        $ts_cnt++;
234
                }
235
                echo_buffer("  'maxlen'   => ".@mysql_field_len($fds,$k).',');
236
                // blobs -> textarea
237
                if (@mysql_field_type($fds,$k) == 'blob') {
238
                        echo_buffer("  'textarea' => array(");
239
                        echo_buffer("    'rows' => 5,");
240
                        echo_buffer("    'cols' => 50),");
241
                }
242
                // SETs and ENUMs get special treatment
243
                if ((substr($row[1],0,3) == 'set' || substr($row[1],0,4) == 'enum')
244
                                && ! (($pos = strpos($row[1], '(')) === false)) {
245
                        $indent = str_repeat(' ', 18);
246
                        $outstr = substr($row[1], $pos + 2, -2);
247
                        $outstr = explode("','", $outstr);
248
                        $outstr = str_replace("''", "'",  $outstr);
249
                        $outstr = str_replace('"', '\\"', $outstr);
250
                        $outstr = implode('",'.PHP_EOL.$indent.'"', $outstr);
251
                        echo_buffer("  'values'   => array(".PHP_EOL.$indent.'"'.$outstr.'"),');
252
                }
253
                // automatic support for Default values
254
                if ($row[4] != '' && $row[4] != 'NULL') {
255
                        echo_buffer("  'default'  => '".$row[4]."',");
256
                } else if ($auto_increment) {
257
                        echo_buffer("  'default'  => '0',");
258
                }
259
                // check for table constraints
260
                $outstr = check_constraints($tb, $fd);
261
                if ($outstr != '') {
262
                        echo_buffer($outstr);
263
                }
264
                echo_buffer("  'sort'     => true");
265
                //echo_buffer("  'nowrap'   => false,");
266
                echo_buffer(');');
267
        }
268

    
269
   
270
  eval($buffer);
271

    
272
}
273

    
274
require("footers.php");
275
?>