40
39
* Modifications have been submitted -> updates the table
43
if (isset($do_save_data)) {
44
$field_cnt = count($field_orig);
42
if (isset($_REQUEST['do_save_data'])) {
43
$field_cnt = count($_REQUEST['field_orig']);
44
$key_fields = array();
45
47
for ($i = 0; $i < $field_cnt; $i++) {
46
// to """ in tbl_sql.php
47
$field_orig[$i] = urldecode($field_orig[$i]);
48
if (strcmp(str_replace('"', '"', $field_orig[$i]), $field_name[$i]) == 0) {
49
$field_name[$i] = $field_orig[$i];
51
$field_default_orig[$i] = urldecode($field_default_orig[$i]);
52
if (strcmp(str_replace('"', '"', $field_default_orig[$i]), $field_default[$i]) == 0) {
53
$field_default[$i] = $field_default_orig[$i];
55
$field_length_orig[$i] = urldecode($field_length_orig[$i]);
56
if (strcmp(str_replace('"', '"', $field_length_orig[$i]), $field_length[$i]) == 0) {
57
$field_length[$i] = $field_length_orig[$i];
62
$query .= ', CHANGE ';
65
$query .= PMA_Table::generateAlter($field_orig[$i], $field_name[$i], $field_type[$i], $field_length[$i], $field_attribute[$i], isset($field_collation[$i]) ? $field_collation[$i] : '', $field_null[$i], $field_default[$i], isset($field_default_current_timestamp[$i]), $field_extra[$i], (isset($field_comments[$i]) ? $field_comments[$i] : ''), $field_default_orig[$i]);
48
$changes[] = 'CHANGE ' . PMA_Table::generateAlter(
49
$_REQUEST['field_orig'][$i],
50
$_REQUEST['field_name'][$i],
51
$_REQUEST['field_type'][$i],
52
$_REQUEST['field_length'][$i],
53
$_REQUEST['field_attribute'][$i],
54
isset($_REQUEST['field_collation'][$i])
55
? $_REQUEST['field_collation'][$i]
57
isset($_REQUEST['field_null'][$i])
58
? $_REQUEST['field_null'][$i]
60
$_REQUEST['field_default_type'][$i],
61
$_REQUEST['field_default_value'][$i],
62
isset($_REQUEST['field_extra'][$i])
63
? $_REQUEST['field_extra'][$i]
65
isset($_REQUEST['field_comments'][$i])
66
? $_REQUEST['field_comments'][$i]
70
$_REQUEST['field_default_orig'][$i]
74
// Builds the primary keys statements and updates the table
77
* this is a little bit more complex
79
* @todo if someone selects A_I when altering a column we need to check:
80
* - no other column with A_I
81
* - the column has an index, if not create one
83
if (count($key_fields)) {
85
foreach ($key_fields as $each_field) {
86
if (isset($_REQUEST['field_name'][$each_field]) && strlen($_REQUEST['field_name'][$each_field])) {
87
$fields[] = PMA_backquote($_REQUEST['field_name'][$each_field]);
90
$key_query = ', ADD KEY (' . implode(', ', $fields) . ') ';
68
94
// To allow replication, we first select the db to use and then run queries
70
PMA_DBI_select_db($db) or PMA_mysqlDie(PMA_DBI_getError(), 'USE ' . PMA_backquote($db) . ';', '', $err_url);
96
PMA_DBI_select_db($db) or PMA_mysqlDie(PMA_DBI_getError(), 'USE ' . PMA_backquote($db) . ';', '', $err_url);
71
97
// Optimization fix - 2 May 2001 - Robbat2
72
$sql_query = 'ALTER TABLE ' . PMA_backquote($table) . ' CHANGE ' . $query;
73
$error_create = FALSE;
74
$result = PMA_DBI_try_query($sql_query) or $error_create = TRUE;
98
$sql_query = 'ALTER TABLE ' . PMA_backquote($table) . ' ' . implode(', ', $changes) . $key_query;
99
$result = PMA_DBI_try_query($sql_query);
76
if ($error_create == FALSE) {
77
$message = $strTable . ' ' . htmlspecialchars($table) . ' ' . $strHasBeenAltered;
101
if ($result !== false) {
102
$message = PMA_Message::success('strTableAlteredSuccessfully');
103
$message->addParam($table);
80
106
// garvin: If comments were sent, enable relation stuff
81
107
require_once './libraries/relation.lib.php';
82
108
require_once './libraries/transformations.lib.php';
84
$cfgRelation = PMA_getRelationsParam();
86
// take care of pmadb internal comments here
87
// garvin: Update comment table, if a comment was set.
88
if (PMA_MYSQL_INT_VERSION < 40100 && isset($field_comments) && is_array($field_comments) && $cfgRelation['commwork']) {
89
foreach ($field_comments AS $fieldindex => $fieldcomment) {
90
if (isset($field_name[$fieldindex]) && strlen($field_name[$fieldindex])) {
91
PMA_setComment($db, $table, $field_name[$fieldindex], $fieldcomment, $field_orig[$fieldindex], 'pmadb');
110
// updaet field names in relation
111
if (isset($_REQUEST['field_orig']) && is_array($_REQUEST['field_orig'])) {
112
foreach ($_REQUEST['field_orig'] as $fieldindex => $fieldcontent) {
113
if ($_REQUEST['field_name'][$fieldindex] != $fieldcontent) {
114
PMA_REL_renameField($db, $table, $fieldcontent,
115
$_REQUEST['field_name'][$fieldindex]);
96
// garvin: Rename relations&display fields, if altered.
97
if (($cfgRelation['displaywork'] || $cfgRelation['relwork']) && isset($field_orig) && is_array($field_orig)) {
98
foreach ($field_orig AS $fieldindex => $fieldcontent) {
99
if ($field_name[$fieldindex] != $fieldcontent) {
100
if ($cfgRelation['displaywork']) {
101
$table_query = 'UPDATE ' . PMA_backquote($GLOBALS['cfgRelation']['db']) . '.' . PMA_backquote($cfgRelation['table_info'])
102
. ' SET display_field = \'' . PMA_sqlAddslashes($field_name[$fieldindex]) . '\''
103
. ' WHERE db_name = \'' . PMA_sqlAddslashes($db) . '\''
104
. ' AND table_name = \'' . PMA_sqlAddslashes($table) . '\''
105
. ' AND display_field = \'' . PMA_sqlAddslashes($fieldcontent) . '\'';
106
$tb_rs = PMA_query_as_cu($table_query);
111
if ($cfgRelation['relwork']) {
112
$table_query = 'UPDATE ' . PMA_backquote($GLOBALS['cfgRelation']['db']) . '.' . PMA_backquote($cfgRelation['relation'])
113
. ' SET master_field = \'' . PMA_sqlAddslashes($field_name[$fieldindex]) . '\''
114
. ' WHERE master_db = \'' . PMA_sqlAddslashes($db) . '\''
115
. ' AND master_table = \'' . PMA_sqlAddslashes($table) . '\''
116
. ' AND master_field = \'' . PMA_sqlAddslashes($fieldcontent) . '\'';
117
$tb_rs = PMA_query_as_cu($table_query);
121
$table_query = 'UPDATE ' . PMA_backquote($GLOBALS['cfgRelation']['db']) . '.' . PMA_backquote($cfgRelation['relation'])
122
. ' SET foreign_field = \'' . PMA_sqlAddslashes($field_name[$fieldindex]) . '\''
123
. ' WHERE foreign_db = \'' . PMA_sqlAddslashes($db) . '\''
124
. ' AND foreign_table = \'' . PMA_sqlAddslashes($table) . '\''
125
. ' AND foreign_field = \'' . PMA_sqlAddslashes($fieldcontent) . '\'';
126
$tb_rs = PMA_query_as_cu($table_query);
130
} // end if fieldname has changed
131
} // end while check fieldnames
132
} // end if relations/display has to be changed
134
// garvin: Update comment table for mime types [MIME]
135
if (isset($field_mimetype) && is_array($field_mimetype) && $cfgRelation['commwork'] && $cfgRelation['mimework'] && $cfg['BrowseMIME']) {
136
foreach ($field_mimetype AS $fieldindex => $mimetype) {
137
if (isset($field_name[$fieldindex]) && strlen($field_name[$fieldindex])) {
138
PMA_setMIME($db, $table, $field_name[$fieldindex], $mimetype, $field_transformation[$fieldindex], $field_transformation_options[$fieldindex]);
121
if (isset($_REQUEST['field_mimetype'])
122
&& is_array($_REQUEST['field_mimetype'])
123
&& $cfg['BrowseMIME']) {
124
foreach ($_REQUEST['field_mimetype'] as $fieldindex => $mimetype) {
125
if (isset($_REQUEST['field_name'][$fieldindex])
126
&& strlen($_REQUEST['field_name'][$fieldindex])) {
127
PMA_setMIME($db, $table, $_REQUEST['field_name'][$fieldindex],
129
$_REQUEST['field_transformation'][$fieldindex],
130
$_REQUEST['field_transformation_options'][$fieldindex]);