За последние 24 часа нас посетили 16627 программистов и 1651 робот. Сейчас ищут 1898 программистов ...

Проблемы с функцией POST, при работе с вложенными каталогами

Тема в разделе "PHP для новичков", создана пользователем 0281, 20 окт 2010.

  1. 0281

    0281 Активный пользователь

    С нами с:
    5 май 2008
    Сообщения:
    5
    Симпатии:
    0
    Возникла следующая проблема: из верхнего каталога у меня вызывается index.php, в который функцией require_once, вызывается файл config.php, где прописаны настройки подключения к базе и происходит само подключение. так же из index.php далее вызывается модуль авторизации (находящийся во вложенном каталоге /modules), состоящий из файла с html формой (login.php) и файла проверки (check.php) авторизации. при отправке функцией POST данных из html формы, данные не приходят в check.php. если я вызываю непосредственно файл login.php в браузере (или переношу эти файлы в верхний каталог) - POST отлично работает.[/code]
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    вестимо прописан путь не абсолютный. поэтому при запуске непосредственно из каталога по адресу check.php виден этот самый пхп. А при запуске из-под корня уже не виден, ибо лежит он в папке за семью печатями =)

    делается все это через модный мод рерайт, с разбором желаемого уже изнутре index.php - тогда все будет красиво.
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    покаж код короче
     
  4. 0281

    0281 Активный пользователь

    С нами с:
    5 май 2008
    Сообщения:
    5
    Симпатии:
    0
    В Firefox работает, а в Opera и Explorer - нет. Походу параметры POST не передаются.

    структура каталогов:
    /config.php
    /core.php
    /index.php
    /sysmodules/login/login.php
    /sysmodules/login/check.php

    core.php
    Код (Text):
    1.  
    2. <?php
    3.  
    4. session_start();
    5.  
    6. $baselevel = "";
    7. while (!file_exists($baselevel."config.php"))
    8. {
    9.     $baselevel .= "../";
    10. }
    11.  
    12. define("CORE", "$baselevel");  
    13. define("SYSMODULES", CORE."sysmodules/");
    14.  
    15. $_SESSION ['SYSMODULES']=SYSMODULES;
    16.  
    17. require_once CORE."config.php";
    18.  
    19. //Подключение к БД
    20. $connection=@mysql_connect($host,$login,$pwd)
    21. or die("Невозможно подключиться к БД");
    22.  
    23. $db=@mysql_select_db($db_name,$connection)
    24. or die("Невозможно выбрать БД");
    25. $num_rows=0;
    26.  
    27. ?>
    index.php
    Код (Text):
    1.  
    2. <?php
    3.  
    4. require_once "core.php";
    5.  
    6. echo "<table border='1'>
    7. <tr>
    8. <td>text</td>
    9. <td>";
    10.    
    11.     require_once SYSMODULES."login/login.php";
    12.  
    13. echo"</td>
    14. </tr>
    15. </table>";
    16.  
    17.  
    18. ?>
    login.php
    Код (Text):
    1.  
    2. <?php
    3.  
    4. if  (isset($_SESSION['id_session']))
    5. {
    6.     echo "Пользователь авторизован";
    7.     echo "<form 'method='post' action='".SYSMODULES."login/out.php'>
    8.                     <td><input type='submit' value='Выйти'></input></td>
    9.         </form>";
    10. }
    11. else
    12. {
    13.     echo "<form 'method='post' action='".SYSMODULES."login/check.php'>
    14.             <table>
    15.                 <tr>
    16.                     <td>Логин:</td>
    17.                     <td>Пароль:</td>
    18.                 </tr>
    19.                 <tr>
    20.                     <td><input type='text' name='login'></input></td>
    21.                     <td><input type='password' name='password'></input></td>
    22.                     <td><input type='submit' value='Войти'></input></td>
    23.                 </tr>
    24.                     <td colspan='3'><a href=''>Регистрация</a> | <a href=''>Забыли пароль?</a></td>
    25.             </table>
    26.         </form>";
    27. }
    28.  
    29. ?>
    check.php
    Код (Text):
    1.  
    2. <?php
    3.  
    4. require_once "../../core.php";
    5.  
    6. if (isset($_POST['login']) && isset($_POST['password']))
    7. {
    8.     $login = mysql_real_escape_string($_POST['login']);
    9.     $password = $_POST['password'];
    10.     //Поиск пользователя в БД с данным логином и паролем
    11.     $query = "SELECT `id_user` FROM `users` WHERE `login`='{$login}' AND `password`='{$password}' LIMIT 1";
    12.     $sql = mysql_query($query) or die(mysql_error());
    13.     //Если данный пользователь существует
    14.     if (mysql_num_rows($sql) == 1)
    15.     {
    16.         //Устанавливается метка сессии, равная id_user
    17.         $row = mysql_fetch_assoc($sql);
    18.         $_SESSION['id_session'] = $row['id_user'];
    19.         echo "<a href='".CORE."index.php'>login</a>";
    20.     }
    21.     else
    22.     {
    23.         die('Пользователь не найден. Ссылка на повторную авторизацию.');
    24.     }
    25. }
    26.  
    27. ?>
     
  5. 0281

    0281 Активный пользователь

    С нами с:
    5 май 2008
    Сообщения:
    5
    Симпатии:
    0
    При чем, что странно, если я делаю GET, то все работает во всех браузерах
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    черезжопно сделано
    попробуй заменить строки типа
    echo "<form 'method='post' action='".SYSMODULES."login/out.php'>
    на
    echo "<form 'method='post' action='".SYSMODULES."sysmodules/login/out.php'>
    или где они там у тебя.

    вобще-то это лишний гемор себе придумываешь. обрабатывать надо в индекс.пхп такие вещи. Вобще все. Тогда урлы будут нормальные.