Как получить переменную через form action?

Тема в разделе "Программирование", создана пользователем Dagas, 29.01.2008.

  1. Offline

    Dagas Недавно здесь

    Регистрация:
    18.01.2008
    Сообщения:
    19
    Симпатии:
    0
    Пол:
    Мужской
    Доброго времени.
    Хочу сделать следующее: компонент, в котором есть <form>, где пользователь может ввести данные, которые после нажатия кнопки Submit вернутся в скрипт, который сгенерирует текст с использованием введенной строки.
    Для начала взял пустой компонент com_selfpage.zip Установил его на свою Joomla! Опубликовал, поставил его в меню, тут никаких сложностей. Изменил index.php таким образом

    Код (CODE):
    1. $html .= '<div class="moduletable">';
    2.     $html .= '<h3>Form</h3>';
    3.     $html .= '<form action="'.sefRelToAbs( 'index.php?option=sendform' ).'&task=text" method="post" name="usertext" >';
    4.     $html .= '<table width="100%" border="0" cellspacing="0" cellpadding="0" align="center">';
    5.     $html .= '<tr>';
    6.     $html .= '<td>';
    7.     $html .= '<label for="mod_usertext">Usertext</label>';
    8.     $html .= '<br />';
    9.     $html .= '<input name="input_usertext" type="text" class="inputbox" alt="usertext" size="10" />';
    10.     $html .= '<br />';
    11.     $html .= '</td>';
    12.     $html .= '</tr>';
    13.     $html .= '</table>';
    14.     $html .= '<input type="submit" name="button" value="Submit">';
    15.     $html .= '</form>';
    16.     $html .= '</div>';
    17.  
    18.     echo $html;

    После чего поставил и проверил. Этот код реально открывается и отображает заголовок формы, поле для ввода и кнопку. Теперь нужно получить собственно текст. Но при нажатии на кнопку Submit выдает сообщение о невозможности отобразить страницу:

    The page you are trying to access does not exist.
    Please select a page from the main menu.

    Как я понимаю, то при попытке обратиться к странице, адрес которой указан в параметре action="'.sefRelToAbs( 'index.php?option=sendform' ).'&task=text" получается адрес вида action="http://joomla.test/index.php?option=sendform&task=text" а поскольку такой страницы не существует, то и отобразиться ничего не может.

    Теперь собственно вопрос, какие значения должны стоять в action='...' что бы Жумла поняла, что отправленный через форму текст нужно передать на обработку опять же в компонент com_selfpage и откуда можно будет получить собственно значение из поля ввода с именем name="input_usertext"? Потому что при использовании в начале кода строки

    Код (CODE):
    1. $param = mosGetParam($_REQUEST,'input_usertext','1');


    я получаю на выходе значение 1, т.е. mosGetParam срабатывать-то срабатывает, просто в нем ничего нет, что и не удивительно.

    Да, напоследок, видел предлагалось выдирать данные из $_GET но у меня RegisterGlobals отключен. По крайней мере этот вариант в итоге ничего не дал, т.е. все равно "попытка ссылки на недоступную страницу". Понятно, что я скорее всего просто не могу объяснить Джумле, куда посылать данные, ведь форма-то заполняется, но от этого как-то не легче. Вопрос скорее всего элементарный, но ответ на него я пока не нашел, хотя перетрусил довольно много всяких faq, статей и доков.

    Помогите, кто чем может. :[

    Часть понял в адресе сделал вид ссылки
    Код (CODE):
    1. form action="http://joomla.test/index.php?option=com_selfpage&task=text&Itemid=26" method="post" name="usertext"

    исчезло указание о невозможности отобразить страницу, но вот данные все равно прочитать пока не получилось.

    Код (CODE):
    1. $param = mosGetParam($_REQUEST,'input_usertext','1');

    Мда. Все гениальное просто.
    P.S. Вобщем, тему я закрою, на тупость простьба не обижаться, а то что я тут намучал ни в одном факе все равно доступным языком не расписано.

    Итак, подбивая итоги для таких же новичков, как я сам:
    1. В формах action='...' ставим адрес, указанный в Url который можно найти зайдя в административную панель и пройдя в раздел управления меню, где мы собственно и прописали какой компонент мы используем.
    2. В $param = mosGetParam($_REQUEST,'input_usertext','1'); прописываем имя/имена полей, которые хотим получить и дело в шляпе.

    Надеюсь кому-то это поможет.
     
    Последнее редактирование: 29.01.2008
  2.  
  3. Dead Krolik
    Offline

    Dead Krolik специалист

    Регистрация:
    13.04.2007
    Сообщения:
    3 688
    Симпатии:
    101
    Пол:
    Мужской
    Ответ: Как получить переменную через form action?

    >Да, напоследок, видел предлагалось выдирать данные из $_GET но у меня RegisterGlobals отключен.
    Одно другому не мешает.

    Скажи что конкретно в факе не верно или не хватает - добавлю.
     
  4. Offline

    Dagas Недавно здесь

    Регистрация:
    18.01.2008
    Сообщения:
    19
    Симпатии:
    0
    Пол:
    Мужской
    Ответ: Как получить переменную через form action?

    Да вот этого же и не хватает, что нигде толком не расписано, что для передачи данных в свой php-скрипт, формат ссылки должен иметь вид: "http://yoursite.adress.com/index.php?option=component_name&ItemId=N[&...]", где component_name - имя компонента, в котором спрятан скрипт-получатель данных, ItemId - собственно Id идентификатор страницы со скриптом в системе сайта. Потому что даже если использовать rd_addphp или iClude, то все равно передавать внутрь скрипта данные как-то надо.
     
  5. Dead Krolik
    Offline

    Dead Krolik специалист

    Регистрация:
    13.04.2007
    Сообщения:
    3 688
    Симпатии:
    101
    Пол:
    Мужской
    Ответ: Как получить переменную через form action?

    Ок. Распишу подробнее.
     
  6. xyz87
    Offline

    xyz87 Недавно здесь

    Регистрация:
    01.05.2009
    Сообщения:
    16
    Симпатии:
    1
    Пол:
    Мужской
    Re: Ответ: Как получить переменную через form action?

    Извини, ты не подскажешь мне как сделать следующее:

    Сколько я не лазил, так и толком и не понял
    Я хочу сделать компонент, в котором зарегистрированный пользователь, под своим именем будет заполнять форму и при нажатии на submit, будет проверка условий и запись в БД, если условия верны.

    Моя сложность, может и простая, но для меня существенная,
    1) Я не знаю куда submit отправить, чтобы все о пользователе осталось, т.е. user_name и т.д.
    2) И второе, в модуле подсоединение к БД вызывается databases, а в компоненте ?
     
  7. xyz87
    Offline

    xyz87 Недавно здесь

    Регистрация:
    01.05.2009
    Сообщения:
    16
    Симпатии:
    1
    Пол:
    Мужской
    Re: Ответ: Как получить переменную через form action?

    |/| Все разобрался)))
    Да вот теперь видно самое главное отличие компонента от модуля:D

    сам отвечу:
    1) при публикации компонента мы получаем ссылку на него, вот ее и прописываем в submit
    2) К БД подсоединение через databases
     
  8. Offline

    ShootNik Недавно здесь

    Регистрация:
    08.06.2009
    Сообщения:
    4
    Симпатии:
    0
    Помогите, пожалуйста. Я пытаюсь написать модуль простенький, выводящий форму, при выборе из списка статьи и нажатия кнопки "добавить" передающей в себя переменную field_id. Вот в таком виде говорит "страница не найдена". т.к. к меню я его не превязываю, то не могу увидеть правильную ссылку.
    Код (html):
    1. <form action="<?php echo sefRelToAbs( 'index.php?option=mod_mymod&amp;task=add_new' ); ?>" method="post" name="field_id">
    2. Country : <select name="Добавить похожую группу:">
    3. <?php echo $forma ?>
    4. </select><br />
    5. <input type="submit" value="Добавить" />
    6. </form>


    И может у кого-нибудь есть примеры модулей простеньких для понимания принципа работы? В стандартных модулях (авторизация, голосования) все так навороченно, что начинающему тяжело разобраться...
     
  9. Dead Krolik
    Offline

    Dead Krolik специалист

    Регистрация:
    13.04.2007
    Сообщения:
    3 688
    Симпатии:
    101
    Пол:
    Мужской
  10. Offline

    ShootNik Недавно здесь

    Регистрация:
    08.06.2009
    Сообщения:
    4
    Симпатии:
    0
    Упс, не там искал. Спасибо огромное - работает.
    Оффтопик (не в тему) - жми сюда!
     

Поделиться этой страницей

Загрузка...