Здравствуйте Гость [ Вход | Регистрация ] | Форум в сети 6725-й день

Шановні користувачі! Запрошуємо вас до офіційного телеграм-канала 0day Community. Тут ви зможете поспілкуватися одне з одним та дізнатися про останні новини щодо роботи ресурса, поставити запитання до адміністрації, тощо. Перейти до телеграм-канала можна відсканувавши QR-код або натиснувши на посилання: @zeroday_ua

 EXPORT данных(код создания таблицы) из PhpMyadmin, EXPORT данных(код создания таблицы) из PhpMyadmin

Lewui
Dec 22 2015, 10:10
  
Пост #1


Незарегистрированный







Нужна помощь, нужно сделать вывод кода для создания таблицы из вкладки Экспорт(EXPORT) в PHPMYADMIN, что в таблице вкладка, вывести в текстратию.
Вывод кода для создания таблицы, вкладка Экспорт, текстария.
(База данных - таблица - вкладка EXPORT - кнопка go - вывод кода в TEXTARIA)

Оформление: Форма, текстария, комбобокс(для выбора таблицы) , кнопка вывода данных из EXPORT таблицы.

Я начал делать только оформление, не знаю как сделать вывод из EXPORT в PHPMYADMIN.
К примеру, EXPORT из таблицы Vasa:
-- phpMyAdmin SQL Dump
-- version 3.2.3
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Dec 22, 2015 at 10:39 AM
-- Server version: 5.1.40
-- PHP Version: 5.3.1

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Database: `AvtobysPark`
--

-- --------------------------------------------------------

--
-- Table structure for table `Vasa`
--

CREATE TABLE IF NOT EXISTS `Vasa` (
`q` int(11) DEFAULT NULL,
`w` varchar(50) DEFAULT NULL,
`eret` tinyint(4) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;

--
-- Dumping data for table `Vasa`
--


Это нужно вывести в TEXTARIA




Вот моё начало


<form action=Export.php method=GET>  
<input type=hidden name=o value=<? print $_GET['o'];;?>>  
<select name='y1'>  
<option name=k value=1>Avtobys</option>  
<option name=k value=2>Marshryt</option>  
<option name=k value=3>Marshryt_punkt</option>  
<option name=k value=4>Nasel_pynkt</option>  
<option name=k value=5>Passazir</option>  
<option name=k value=6>Prodazha</option>  
<option name=k value=7>Raspisanie</option>  
<option name=k value=8>Vasa</option>  
</select>  
</form>  
<?  
mysql_connect("localhost","root") or die("no connect");  
mysql_select_db("AvtobysPark");  
print 'Export:<textarea  name=zapr rows=20 cols =70 ></textarea><br><br>';  
?><input type=submit name=submit value=Go ><?  

?>
Go to the top of the page
+Quote Post
 
Reply to this topicStart new topic
Ответов(1 - 12)
elevenelven
Dec 22 2015, 14:55
  
Пост #2



Репутация:   39  
Активист
*

Группа: Пользователи
Сообщений: 218
С нами с: 2-June 07


Чувствуется рука мастера. Но нет...

http://php.net/manual/en/function.shell-exec.php

`mysqldump -u root -p --no-data dbname > schema.sql`

-----------------

А можно не делать велосипед и... https://github.com/ifsnop/mysqldump-php

Сообщение отредактировал elevenelven - Dec 22 2015, 15:03
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Vo1
Dec 22 2015, 18:00
  
Пост #3

Благодарности: 749

Репутация:   147  
Старожил
****

Группа: Пользователи
Сообщений: 2 396
С нами с: 10-November 06


(elevenelven @ Dec 22 2015, 13:55) Перейти к цитате

Чувствуется рука мастера. Но нет...

http://php.net/manual/en/function.shell-exec.php

`mysqldump -u root -p --no-data dbname > schema.sql`

-----------------

А можно не делать велосипед и... https://github.com/ifsnop/mysqldump-php

чувствуется рука мастера, но нет
SHOW CREATE TABLE <name>;
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
elevenelven
Dec 23 2015, 12:10
  
Пост #4



Репутация:   39  
Активист
*

Группа: Пользователи
Сообщений: 218
С нами с: 2-June 07


В ТЗ есть Dumping data for table `Vasa`.
Поэтому ваш вариант не подойдет.
Конечно, если нужна только структура таблицы, проще выполнить чистый sql.

Сообщение отредактировал elevenelven - Dec 23 2015, 12:16
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Vo1
Dec 23 2015, 12:34
  
Пост #5

Благодарности: 749

Репутация:   147  
Старожил
****

Группа: Пользователи
Сообщений: 2 396
С нами с: 10-November 06


(elevenelven @ Dec 23 2015, 11:10) Перейти к цитате

В ТЗ есть Dumping data for table `Vasa`.
Поэтому ваш вариант не подойдет.
Конечно, если нужна только структура таблицы, проще выполнить чистый sql.


echo "\n--\n-- Dumping data for table `$tableName`\n--\n";
Ну реально, использовать exec (да еще и с выводом в файл, да еще и не в /tmp) - самый глупый совет, который можно дать программисту.
и тс, не забудь про mysql_real_escape_string($tableName)

Сообщение отредактировал Vo1 - Dec 23 2015, 12:43
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
elevenelven
Dec 23 2015, 13:48
  
Пост #6



Репутация:   39  
Активист
*

Группа: Пользователи
Сообщений: 218
С нами с: 2-June 07


0. echo "\n--\n-- Dumping data for table `$tableName`\n--\n"; Это вывод строки. Что не равносильно экспорту данных из таблицы MySQL.
1. Вы путаете exec и backtick operator (ну или shell_exec() ).
2. Я не предлагаю папку для экспорта файла, а привел пример.
3. Предоставил данные реализованной библиотеки, которая решает поставленную задачу.

А какое решение предлагаете вы?
Помимо не совсем корректных замечаний в мой адрес, вы предложили только экспорт структуры таблицы, но не данных.

-----------------------------

Обращаясь к ТС, предложу ему постить подобные вопросы на toster.ru

Сообщение отредактировал elevenelven - Dec 23 2015, 13:53
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Vo1
Dec 23 2015, 13:58
  
Пост #7

Благодарности: 749

Репутация:   147  
Старожил
****

Группа: Пользователи
Сообщений: 2 396
С нами с: 10-November 06


(elevenelven @ Dec 23 2015, 12:48) Перейти к цитате

1. Вы путаете exec и backtick operator (ну или shell_exec() ).
2. Я не предлагаю папку для экспорта файла, а привел пример.
3. Предоставил данные реализованной библиотеки, которая решает поставленную задачу.

А какое решение предлагаете вы (помимо не особо меткой критики)?

-----------------------------

Обращаясь к ТС, предложу ему постить подобные вопросы на toster.ru

Я не путаю.
Использовать exec/shell_exec и прочий подобный мусор для выполнения того, что реализуется средствами языка - это неверно:
- Во-первых, у www-юзера может быть закрыт доступ для на выполнение mysqldump (chmod ug=rwx,o=r) или mysqldump банально не будет в PATH.
- Во вторых - не всегда знаешь куда можно писать - самое верное - писать в /tmp опять же (у меня на хостах всех апач может писать только в пару директорий - DOCUMENT_ROOT/var и DOCUMENT_ROOT/media).
В третьих - в случае sql-инжекта, при использовании mysql_query можно поломать базу, в случае инжекта в shell_exec $dbName = "vasa && rm -rf ./" превращается в
`mysqldump -u root -p --no-data vasa && rm -rf ./ > schema.sql` d.gif

Я предложил использовать SQL query: SHOW CREATE TABLE vasa. Что с ним делать, я думаю он поймет, раз уже использовал в коде
mysql_connect("localhost","root") or die("no connect");
mysql_select_db("AvtobysPark");

а, и да, exec/shell_exec возвращает результат вывода, поэтому дампить в файлу незачем - $result = shell_exec("mysqldump blabla");

Сообщение отредактировал Vo1 - Dec 23 2015, 14:08
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
elevenelven
Dec 23 2015, 14:29
  
Пост #8



Репутация:   39  
Активист
*

Группа: Пользователи
Сообщений: 218
С нами с: 2-June 07


Предположим не путаете. Я руководствовался тем, что утверждение использовать exec и Использовать exec/shell_exec несколько различаются. Не находите? Но давайте предположим что мы оба джентльмены и профессионалы.

- Во-первых, у www-юзера может быть закрыт доступ для на выполнение mysqldump (chmod ug=rwx,o=r) или mysqldump банально не будет в PATH.
Это проблемы деплоя на прод.

-----

- Во вторых - не всегда знаешь куда можно писать - самое верное - писать в /tmp опять же (у меня на хостах всех апач может писать только в пару директорий - DOCUMENT_ROOT/var и DOCUMENT_ROOT/media).

Повторюсь, я не предлагал папку для записи. А если бы предлагал, то это была бы доступная для чтения\записи директория, для php-процесса. Более того, не у всех на хостах апач. И снова же, это проблема деплоя.


-----

В третьих - в случае sql-инжекта, при использовании mysql_query можно поломать базу, в случае инжекта в shell_exec $dbName = "vasa && rm -rf ./" превращается в
`mysqldump -u root -p --no-data vasa && rm -rf ./ > schema.sql`


При фильтрации пользовательского ввода ( escapeshellarg() ), а также имплементации whitelist, инъекции исключены. Это проблема код-ревью, а не функции shell_exec().

------

Я предложил использовать SQL query: SHOW CREATE TABLE vasa.

Но к сожалению, не предложили как получить дамп данных.

------
а, и да, exec/shell_exec возвращает результат вывода, поэтому дампить в файлу незачем

В файл пишем, потому что:
- у пайпинга через backtick ограниченный буфер.
- у процесса php ограничена память и нет смысла отъедать её текстовой информацией, которая неминуемо превысит лимит по памяти.
- Дамп - это в итоге файл. Или вы думаете, кто-то читает текст дампов перед сном?

------

для выполнения того, что реализуется средствами языка
Как средствами языка php получить дамп БД, можно изучить на примере исходников Syphex Dumper.
Но это сотни строк кода. Дамп, конкатенация и работа со строками длинее 61440, пайпинг в файл.
Используя mysqldump можно сократить код в разы, потому что это уже готово и это работает не на интерпретируемом языке, а на компилируемом.

------

В следующий раз, критикуя чужое решение, будьте готовы аргументировать свои высказывания.
Потому что фразы типа Ну реально, использовать exec (да еще и с выводом в файл, да еще и не в /tmp) - самый глупый совет, который можно дать программисту. оставляют плохое впечатление.
Вы ведь согласны, что дамп надо делать в файл? Что exec() и shell_exec() абсолютно разные функции?

Сообщение отредактировал elevenelven - Dec 23 2015, 14:39
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Vo1
Dec 23 2015, 14:37
  
Пост #9

Благодарности: 749

Репутация:   147  
Старожил
****

Группа: Пользователи
Сообщений: 2 396
С нами с: 10-November 06


Это проблемы деплоя на прод.
-----
Это проблемы использования неверных инструментов для достижения цели

Повторюсь, я не предлагал папку для записи. А если бы предлагал, то это была бы доступная для чтения\записи директория, для php-процесса. Более того, не у всех на хостах апач. И снова же, это проблема деплоя.
-----
Это проблемы использования неверных инструментов для достижения цели. Апач, не апач, неважно, в любом случае не всегда вебсервер может писать повсюду.

При фильтрации пользовательского ввода ( escapeshellarg() ), а также имплементации whitelist, инъекции исключены. Это проблема код-ревью, а не функции shell_exec().

------

Я предложил использовать SQL query: SHOW CREATE TABLE vasa.

Но к сожалению, не предложили как получить дамп данных.
------
SQL SHOW CREATE TABLE name возвращает CREATE TABLE. По заданию дампить данные человеку не нужно.
С тем же успехом - вы тоже. Ведь не показано где и откуда его прочесть и как вывести. Я всего лишь показал наиболее корректный инструмент. От текущего кода он будет отличаться лишь mysql query/fetch функциями, тогда как ваш инструмент требует существования. К примеру, на моих проектах нет mysqldump как и mysql, т.к. база физически находится на другом сервере.

- у процесса php ограничена память и нет смысла отъедать её текстовой информацией, которая неминуемо превысит лимит по памяти.
Серьезно? CREATE TABLE-дамп неминуемо превысит лимит по памяти? четаржу.
------

для выполнения того, что реализуется средствами языка
Как средствами языка php получить дамп БД, можно изучить на примере исходников Syphex Dumper.
Но это сотни строк кода. Дамп, конкатенация и работа со строками длинее 61440, пайпинг в файл.
Используя mysqldump можно сократить код в разы, потому что это уже готово и это работает не на интерпретируемом языке, а на компилируемом.

Человеку по заданию нужно код создания таблицы, а не дамп БД. Использовать кувалду, чтоб убить муравья - неудобно.

Сообщение отредактировал Vo1 - Dec 23 2015, 14:42
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
elevenelven
Dec 23 2015, 15:57
  
Пост #10



Репутация:   39  
Активист
*

Группа: Пользователи
Сообщений: 218
С нами с: 2-June 07


Я предположил, что все-таки надо и дамп. А?
--
-- Table structure for table `Vasa`
--

--
-- Dumping data for table `Vasa`
--

Или попытка внимательно прочесть ТЗ на 10 строк тоже вызывает у вас "четаржу"
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Vo1
Dec 23 2015, 16:45
  
Пост #11

Благодарности: 749

Репутация:   147  
Старожил
****

Группа: Пользователи
Сообщений: 2 396
С нами с: 10-November 06


(elevenelven @ Dec 23 2015, 14:57) Перейти к цитате

Я предположил, что все-таки надо и дамп. А?
--
-- Table structure for table `Vasa`
--

--
-- Dumping data for table `Vasa`
--

Или попытка внимательно прочесть ТЗ на 10 строк тоже вызывает у вас "четаржу"

так сам же и советовал дальше `mysqldump -u root -p --no-data dbname > schema.sql`
d.gif

>> нужно сделать вывод кода для создания таблицы
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
elevenelven
Dec 23 2015, 17:00
  
Пост #12



Репутация:   39  
Активист
*

Группа: Пользователи
Сообщений: 218
С нами с: 2-June 07


Ой, точно. То есть вы считаете, что это нормально, выложить nix-команду которая полный дамп сделает?!

Ладно, с вами сложно спорить. Потому что вы не признаете своих ошибок, аргументация у вас слабая, матчасть так-себе.

А самое главное, вы не решаете задачу, а просто зашли покритиковать, не обладая достаточным уровнем знаний.

-------------------

Я еще раз предлагаю автору продублировать вопрос на toster.ru
И немного проиллюстрировать.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Vo1
Dec 23 2015, 17:07
  
Пост #13

Благодарности: 749

Репутация:   147  
Старожил
****

Группа: Пользователи
Сообщений: 2 396
С нами с: 10-November 06


(elevenelven @ Dec 23 2015, 16:00) Перейти к цитате

Ой, точно. То есть вы считаете, что это нормально, выложить nix-команду которая полный дамп сделает?!

Ладно, с вами сложно спорить. Потому что вы не признаете своих ошибок, аргументация у вас слабая, матчасть так-себе.

А самое главное, вы не решаете задачу, а просто зашли покритиковать, не обладая достаточным уровнем знаний.

-------------------

Я еще раз предлагаю автору продублировать вопрос на toster.ru
И немного проиллюстрировать.

Вы советуете использовать то, что не нужно использовать в данном случае.
Я предлагаю Вам поделиться своим огромным опытом и продублировать свое решение на http://govnokod.ru/php

Сообщение отредактировал Vo1 - Dec 23 2015, 17:08
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

Reply to this topicStart new topic

 



- Упрощённая версия
Сейчас: 13th August 2024 - 1:37
Сайт не розміщує електронні версії творів, а займається лише колекціонуванням та каталогізацією посилань, що публікуються нашими користувачами. Якщо Ви є правовласником якоїсь частини опублікованого матеріалу та не бажаєте, щоб посилання на нього знаходилось в нашому каталозі, зв’яжіться з нами і ми видалимо його. Файли для обміну надані користувачами сайту і адміністрація не несе відповідальності за їх вміст.