Передача данных методом Post не авторизованным пользователем

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

  1. Pashok
    Offline

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

    Регистрация:
    14.07.2011
    Сообщения:
    33
    Симпатии:
    1
    Пол:
    Мужской
    J 1.5.26

    Создал модуль, с помощью mod_php. В коде: форма, где вводится номер и кнопка submit. Передача данных методом post, потом скрипт - если была передача данных, тогда делаю запрос к базе с поиском нужной записи по введенному номеру. Если авторизоваться на сайте, то все работает, если нет - не хочет работать!!:(

    Не пойму почему?? Догадки: либо это особенности php_mod, либо для неавторизованного пользователя надо что-то дополнительно прописать, чтобы запросы к базе проходили. Если так, подскажите что именно??

    Замучался с этой проблемой, помогите!

    З.Ы. Доступ не ограниченный (все), как у модуля так и у пункта меню в котором выводится

    Код который вставляю с помощью php_mod:
    Код (PHP):
    1. <?php
    2. if (isset($_POST['vagon'])){$vagon = $_POST['vagon'];}
    3. ?>
    4. <p style="font-size: 14px; color: rgb(0, 0, 255); font-weight:bold;">Форма проверки дислокации контейнеров</p>
    5.  
    6. <form id="search_cont" method="post" >
    7.     <p>Для получения информации введите номер вагона (только цифры):</p>
    8.     <div>
    9.     Вагон № <input id="nom_vagona" type="text" name="vagon" />
    10.     <input type="submit" name="submit" value="Проверить" />
    11.     </div>
    12. </form>
    13.  
    14. <?php
    15. if (isset($_POST['submit'])){
    16. echo '<p>ИНФОРМАЦИЯ ПО ВАШЕМУ ЗАПРОСУ:</p>';
    17. if ($vagon==''){
    18. echo '<p>Вы не ввели номер вагона!</p>';
    19. }else{
    20. $vagon = trim($vagon);
    21. //$vagon = intval($vagon);
    22. $result = mysql_query("SELECT * FROM table WHERE v_number = $vagon ");
    23. if (mysql_num_rows($result)>0){
    24. $myrow = mysql_fetch_array($result);
    25. echo '<p>Вагон № <strong>'.$vagon.'</strong> на дату '.$myrow['data'].'<br>Станция назначения: <strong>'.$myrow['went_to'].'</strong><br>Станция дислокации: <strong>'.$myrow['now'].'</strong></p>';
    26. }else{
    27. echo '<p>Информации по вагону с номером <strong>'.$vagon.'</strong> нет, скорее всего неверно введен номер вагона!</p><p>Попробуйте еще раз, внимательно введя номер вагона.</p>';
    28. }
    29. }
    30. //unset($vagon);
    31. }
    32. ?>
     
  2.  
  3. AKopytenko
    Offline

    AKopytenko Russian Joomla! Team Команда форума

    Регистрация:
    01.09.2011
    Сообщения:
    1 963
    Симпатии:
    168
    Пол:
    Мужской
    Оффтопик (не в тему) - жми сюда!
     
  4. woojin
    Offline

    woojin Местный Команда форума => Cпециалист <=

    Регистрация:
    31.05.2009
    Сообщения:
    3 204
    Симпатии:
    334
    Пол:
    Мужской
    а где переменная с подключение к БД?
    вот пример http://www.komtet.ru/lib/plangs/php/podklyuchenie-k-bd-skript-php
    у тебя подобного не вижу

    как срабатывает после авторизации, не понятно
    но скорее всего просто происходит перехват по функциям
     
  5. AKopytenko
    Offline

    AKopytenko Russian Joomla! Team Команда форума

    Регистрация:
    01.09.2011
    Сообщения:
    1 963
    Симпатии:
    168
    Пол:
    Мужской
  6. Pashok
    Offline

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

    Регистрация:
    14.07.2011
    Сообщения:
    33
    Симпатии:
    1
    Пол:
    Мужской

    woojin, насколько я понимаю, если не указано используется текущее соединение с базой, установленное джумлой на момент выполнения скрипта.
     
  7. woojin
    Offline

    woojin Местный Команда форума => Cпециалист <=

    Регистрация:
    31.05.2009
    Сообщения:
    3 204
    Симпатии:
    334
    Пол:
    Мужской
    а где это соединение!!!!!!!!!!
    соединение всегда в какой то переменной находится

    самый простой пример, на основе того скрипта который я тебе дал, создай соединение с БД, а потом не используя ни каких переменных из него (из этого скрипта) сделай какой нибудь запрос к БД

    если у тебя получится то значит создатели php в документации накосячили
     
  8. Pashok
    Offline

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

    Регистрация:
    14.07.2011
    Сообщения:
    33
    Симпатии:
    1
    Пол:
    Мужской
    Все-таки соединение с базой тут не при чем!

    Код (PHP):
    1. if (isset($_POST['submit'])){
    2. ...
    3. }


    Внутрь этого условия не заходим:( Значит выходит так, что не авторизованный пользователь жмет на submit, но POST как то не отрабатывает!(((( Не пойму почему? Была мысль о связи с enctype, я не указываю это для формы, но собственно зачем? по-умолчанию берется application/x-www-form-urlencoded, и должно работать! НО не работает!|H| Помогите, подскажите!
     
  9. AKopytenko
    Offline

    AKopytenko Russian Joomla! Team Команда форума

    Регистрация:
    01.09.2011
    Сообщения:
    1 963
    Симпатии:
    168
    Пол:
    Мужской
    Большинство хостеров не поддерживают передачу переменных через глобальные массивы напрямую... Нужно определять переменные, которые примут значения из GET/POST-запроса. Можно сделать это через цикл foreach (читай в инете как), можно вручную:
    Код (PHP):
    1. $name = (htmlentities($_POST['name']);
    2. $email = (htmlentities($_POST['email']);
    3. ...

    Убедись, что переменная "пришла":
    Код (PHP):
    1. $name ? print 'Ok!' : print 'Fail!';


    P.S.: Не бейте меня ногами, если где не прав :stop:
     
  10. Pashok
    Offline

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

    Регистрация:
    14.07.2011
    Сообщения:
    33
    Симпатии:
    1
    Пол:
    Мужской
    shurikkan, действительно переменная submit не приходит=O но если авторизоваться на сайте, приходит!!

    Вот код формы, все норм, должно работать! атрибут action не указываю, соответственно передача данных сюда же, оно и работает, но только для авторизованного пользователя:( Почему ж так может быть??|H|
    Код (PHP):
    1. <form id="search_cont" method="post" >
    2.     <p>Для получения информации введите номер вагона (только цифры):</p>
    3.     <div>
    4.     Вагон № <input id="nom_vagona" type="text" name="vagon" />
    5.     <input type="submit" name="submit" value="Проверить" />
    6.     </div>
    7. </form>
     
  11. woojin
    Offline

    woojin Местный Команда форума => Cпециалист <=

    Регистрация:
    31.05.2009
    Сообщения:
    3 204
    Симпатии:
    334
    Пол:
    Мужской
    а ты попробуй укажи этот атрибут и скорее всего просто все POST данные обнуляются у не авторизованного пользователя
     
  12. Pashok
    Offline

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

    Регистрация:
    14.07.2011
    Сообщения:
    33
    Симпатии:
    1
    Пол:
    Мужской
    попробовал указать атрибут action - бестолку((( по ходу и правда для неавторизованного пользователя - POST данные обнуляются, но почему это вообще может быть?? =O
     
  13. Pashok
    Offline

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

    Регистрация:
    14.07.2011
    Сообщения:
    33
    Симпатии:
    1
    Пол:
    Мужской
    Частично разобрался! :) Отключил в системных настройках CMS кэширование и данные стали передаваться для неавторизованных пользователей! )) Но вот не понятно почему так??
     
  14. woojin
    Offline

    woojin Местный Команда форума => Cпециалист <=

    Регистрация:
    31.05.2009
    Сообщения:
    3 204
    Симпатии:
    334
    Пол:
    Мужской
    потому что после загрузки в тебя на странице кэшируется форма, а поскольку в кэш данных POST запросов НЕТ
    то при последующей перезагрузке, данные берутся из кэша и соответственно POST у тебя пустой

    избавиться от этого можно отключив перед формой k'i и включи его после неё

    как это делается (в локальном месте) читай в документации на JOOMLA.ORG
    я не помню где это там описано, но там что то такое есть
     
    Pashok нравится это.

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

Загрузка...