$db, 'sql_query' => $_REQUEST['sql_query'] ); if (preg_match('@^tbl_@', $GLOBALS['goto'])) { $_url_params['table'] = $table; } $err_url = $GLOBALS['goto'] . PMA_generate_common_url($_url_params); unset($_url_params); /** * Sets parameters for links * where is this variable used? * replace by PMA_generate_common_url($url_params); */ $url_query = PMA_generate_common_url($url_params, 'html', ''); /** * get table information * @todo should be done by a Table object */ require_once 'libraries/tbl_info.inc.php'; /** * Get comments for table fileds/columns */ $comments_map = array(); if ($GLOBALS['cfg']['ShowPropertyComments']) { $comments_map = PMA_getComments($db, $table); } /** * START REGULAR OUTPUT */ /** * used in ./libraries/header.inc.php to load JavaScript library file */ $GLOBALS['js_include'][] = 'functions.js'; $GLOBALS['js_include'][] = 'tbl_change.js'; $GLOBALS['js_include'][] = 'jquery/timepicker.js'; $GLOBALS['js_include'][] = 'gis_data_editor.js'; /** * HTTP and HTML headers */ require_once 'libraries/header.inc.php'; /** * Displays the query submitted and its result * * @todo where does $disp_message and $disp_query come from??? */ if (! empty($disp_message)) { if (! isset($disp_query)) { $disp_query = null; } PMA_showMessage($disp_message, $disp_query); } /** * Get the analysis of SHOW CREATE TABLE for this table * @todo should be handled by class Table */ $show_create_table = PMA_DBI_fetch_value( 'SHOW CREATE TABLE ' . PMA_backquote($db) . '.' . PMA_backquote($table), 0, 1 ); $analyzed_sql = PMA_SQP_analyze(PMA_SQP_parse($show_create_table)); unset($show_create_table); /** * Get the list of the fields of the current table */ PMA_DBI_select_db($db); $table_fields = array_values(PMA_DBI_get_columns($db, $table)); $paramTableDbArray = array($table, $db); if (! isset($where_clause)) { $where_clause = null; } //Retrieve values for data edit view list($insert_mode, $where_clauses, $result, $rows, $where_clause_array, $found_unique_key) = PMA_getValuesForEditMode($where_clause, $table, $db); // Copying a row - fetched data will be inserted as a new row, therefore the where clause is needless. if (isset($_REQUEST['default_action']) && $_REQUEST['default_action'] === 'insert') { unset($where_clause, $where_clauses); } // retrieve keys into foreign fields, if any $foreigners = PMA_getForeigners($db, $table); // Retrieve form parameters for insert/edit form $_form_params = PMA_getFormParametersForInsertForm( $db, $table, $where_clauses, $where_clause_array, $err_url); /** * Displays the form */ // autocomplete feature of IE kills the "onchange" event handler and it // must be replaced by the "onpropertychange" one in this case $chg_evt_handler = (PMA_USR_BROWSER_AGENT == 'IE' && PMA_USR_BROWSER_VER >= 5 && PMA_USR_BROWSER_VER < 7) ? 'onpropertychange' : 'onchange'; // Had to put the URI because when hosted on an https server, // some browsers send wrongly this form to the http server. $html_output = ''; //Set on key handler for moving using by Ctrl+arrows $html_output .= '' . ''; // Set if we passed the first timestamp field $timestamp_seen = 0; $columns_cnt = count($table_fields); $tabindex = 0; $tabindex_for_function = +3000; $tabindex_for_null = +6000; $tabindex_for_value = 0; $o_rows = 0; $biggest_max_file_size = 0; $url_params['db'] = $db; $url_params['table'] = $table; $url_params = PMA_urlParamsInEditMode($url_params); //Insert/Edit form $html_output .= '
$current_row) { if ($current_row === false) { unset($current_row); } $jsvkey = $row_id; $rownumber_param = '&rownumber=' . $row_id; $vkey = '[multi_edit][' . $jsvkey . ']'; $current_result = (isset($result) && is_array($result) && isset($result[$row_id]) ? $result[$row_id] : $result); if ($insert_mode && $row_id > 0) { $html_output .= '' .'
' . "\n"; } $html_output .= PMA_getHeadAndFootOfInsertRowTable($url_params) . ''; // Sets a multiplier used for input-field counts (as zero cannot be used, advance the counter plus one) $m_rows = $o_rows + 1; //store the default value for CharEditing $default_char_editing = $cfg['CharEditing']; $odd_row = true; for ($i = 0; $i < $columns_cnt; $i++) { if (! isset($table_fields[$i]['processed'])) { $column = $table_fields[$i]; $column = PMA_analyzeTableColumnsArray($column, $comments_map, $timestamp_seen); } $extracted_columnspec = PMA_extractColumnSpec($column['Type']); if (-1 === $column['len']) { $column['len'] = PMA_DBI_field_len($current_result, $i); // length is unknown for geometry fields, make enough space to edit very simple WKTs if (-1 === $column['len']) { $column['len'] = 30; } } //Call validation when the form submited... $unnullify_trigger = $chg_evt_handler . "=\"return verificationsAfterFieldChange('" . PMA_escapeJsString($column['Field_md5']) . "', '" . PMA_escapeJsString($jsvkey) . "','".$column['pma_type'] . "')\""; // Use an MD5 as an array index to avoid having special characters in the name atttibute (see bug #1746964 ) $column_name_appendix = $vkey . '[' . $column['Field_md5'] . ']'; if ($column['Type'] == 'datetime' && ! isset($column['Default']) && ! is_null($column['Default']) && ($insert_mode || ! isset($current_row[$column['Field']])) ) { // INSERT case or // UPDATE case with an NULL value $current_row[$column['Field']] = date('Y-m-d H:i:s', time()); } $html_output .= '' . '' . $column['Field_title'] . '' . ''; if ($cfg['ShowFieldTypesInDataEditView']) { $html_output .= '' . '' . $column['pma_type'] . '' . ''; } //End if // Get a list of GIS data types. $gis_data_types = PMA_getGISDatatypes(); // Prepares the field value $real_null_value = false; $special_chars_encoded = ''; if (isset($current_row)) { // (we are editing) list($real_null_value, $special_chars_encoded, $special_chars, $data, $backup_field) = PMA_getSpecialCharsAndBackupFieldForExistingRow($current_row, $column, $extracted_columnspec, $real_null_value, $gis_data_types, $column_name_appendix); } else { // (we are inserting) // display default values list($real_null_value, $data, $special_chars, $backup_field, $special_chars_encoded) = PMA_getSpecialCharsAndBackupFieldForInsertingMode($column, $real_null_value); } $idindex = ($o_rows * $columns_cnt) + $i + 1; $tabindex = $idindex; // Get a list of data types that are not yet supported. $no_support_types = PMA_unsupportedDatatypes(); // The function column // ------------------- if ($cfg['ShowFunctionFields']) { $html_output .= PMA_getFunctionColumn($column, $is_upload, $column_name_appendix, $unnullify_trigger, $no_support_types, $tabindex_for_function, $tabindex, $idindex, $insert_mode); } // The null column // --------------- $foreignData = PMA_getForeignData($foreigners, $column['Field'], false, '', ''); $html_output .= PMA_getNullColumn($column, $column_name_appendix, $real_null_value, $tabindex, $tabindex_for_null, $idindex, $vkey, $foreigners, $foreignData); // The value column (depends on type) // ---------------- // See bug #1667887 for the reason why we don't use the maxlength // HTML attribute $html_output .= ' ' . "\n"; // Will be used by js/tbl_change.js to set the default value // for the "Continue insertion" feature $html_output .= '' . $special_chars . ''; $html_output .= PMA_getValueColumn( $column, $backup_field, $column_name_appendix, $unnullify_trigger,$tabindex, $tabindex_for_value, $idindex, $data,$special_chars, $foreignData, $odd_row, $paramTableDbArray,$rownumber_param, $titles, $text_dir, $special_chars_encoded, $vkey,$is_upload, $biggest_max_file_size, $default_char_editing, $no_support_types, $gis_data_types, $extracted_columnspec); $html_output .= '' . ''; $odd_row = !$odd_row; } // end for $o_rows++; $html_output .= ' ' . '
'; } // end foreach on multi-edit $html_output .='
' . '' . '
'; if (! isset($after_insert)) { $after_insert = 'back'; } //action panel $html_output .= PMA_getActionsPanel($where_clause, $after_insert, $tabindex, $tabindex_for_value, $found_unique_key); if ($biggest_max_file_size > 0) { $html_output .= ' ' . PMA_generateHiddenMaxFileSize($biggest_max_file_size) . "\n"; } $html_output .= '
'; // end Insert/Edit form if ($insert_mode) { //Continue insertion form $html_output .= PMA_getContinueInsertionForm($table, $db, $where_clause_array, $err_url); } echo $html_output; /** * Displays the footer */ require 'libraries/footer.inc.php'; ?>