Мой администратор проекта не работает на моем Localhost для PHP - PullRequest
0 голосов
/ 21 июня 2010

Я работаю над проектом osCommerce, который доступен на главном сервере, но когда я пытаюсь получить доступ к административной части проекта на моем LOCALHOST, страница входа в систему принимает мой логин, в идеале он должен принять мой логин и перенаправить мне индексировать, php .. ниже скрипт входа в систему, который я использую ..

<?php
  require('includes/application_top.php');

  if ($session_started == false) {
  echo 'session not started';
  }

  $error = false;
  if (isset($HTTP_GET_VARS['action']) && ($HTTP_GET_VARS['action'] == 'process')) {
    $email_address = tep_db_prepare_input($HTTP_POST_VARS['email_address']);
    $password = tep_db_prepare_input($HTTP_POST_VARS['password']);

// Check if email exists
    $check_admin_query = tep_db_query("select admin_id as login_id, admin_groups_id as login_groups_id, admin_firstname as login_firstname, admin_email_address as login_email_address, admin_password as login_password, admin_modified as login_modified, admin_logdate as login_logdate, admin_lognum as login_lognum from " . TABLE_ADMIN . " where admin_email_address = '" . tep_db_input($email_address) . "'");
    if (!tep_db_num_rows($check_admin_query)) {
      $HTTP_GET_VARS['login'] = 'fail';
    } else {
      $check_admin = tep_db_fetch_array($check_admin_query);

      //BOF code for cPanel installer - convert password to cre hash
      $check_password = $check_admin['login_password'];
      if (substr($check_password, 0, 8) == '_cPanel_'){
        $check_password = substr($check_password, 8);
        $password_hash = tep_encrypt_password($check_password);
        tep_db_query("UPDATE " . TABLE_ADMIN . " SET admin_password = '" . $password_hash . "'");
        $check_admin_query = tep_db_query("select admin_id as login_id, admin_groups_id as login_groups_id, admin_firstname as login_firstname, admin_email_address as login_email_address, admin_password as login_password, admin_modified as login_modified, admin_logdate as login_logdate, admin_lognum as login_lognum from " . TABLE_ADMIN . " where admin_email_address = '" . tep_db_input($email_address) . "'");
        $check_admin = tep_db_fetch_array($check_admin_query);
      }
      //EOF code for cPanel installer - convert password to cre hash

      // Check that password is good
      if (!tep_validate_password($password, $check_admin['login_password'])) {
        $HTTP_GET_VARS['login'] = 'fail';
      } else {
        if (tep_session_is_registered('password_forgotten')) {
          tep_session_unregister('password_forgotten');
        }

        $login_id = $check_admin['login_id'];
        $login_groups_id = $check_admin[login_groups_id];
        $login_firstname = $check_admin['login_firstname'];
        $login_email_address = $check_admin['login_email_address'];
        $login_logdate = $check_admin['login_logdate'];
        $login_lognum = $check_admin['login_lognum'];
        $login_modified = $check_admin['login_modified'];

        tep_session_register('login_id');
        tep_session_register('login_groups_id');
        tep_session_register('login_firstname');

        //$date_now = date('Ymd');
        tep_db_query("update " . TABLE_ADMIN . " set admin_logdate = now(), admin_lognum = admin_lognum+1 where admin_id = '" . $login_id . "'");

        if (($login_lognum == 0) || !($login_logdate) || ($login_email_address == 'admin@localhost') || ($login_modified == '0000-00-00 00:00:00')) {
          tep_redirect(tep_href_link(FILENAME_ADMIN_ACCOUNT, '', 'SSL'));
        } else {
          tep_redirect(tep_href_link(FILENAME_DEFAULT, '', 'SSL'));
        }

      }
    }
  }

  require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_LOGIN);
  include('includes/functions/rss2html.php');
?>

Я пытался отследить проблему, всякий раз, когда я вхожу с правильным адресом электронной почты и паролем, это не выдает мне " $ HTTP_GET_VARS ['action'] "

Может ли кто-нибудь наставить меня, что здесь происходит не так?

В СООТВЕТСТВИИ С ПЕРВОНАЧАЛЬНЫМИ ОТВЕТАМИ

У меня включен параметр register_long_arrays на моем локальном хосте, и он работает очень хорошо в случае неправильного ввода адреса электронной почты и пароля.

Ответы [ 4 ]

2 голосов
/ 21 июня 2010

Переменные, такие как HTTP_GET_VARS, называются long-arrays и являются устаревшими - и могут быть отключены.
См. Директиву register_long_arrays об этом: может быть, она отключена на вашем сервере?


Вместо $HTTP_GET_VARS вы должны бытьиспользуя суперглобальный массив $_GET.

Для получения нескольких ссылок см.


Примечание: OS-commerce является довольно старой частью программного обеспечения и была разработана до того, как длинные массивы устарели - вероятно, именно поэтому они используются.... и почему возможно включить директиву register_long_arrays в конфигурации PHP.

Конечно, это не рекомендуется для нового программного обеспечения ... Но если вам придется работать с этим ... это можетбыть проще, чем заменить каждый экземпляр $HTTP_GET_VARS.

0 голосов
/ 21 июня 2010

В PHP 5.0.3 длинные предопределенные массивы, такие как HTTP_GET_VARS, по умолчанию отключены.Используйте это вместо:

$_GET['action'];
0 голосов
/ 21 июня 2010

Попробуйте $_GET['action'] вместо $ HTTP_GET_VARS['action'].Я предлагаю вам полностью заменить $HTTP_GET_VARS на $_GET.

Начиная с PHP 5.0.0, длинные предопределенные массивы PHP могут быть отключены с помощью директивы register_long_arrays.

0 голосов
/ 21 июня 2010

$ HTTP_GET_VARS устарел и устарел, вместо него используйте $ _GET.То же относится и к другим суперглобалам: $ _POST, $ _REQUEST, $ _SERVER, $ _COOKIES, $ _FILES и т.д.

...