PageRenderTime 25ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/manage/phpmyadminlite/tbl_create.php

https://gitlab.com/albert925/lading-ach
PHP | 280 lines | 177 code | 29 blank | 74 comment | 48 complexity | 31e10cb0fa0c782b7db258aa1a2c10fd MD5 | raw file
  1. <?php
  2. /* vim: set expandtab sw=4 ts=4 sts=4: */
  3. /**
  4. * @uses $cfg['DefaultTabDatabase']
  5. * @uses $GLOBALS['table']
  6. * @uses $GLOBALS['db']
  7. * @uses $strTableEmpty
  8. * @uses $strTableAlreadyExists
  9. * @uses $strTable
  10. * @uses $strTableHasBeenCreated
  11. * @uses PMA_Table::generateFieldSpec()
  12. * @uses PMA_checkParameters()
  13. * @uses PMA_generateCharsetQueryPart()
  14. * @uses PMA_sqlAddslashes()
  15. * @uses PMA_DBI_try_query()
  16. * @uses PMA_getRelationsParam()
  17. * @uses PMA_setMIME()
  18. * @uses PMA_mysqlDie()
  19. * @uses PMA_generate_common_url()
  20. * @uses PMA_DBI_get_columns()
  21. * @uses PMA_DBI_select_db()
  22. * @uses PMA_backquote()
  23. * @uses $_REQUEST['do_save_data']
  24. * @uses $_REQUEST['submit_num_fields']
  25. * @uses $_REQUEST['orig_num_fields']
  26. * @uses $_REQUEST['added_fields']
  27. * @uses $_REQUEST['num_fields']
  28. * @uses preg_replace()
  29. * @uses count()
  30. * @uses is_array()
  31. * @uses strlen()
  32. * @uses sprintf()
  33. * @uses htmlspecialchars()
  34. * @version $Id$
  35. * @package phpMyAdmin
  36. */
  37. /**
  38. * Get some core libraries
  39. */
  40. require_once './libraries/common.inc.php';
  41. require_once './libraries/Table.class.php';
  42. $GLOBALS['js_include'][] = 'functions.js';
  43. require_once './libraries/header.inc.php';
  44. // Check parameters
  45. // @todo PMA_checkParameters does not check db and table proper with strlen()
  46. PMA_checkParameters(array('db', 'table'));
  47. /**
  48. * Defines the url to return to in case of error in a sql statement
  49. */
  50. if (! strlen($table)) {
  51. // No table name
  52. PMA_mysqlDie($strTableEmpty, '', '',
  53. 'db_structure.php?' . PMA_generate_common_url($db));
  54. } elseif (PMA_DBI_get_columns($db, $table)) {
  55. // table exists already
  56. PMA_mysqlDie(sprintf($strTableAlreadyExists, htmlspecialchars($table)), '',
  57. '', 'db_structure.php?' . PMA_generate_common_url($db));
  58. }
  59. $err_url = 'tbl_create.php?' . PMA_generate_common_url($db, $table);
  60. // check number of fields to be created
  61. if (isset($_REQUEST['submit_num_fields'])) {
  62. $regenerate = true; // for libraries/tbl_properties.inc.php
  63. $num_fields = $_REQUEST['orig_num_fields'] + $_REQUEST['added_fields'];
  64. } elseif (isset($_REQUEST['num_fields']) && intval($_REQUEST['num_fields']) > 0) {
  65. $num_fields = (int) $_REQUEST['num_fields'];
  66. } else {
  67. $num_fields = 2;
  68. }
  69. /**
  70. * Selects the database to work with
  71. */
  72. PMA_DBI_select_db($db);
  73. /**
  74. * The form used to define the structure of the table has been submitted
  75. */
  76. if (isset($_REQUEST['do_save_data'])) {
  77. $sql_query = '';
  78. // Transforms the radio button field_key into 3 arrays
  79. $field_cnt = count($_REQUEST['field_name']);
  80. for ($i = 0; $i < $field_cnt; ++$i) {
  81. if (isset($_REQUEST['field_key'][$i])) {
  82. if ($_REQUEST['field_key'][$i] == 'primary_' . $i) {
  83. $field_primary[] = $i;
  84. }
  85. if ($_REQUEST['field_key'][$i] == 'index_' . $i) {
  86. $field_index[] = $i;
  87. }
  88. if ($_REQUEST['field_key'][$i] == 'unique_' . $i) {
  89. $field_unique[] = $i;
  90. }
  91. } // end if
  92. } // end for
  93. // Builds the fields creation statements
  94. for ($i = 0; $i < $field_cnt; $i++) {
  95. // '0' is also empty for php :-(
  96. if (empty($_REQUEST['field_name'][$i]) && $_REQUEST['field_name'][$i] != '0') {
  97. continue;
  98. }
  99. $query = PMA_Table::generateFieldSpec(
  100. $_REQUEST['field_name'][$i],
  101. $_REQUEST['field_type'][$i],
  102. $_REQUEST['field_length'][$i],
  103. $_REQUEST['field_attribute'][$i],
  104. isset($_REQUEST['field_collation'][$i])
  105. ? $_REQUEST['field_collation'][$i]
  106. : '',
  107. isset($_REQUEST['field_null'][$i])
  108. ? $_REQUEST['field_null'][$i]
  109. : 'NOT NULL',
  110. $_REQUEST['field_default_type'][$i],
  111. $_REQUEST['field_default_value'][$i],
  112. isset($_REQUEST['field_extra'][$i])
  113. ? $_REQUEST['field_extra'][$i]
  114. : false,
  115. isset($_REQUEST['field_comments'][$i])
  116. ? $_REQUEST['field_comments'][$i]
  117. : '',
  118. $field_primary,
  119. $i);
  120. $query .= ', ';
  121. $sql_query .= $query;
  122. } // end for
  123. unset($field_cnt, $query);
  124. $sql_query = preg_replace('@, $@', '', $sql_query);
  125. // Builds the primary keys statements
  126. $primary = '';
  127. $primary_cnt = (isset($field_primary) ? count($field_primary) : 0);
  128. for ($i = 0; $i < $primary_cnt; $i++) {
  129. $j = $field_primary[$i];
  130. if (isset($_REQUEST['field_name'][$j]) && strlen($_REQUEST['field_name'][$j])) {
  131. $primary .= PMA_backquote($_REQUEST['field_name'][$j]) . ', ';
  132. }
  133. } // end for
  134. unset($primary_cnt);
  135. $primary = preg_replace('@, $@', '', $primary);
  136. if (strlen($primary)) {
  137. $sql_query .= ', PRIMARY KEY (' . $primary . ')';
  138. }
  139. unset($primary);
  140. // Builds the indexes statements
  141. $index = '';
  142. $index_cnt = (isset($field_index) ? count($field_index) : 0);
  143. for ($i = 0;$i < $index_cnt; $i++) {
  144. $j = $field_index[$i];
  145. if (isset($_REQUEST['field_name'][$j]) && strlen($_REQUEST['field_name'][$j])) {
  146. $index .= PMA_backquote($_REQUEST['field_name'][$j]) . ', ';
  147. }
  148. } // end for
  149. unset($index_cnt);
  150. $index = preg_replace('@, $@', '', $index);
  151. if (strlen($index)) {
  152. $sql_query .= ', INDEX (' . $index . ')';
  153. }
  154. unset($index);
  155. // Builds the uniques statements
  156. $unique = '';
  157. $unique_cnt = (isset($field_unique) ? count($field_unique) : 0);
  158. for ($i = 0; $i < $unique_cnt; $i++) {
  159. $j = $field_unique[$i];
  160. if (isset($_REQUEST['field_name'][$j]) && strlen($_REQUEST['field_name'][$j])) {
  161. $unique .= PMA_backquote($_REQUEST['field_name'][$j]) . ', ';
  162. }
  163. } // end for
  164. unset($unique_cnt);
  165. $unique = preg_replace('@, $@', '', $unique);
  166. if (strlen($unique)) {
  167. $sql_query .= ', UNIQUE (' . $unique . ')';
  168. }
  169. unset($unique);
  170. // Builds the FULLTEXT statements
  171. $fulltext = '';
  172. $fulltext_cnt = (isset($field_fulltext) ? count($field_fulltext) : 0);
  173. for ($i = 0; $i < $fulltext_cnt; $i++) {
  174. $j = $field_fulltext[$i];
  175. if (isset($_REQUEST['field_name'][$j]) && strlen($_REQUEST['field_name'][$j])) {
  176. $fulltext .= PMA_backquote($_REQUEST['field_name'][$j]) . ', ';
  177. }
  178. } // end for
  179. $fulltext = preg_replace('@, $@', '', $fulltext);
  180. if (strlen($fulltext)) {
  181. $sql_query .= ', FULLTEXT (' . $fulltext . ')';
  182. }
  183. unset($fulltext);
  184. // Builds the 'create table' statement
  185. $sql_query = 'CREATE TABLE ' . PMA_backquote($db) . '.' . PMA_backquote($table)
  186. . ' (' . $sql_query . ')';
  187. // Adds table type, character set, comments and partition definition
  188. if (!empty($_REQUEST['tbl_type']) && ($_REQUEST['tbl_type'] != 'Default')) {
  189. $sql_query .= ' ENGINE = ' . $_REQUEST['tbl_type'];
  190. }
  191. if (!empty($_REQUEST['tbl_collation'])) {
  192. $sql_query .= PMA_generateCharsetQueryPart($_REQUEST['tbl_collation']);
  193. }
  194. if (!empty($_REQUEST['comment'])) {
  195. $sql_query .= ' COMMENT = \'' . PMA_sqlAddslashes($_REQUEST['comment']) . '\'';
  196. }
  197. if (!empty($_REQUEST['partition_definition'])) {
  198. $sql_query .= ' ' . PMA_sqlAddslashes($_REQUEST['partition_definition']);
  199. }
  200. $sql_query .= ';';
  201. // Executes the query
  202. $result = PMA_DBI_try_query($sql_query);
  203. if ($result) {
  204. // garvin: If comments were sent, enable relation stuff
  205. require_once './libraries/relation.lib.php';
  206. require_once './libraries/transformations.lib.php';
  207. // garvin: Update comment table for mime types [MIME]
  208. if (isset($_REQUEST['field_mimetype'])
  209. && is_array($_REQUEST['field_mimetype'])
  210. && $cfg['BrowseMIME']) {
  211. foreach ($_REQUEST['field_mimetype'] as $fieldindex => $mimetype) {
  212. if (isset($_REQUEST['field_name'][$fieldindex])
  213. && strlen($_REQUEST['field_name'][$fieldindex])) {
  214. PMA_setMIME($db, $table, $_REQUEST['field_name'][$fieldindex], $mimetype,
  215. $_REQUEST['field_transformation'][$fieldindex],
  216. $_REQUEST['field_transformation_options'][$fieldindex]);
  217. }
  218. }
  219. }
  220. $message = PMA_Message::success('strTableHasBeenCreated');
  221. $message->addParam(PMA_backquote($db) . '.' . PMA_backquote($table));
  222. $display_query = $sql_query;
  223. $sql_query = '';
  224. // read table info on this newly created table, in case
  225. // the next page is Structure
  226. $reread_info = true;
  227. require './libraries/tbl_info.inc.php';
  228. // do not switch to sql.php - as there is no row to be displayed on a new table
  229. if ($cfg['DefaultTabTable'] === 'sql.php') {
  230. require './tbl_structure.php';
  231. } else {
  232. require './' . $cfg['DefaultTabTable'];
  233. }
  234. exit;
  235. } else {
  236. PMA_mysqlDie('', '', '', $err_url, false);
  237. // garvin: An error happened while inserting/updating a table definition.
  238. // to prevent total loss of that data, we embed the form once again.
  239. // The variable $regenerate will be used to restore data in libraries/tbl_properties.inc.php
  240. $num_fields = $_REQUEST['orig_num_fields'];
  241. $regenerate = true;
  242. }
  243. } // end do create table
  244. /**
  245. * Displays the form used to define the structure of the table
  246. */
  247. $action = 'tbl_create.php';
  248. require './libraries/tbl_properties.inc.php';
  249. // Displays the footer
  250. require_once './libraries/footer.inc.php';
  251. ?>