Révision d072e29c src/admin.php
b/src/admin.php | ||
---|---|---|
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 |
?> |
Formats disponibles : Unified diff