2007-07-02 20:21:30 +00:00
< ? php
2009-06-21 23:20:32 +00:00
if ( $_POST && ! $error && ! isset ( $_POST [ " add_x " ])) { // add is an image and PHP changes add.x to add_x
2007-07-02 20:21:30 +00:00
if ( $_POST [ " drop " ]) {
2008-09-02 08:42:14 +00:00
unset ( $_SESSION [ " databases " ][ $_GET [ " server " ]]);
2009-07-30 08:12:54 +00:00
query_redirect ( " DROP DATABASE " . idf_escape ( $_GET [ " db " ]), substr ( preg_replace ( '~db=[^&]*&~' , '' , ME ), 0 , - 1 ), lang ( 'Database has been dropped.' ));
2007-07-02 20:21:30 +00:00
} elseif ( $_GET [ " db " ] !== $_POST [ " name " ]) {
2009-06-21 23:20:32 +00:00
// create or rename database
unset ( $_SESSION [ " databases " ][ $_GET [ " server " ]]); // clear cache
2009-06-11 11:13:45 +00:00
$dbs = explode ( " \n " , str_replace ( " \r " , " " , $_POST [ " name " ]));
$failed = false ;
2009-07-12 08:25:45 +00:00
$last = " " ;
2009-06-11 11:13:45 +00:00
foreach ( $dbs as $db ) {
2009-06-21 23:20:32 +00:00
if ( count ( $dbs ) == 1 || strlen ( $db )) { // ignore empty lines but always try to create single database
2009-06-22 00:53:51 +00:00
if ( ! queries ( " CREATE DATABASE " . idf_escape ( $db ) . ( $_POST [ " collation " ] ? " COLLATE " . $dbh -> quote ( $_POST [ " collation " ]) : " " ))) {
2009-06-11 11:13:45 +00:00
$failed = true ;
}
$last = $db ;
}
}
2009-07-30 08:12:54 +00:00
if ( query_redirect ( queries (), ME . " db= " . urlencode ( $last ), lang ( 'Database has been created.' ), ! strlen ( $_GET [ " db " ]), false , $failed )) {
2009-05-08 05:23:03 +00:00
$result = $dbh -> query ( " SHOW TABLES " );
2007-07-10 13:30:42 +00:00
while ( $row = $result -> fetch_row ()) {
2008-09-03 13:55:43 +00:00
if ( ! queries ( " RENAME TABLE " . idf_escape ( $row [ 0 ]) . " TO " . idf_escape ( $_POST [ " name " ]) . " . " . idf_escape ( $row [ 0 ]))) {
2007-07-02 20:21:30 +00:00
break ;
}
}
2007-07-10 13:30:42 +00:00
$result -> free ();
2007-07-02 20:21:30 +00:00
if ( ! $row ) {
2009-06-11 11:13:45 +00:00
queries ( " DROP DATABASE " . idf_escape ( $_GET [ " db " ]));
2007-07-02 20:21:30 +00:00
}
2009-07-30 08:12:54 +00:00
query_redirect ( queries (), preg_replace ( '~db=[^&]*&~' , '' , ME ) . " db= " . urlencode ( $_POST [ " name " ]), lang ( 'Database has been renamed.' ), ! $row , false , $row );
2007-07-02 20:21:30 +00:00
}
2008-09-02 08:42:14 +00:00
} else {
2009-06-21 23:20:32 +00:00
// alter database
2008-09-02 08:42:14 +00:00
if ( ! $_POST [ " collation " ]) {
2009-07-30 08:12:54 +00:00
redirect ( substr ( ME , 0 , - 1 ));
2008-09-02 08:42:14 +00:00
}
2009-07-30 08:12:54 +00:00
query_redirect ( " ALTER DATABASE " . idf_escape ( $_POST [ " name " ]) . " COLLATE " . $dbh -> quote ( $_POST [ " collation " ]), substr ( ME , 0 , - 1 ), lang ( 'Database has been altered.' ));
2007-07-02 20:21:30 +00:00
}
}
2009-07-20 12:12:55 +00:00
2008-04-10 14:37:10 +00:00
page_header ( strlen ( $_GET [ " db " ]) ? lang ( 'Alter database' ) : lang ( 'Create database' ), $error , array (), $_GET [ " db " ]);
2007-07-02 20:21:30 +00:00
2008-03-18 10:29:20 +00:00
$collations = collations ();
2008-07-10 15:39:24 +00:00
$name = $_GET [ " db " ];
$collate = array ();
2008-03-18 10:29:20 +00:00
if ( $_POST ) {
2007-07-02 20:21:30 +00:00
$name = $_POST [ " name " ];
2007-07-06 13:00:58 +00:00
$collate = $_POST [ " collation " ];
2009-06-21 23:20:32 +00:00
} elseif ( ! strlen ( $_GET [ " db " ])) {
// propose database name with limited privileges
$result = $dbh -> query ( " SHOW GRANTS " );
while ( $row = $result -> fetch_row ()) {
if ( preg_match ( '~ ON (`(([^\\\\`]+|``|\\\\.)*)%`\\.\\*)?~' , $row [ 0 ], $match ) && $match [ 1 ]) {
$name = stripcslashes ( idf_unescape ( $match [ 2 ]));
break ;
2007-07-26 11:11:58 +00:00
}
2007-07-06 13:00:58 +00:00
}
2009-06-21 23:20:32 +00:00
$result -> free ();
} elseif (( $result = $dbh -> query ( " SHOW CREATE DATABASE " . idf_escape ( $_GET [ " db " ])))) {
$create = $dbh -> result ( $result , 1 );
if ( preg_match ( '~ COLLATE ([^ ]+)~' , $create , $match )) {
$collate = $match [ 1 ];
} elseif ( preg_match ( '~ CHARACTER SET ([^ ]+)~' , $create , $match )) {
// default collation
$collate = $collations [ $match [ 1 ]][ 0 ];
}
$result -> free ();
2007-07-02 20:21:30 +00:00
}
?>
2007-07-09 14:47:46 +00:00
2007-07-11 21:06:19 +00:00
< form action = " " method = " post " >
< p >
2009-07-20 12:12:55 +00:00
< ? php echo ( $_POST [ " add_x " ]
2009-07-28 16:20:50 +00:00
? '<textarea name="name" rows="10" cols="40">' . h ( $name ) . '</textarea><br>'
: '<input name="name" value="' . h ( $name ) . '" maxlength="64">'
2009-07-20 12:12:55 +00:00
) . " \n " ; ?>
2009-07-11 20:30:40 +00:00
< select name = " collation " >< option value = " " > ( < ? php echo lang ( 'collation' ); ?> )<?php echo optionlist($collations, $collate); ?></select>
< input type = " hidden " name = " token " value = " <?php echo $token ; ?> " >
< input type = " submit " value = " <?php echo lang('Save'); ?> " >
2009-06-15 09:50:00 +00:00
< ? php
if ( strlen ( $_GET [ " db " ])) {
2009-07-11 20:30:40 +00:00
echo " <input type='submit' name='drop' value=' " . lang ( 'Drop' ) . " ' $confirm > \n " ;
2009-06-15 09:50:00 +00:00
} elseif ( ! $_POST [ " add_x " ]) {
2009-07-11 20:30:40 +00:00
echo " <input type='image' name='add' src='../adminer/plus.gif' alt='+' title=' " . lang ( 'Add next' ) . " '> \n " ;
2009-06-15 09:50:00 +00:00
}
?>
2007-07-11 21:06:19 +00:00
</ form >