root / src / admin.php @ d072e29c
Historique | Voir | Annoter | Télécharger (5,92 ko)
1 |
<?php
|
---|---|
2 |
session_start (); |
3 |
require("headers.php"); |
4 |
|
5 |
|
6 |
|
7 |
if (! defined('PHP_EOL')) { |
8 |
define('PHP_EOL', strtoupper(substr(PHP_OS, 0, 3) == 'WIN') ? "\r\n" |
9 |
: strtoupper(substr(PHP_OS, 0, 3) == 'MAC') ? "\r" : "\n"); |
10 |
} |
11 |
|
12 |
$hn = SERVEUR; |
13 |
$un = NOM; |
14 |
$pw = PASSE; |
15 |
$db = BASE; |
16 |
$submit = "Submit"; |
17 |
$options = 1; |
18 |
$baseFilename = $tb; |
19 |
$pageTitle = $tb; |
20 |
|
21 |
if (@$_REQUEST["action"] == "CHANGE_TB") { |
22 |
$_SESSION["tb"] = $_REQUEST["tb"]; |
23 |
} else {
|
24 |
if (!isset($_SESSION["tb"])) { |
25 |
$_SESSION["tb"] = "lab_members"; |
26 |
} |
27 |
} |
28 |
$tb = $_SESSION["tb"]; |
29 |
|
30 |
$phpExtension = '.php'; |
31 |
if (isset($baseFilename) && $baseFilename != '') { |
32 |
$phpFile = $baseFilename.$phpExtension; |
33 |
//$contentFile = $baseFilename.'Content.inc';
|
34 |
$contentFile = $baseFilename.'.php'; |
35 |
} elseif (isset($tb)) { |
36 |
$phpFile = $tb.$phpExtension; |
37 |
//$contentFile = $tb.'Content.inc';
|
38 |
$contentFile = $tb.'.php'; |
39 |
} else {
|
40 |
$phpFile = 'index'.$phpExtension; |
41 |
//$contentFile = 'Content.inc';
|
42 |
$contentFile = 'phpMyEdit-content.php'; |
43 |
} |
44 |
|
45 |
$buffer = ''; |
46 |
|
47 |
function echo_buffer($x) |
48 |
{ |
49 |
global $buffer; |
50 |
$buffer .= $x.PHP_EOL; |
51 |
} |
52 |
|
53 |
function check_constraints($tb,$fd) |
54 |
{ |
55 |
$query = "show create table $tb"; |
56 |
$result = mysql_query($query); |
57 |
$tableDef = preg_split('/\n/',mysql_result($result,0,1)); |
58 |
|
59 |
$constraint_arg=""; |
60 |
while (list($key,$val) = each($tableDef)) { |
61 |
$words=preg_split("/[\s'`()]+/", $val); |
62 |
if ($words[1] == "CONSTRAINT" && $words[6]=="REFERENCES") { |
63 |
if ($words[5]==$fd) { |
64 |
$constraint_arg=" 'values' => array(\n". |
65 |
" 'table' => '$words[7]',\n".
|
66 |
" 'column' => '$words[8]'\n".
|
67 |
" ),\n";
|
68 |
} |
69 |
|
70 |
} |
71 |
} |
72 |
return $constraint_arg; |
73 |
} |
74 |
|
75 |
$self = basename($_SERVER['PHP_SELF']); |
76 |
$dbl = @mysql_pconnect($hn, $un, $pw); |
77 |
|
78 |
|
79 |
|
80 |
|
81 |
|
82 |
|
83 |
|
84 |
|
85 |
|
86 |
|
87 |
|
88 |
|
89 |
|
90 |
|
91 |
|
92 |
|
93 |
$select_tb = "<form action='admin.php' method='POST'>"; |
94 |
$select_tb .= "<input type='hidden' name='action' value='CHANGE_TB'/>"; |
95 |
$select_tb .= "<select name='tb'>"; |
96 |
$tbs = @mysql_list_tables($db, $dbl); |
97 |
$num_tbs = @mysql_num_rows($tbs); |
98 |
for ($j = 0; $j < $num_tbs; $j++) { |
99 |
$tb_choice = @mysql_tablename($tbs, $j); |
100 |
$tb_choice = htmlspecialchars($tb_choice); |
101 |
$checked = $tb_choice == $tb ? ' selected="selected" ' : ''; |
102 |
$select_tb .= "<option value='$tb_choice' $checked>$tb_choice</option>"; |
103 |
} |
104 |
$select_tb .= "</select>"; |
105 |
$select_tb .= "<input type='Submit' name='Submit' value='Show this table' />"; |
106 |
$select_tb .= "</form>"; |
107 |
|
108 |
echo $select_tb; |
109 |
|
110 |
|
111 |
|
112 |
|
113 |
|
114 |
|
115 |
|
116 |
|
117 |
|
118 |
|
119 |
|
120 |
|
121 |
|
122 |
|
123 |
|
124 |
|
125 |
|
126 |
|
127 |
@mysql_select_db($db); |
128 |
$tb_desc = @mysql_query("DESCRIBE $tb"); |
129 |
$fds = @mysql_list_fields($db,$tb,$dbl); |
130 |
$j = 0; |
131 |
$fd = @mysql_field_name($fds, $j); |
132 |
$ff = @mysql_field_flags($fds, $j); |
133 |
|
134 |
if (!stristr($ff, 'primary_key')) { |
135 |
echo "ERROR, first field is not a primary_key."; |
136 |
exit();
|
137 |
} |
138 |
|
139 |
$id = htmlspecialchars($fd); |
140 |
|
141 |
{ |
142 |
echo_buffer("
|
143 |
// MySQL host name, user name, password, database, and table
|
144 |
\$opts['hn'] = '$hn';
|
145 |
\$opts['un'] = '$un';
|
146 |
\$opts['pw'] = '$pw';
|
147 |
\$opts['db'] = '$db';
|
148 |
\$opts['tb'] = '$tb';
|
149 |
|
150 |
// Name of field which is the unique key
|
151 |
\$opts['key'] = '$id';
|
152 |
|
153 |
// Type of key field (int/real/string/date etc.)");
|
154 |
|
155 |
if ($id == '') { |
156 |
echo_buffer("\$opts['key_type'] = '';");
|
157 |
} else {
|
158 |
$fds = @mysql_list_fields($db,$tb,$dbl); |
159 |
for ($j = 0; ($fd = @mysql_field_name($fds, $j)) != ''; $j++) { |
160 |
if ($fd == $id) { |
161 |
echo_buffer("\$opts['key_type'] = '".@mysql_field_type($fds, $j)."';"); |
162 |
break;
|
163 |
} |
164 |
} |
165 |
} |
166 |
echo_buffer("
|
167 |
// Sorting field(s)
|
168 |
\$opts['sort_field'] = array('$id');
|
169 |
|
170 |
// Options you wish to give the users
|
171 |
// A - add, C - change, P - copy, V - view, D - delete,
|
172 |
// F - filter, I - initial sort suppressed
|
173 |
\$opts['options'] = \$privopt;
|
174 |
");
|
175 |
|
176 |
@mysql_select_db($db); |
177 |
$tb_desc = @mysql_query("DESCRIBE $tb"); |
178 |
$fds = @mysql_list_fields($db, $tb, $dbl); |
179 |
$num_fds = @mysql_num_fields($fds); |
180 |
$ts_cnt = 0; |
181 |
for ($k = 0; $k < $num_fds; $k++) { |
182 |
$fd = mysql_field_name($fds,$k); |
183 |
$fm = mysql_fetch_field($fds,$k); |
184 |
$fn = strtr($fd, '_-.', ' '); |
185 |
$fn = preg_replace('/(^| +)id( +|$)/', '\\1ID\\2', $fn); // uppercase IDs |
186 |
$fn = ucfirst($fn); |
187 |
$row = @mysql_fetch_array($tb_desc); |
188 |
echo_buffer('$opts[\'fdd\'][\''.$fd.'\'] = array('); // ) |
189 |
echo_buffer(" 'name' => '".str_replace('\'','\\\'',$fn)."',"); |
190 |
$auto_increment = strstr($row[5], 'auto_increment') ? 1 : 0; |
191 |
if (substr($row[1],0,3) == 'set') { |
192 |
echo_buffer(" 'select' => 'M',");
|
193 |
} else {
|
194 |
echo_buffer(" 'select' => 'T',");
|
195 |
} |
196 |
if ($auto_increment) { |
197 |
echo_buffer(" 'options' => 'AVCPDR', // auto increment");
|
198 |
} |
199 |
// timestamps are read-only
|
200 |
else if (@mysql_field_type($fds, $k) == 'timestamp') { |
201 |
if ($ts_cnt > 0) { |
202 |
echo_buffer(" 'options' => 'AVCPD',");
|
203 |
} else { // first timestamp |
204 |
echo_buffer(" 'options' => 'AVCPDR', // updated automatically (MySQL feature)");
|
205 |
} |
206 |
$ts_cnt++;
|
207 |
} |
208 |
echo_buffer(" 'maxlen' => ".@mysql_field_len($fds,$k).','); |
209 |
// blobs -> textarea
|
210 |
if (@mysql_field_type($fds,$k) == 'blob') { |
211 |
echo_buffer(" 'textarea' => array(");
|
212 |
echo_buffer(" 'rows' => 5,");
|
213 |
echo_buffer(" 'cols' => 50),");
|
214 |
} |
215 |
// SETs and ENUMs get special treatment
|
216 |
if ((substr($row[1],0,3) == 'set' || substr($row[1],0,4) == 'enum') |
217 |
&& ! (($pos = strpos($row[1], '(')) === false)) { |
218 |
$indent = str_repeat(' ', 18); |
219 |
$outstr = substr($row[1], $pos + 2, -2); |
220 |
$outstr = explode("','", $outstr); |
221 |
$outstr = str_replace("''", "'", $outstr); |
222 |
$outstr = str_replace('"', '\\"', $outstr); |
223 |
$outstr = implode('",'.PHP_EOL.$indent.'"', $outstr); |
224 |
echo_buffer(" 'values' => array(".PHP_EOL.$indent.'"'.$outstr.'"),'); |
225 |
} |
226 |
// automatic support for Default values
|
227 |
if ($row[4] != '' && $row[4] != 'NULL') { |
228 |
echo_buffer(" 'default' => '".$row[4]."',"); |
229 |
} else if ($auto_increment) { |
230 |
echo_buffer(" 'default' => '0',");
|
231 |
} |
232 |
// check for table constraints
|
233 |
$outstr = check_constraints($tb, $fd); |
234 |
if ($outstr != '') { |
235 |
echo_buffer($outstr);
|
236 |
} |
237 |
echo_buffer(" 'sort' => true");
|
238 |
//echo_buffer(" 'nowrap' => false,");
|
239 |
echo_buffer(');');
|
240 |
} |
241 |
|
242 |
|
243 |
eval($buffer); |
244 |
|
245 |
} |
246 |
|
247 |
require("footers.php"); |
248 |
?>
|