Ввод SQL-запроса прямо на странице

Главные вкладки

Аватар пользователя molotov molotov 18 декабря 2009 в 21:29

Подскажите пожалуйста модуль, с помощью которого можно сделать поле для ввода sql-запросов и вывода результатов прямо на WEB-странице. То есть все, кто будут иметь права для входа на эту страницу, смогут набрать свой запрос.

Комментарии

Аватар пользователя molotov molotov 19 декабря 2009 в 0:10

У нас есть предмет, где для зачёта требуется простенький сайт,а преподаватель потребовал сделать ещё и такую возможность.(К тому же можно разрешить доступ к этой странице только администратору)

Аватар пользователя Обухов Никита Обухов Никита 19 декабря 2009 в 13:23

Курите мануал!

Нужно в своем модуле:

1. Использовать hook_menu чтобы создать страничку. Ставите Page callback => 'drupal_get_form'

и 'page arguments' => 'имя_вашей_формы'

+ доступ 'access arguments' => 'право доступа'

Право доступа объявляете с помощью hook_perm

(Это создаст правило доступа, т.е. сможете галочкой поставить разрешение роли "админ" заходить на страничку и выполнять SQL-запрос.

2. Читайте Forms API reference

Вам нужно:

2.1 Функция имя_вашей_формы(), которая строит саму форму.
2.2 имя_вашей_формы_validate($form, &$form_state) - для валидации, тут можно проверить правильность запроса.
2.3 имя_вашей_формы_submit($form, &$form_state) - тут собственно выполняется SQL-запрос и можно вывести результат.

Аватар пользователя ZeninVA ZeninVA 22 декабря 2009 в 17:01

Вроде сделал как написано, при вводе ЗАПРОСА пишет:

не доступно
не доступно
...

function zapros_menu() {
  $items['zapros'] = array(
    'title' => 'SQL-zapros',
    'page callback' => 'zapros_page',
    'access arguments' => array('access content'),
  );
  return $items;  
}

function zapros_page() {
  $output = drupal_get_form('zapros_MyForm');
  return $output;
}
function zapros_MyForm($form_id, $form_state = NULL) {
  $form_state['zapros']['spam_score'] = 90;
  $form['sql_zapros'] = array(
    '#type' => 'textarea',
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('DO IT!')
  );
 if (isset($form_state['zapros']['spam_score'])) {
    $form['captcha'] = module_invoke_all('captcha', 'generate', 'Math');
  }
  return $form;
}

function zapros_MyForm_validate($form_id, $form_state) {
  if ($form_state['values']['sql_zapros'] == '') {
    form_set_error('sql_zapros', t('Bbl Hu4ero HE BBELu!'));
  }
}

function zapros_MyForm_submit($form_id, $form_state) {
  drupal_set_message(t('Ваш запрос обработан.'));
  $SQL123 = $form_state['values']['sql_zapros'];
  $type = 'blog';
  $status = 1;
  $result = db_query(db_rewrite_sql($SQL123), $type, $status);
  while ( $data = db_fetch_object($result)) {
    $node = node_load($data->nid);  //???
    print node_view($node, TRUE);   //???
  }    
}

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

Аватар пользователя ZeninVA ZeninVA 22 декабря 2009 в 17:03

причём тут кэш??
такая штука как на локалХосте, так и на хостинге..
скорее всего НЕПРАВИЛЬНО ВЫВОЖУ РЕЗУЛЬТАТ! подскажите как надо!

Аватар пользователя ZeninVA ZeninVA 22 декабря 2009 в 20:40

"Goodboy" wrote:
Попробуйте написать так:

Вы всего лишь упростили код. Результат не изменился.

эти строчки "не доступно" появлются на чистрой стр при попытке ввода подобного запрос:
SELECT *
FROM users

То есть приблизительно столько раз пишет, сколько строк должно было бы вывести
..если ещё для кого-то не дошёл смысл проблемы))

Аватар пользователя ZeninVA ZeninVA 22 декабря 2009 в 21:48

щас пробую так:

while ( $data = db_fetch_array($result)) {
   for ($i=0; $i < sizeof($data); $i++) {
      $key_z = key($data);
      $val_z = each($data);
      echo $key_z, "=", $val_z, "\n" ;
    }

выводит не совсем то и не совсем так, как бы хотелось...

2Dan: это тривиально, полистай Вандюка..

Аватар пользователя ZeninVA ZeninVA 23 декабря 2009 в 1:59

Вот такой результат у меня:

function zapros_MyForm_submit($form_id, $form_state) {
  drupal_set_message(t('Ваш запрос обработан.'));
  $SQL123 = $form_state['values']['sql_zapros'];
  $type = 'blog';
  $status = 1;
  $result = db_query(db_rewrite_sql($SQL123), $type, $status);
  while ($data = db_fetch_array($result)) {
   for ($i=0; $i < count($data); $i++) {  
     $resArrKeys = array_keys( $data );
     for ($i=0; $i < count($resArrKeys); $i++) {
        echo $resArrKeys[$i], " = ", $data[$resArrKeys[$i]];
        echo  "<br>";
     }
    }
    echo "---------------- ";
    echo "<br>";
  }
}

Выдаёт результат для каждой строчки таблицы типа: название_столбца = значение_столбца