Подскажите пожалуйста модуль, с помощью которого можно сделать поле для ввода sql-запросов и вывода результатов прямо на WEB-странице. То есть все, кто будут иметь права для входа на эту страницу, смогут набрать свой запрос.
У нас есть предмет, где для зачёта требуется простенький сайт,а преподаватель потребовал сделать ещё и такую возможность.(К тому же можно разрешить доступ к этой странице только администратору)
2.1 Функция имя_вашей_формы(), которая строит саму форму.
2.2 имя_вашей_формы_validate($form, &$form_state) - для валидации, тут можно проверить правильность запроса.
2.3 имя_вашей_формы_submit($form, &$form_state) - тут собственно выполняется SQL-запрос и можно вывести результат.
Комментарии
давать другим право как угодно крутить MySQL (а в результате и файловой системой)? зачем?
У нас есть предмет, где для зачёта требуется простенький сайт,а преподаватель потребовал сделать ещё и такую возможность.(К тому же можно разрешить доступ к этой странице только администратору)
[module=Schema] -- вроде позволяет задавать запросы
Курите мануал!
Нужно в своем модуле:
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-запрос и можно вывести результат.
Спасибо!
Вроде сделал как написано, при вводе ЗАПРОСА пишет:
не доступно
не доступно
...
$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 кажется либо доступа нету, либо криво вывожу..
А чего Devel никто не советует?
Нет доступа чтоль?
Кэш данных чистили?
причём тут кэш??
такая штука как на локалХосте, так и на хостинге..
скорее всего НЕПРАВИЛЬНО ВЫВОЖУ РЕЗУЛЬТАТ! подскажите как надо!
Попробуйте написать так:
$result = db_query($SQL123);
Вы всего лишь упростили код. Результат не изменился.
эти строчки "не доступно" появлются на чистрой стр при попытке ввода подобного запрос:
SELECT *
FROM users
То есть приблизительно столько раз пишет, сколько строк должно было бы вывести
..если ещё для кого-то не дошёл смысл проблемы))
Когда ты стучал в аську, я тебе уже писал, что б снёс
$node = node_load($data->nid); //???
print node_view($node, TRUE); //???
}
Он там не в тему
В _submit'е print? Оррригинально...
щас пробую так:
for ($i=0; $i < sizeof($data); $i++) {
$key_z = key($data);
$val_z = each($data);
echo $key_z, "=", $val_z, "\n" ;
}
выводит не совсем то и не совсем так, как бы хотелось...
2Dan: это тривиально, полистай Вандюка..
Dan, понял Денис? Нефиг учить новичков... Вандюк в своей корявой книжке сказал принт, значит принт
я имел ввиду, что это не оригинально)))
Вот такой результат у меня:
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>";
}
}
Выдаёт результат для каждой строчки таблицы типа: название_столбца = значение_столбца
А теперь почитай своего любимого Вандюка на тему:
<?php
1. echo
2. db_rewrite_sql()
3. $type = 'blog';
4. $status = 1;
5. "<br>"
?>