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