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 |
?>
|