2010-06-21 2 views
0

주 서버에서 액세스 할 수있는 osCommerce 프로젝트에서 작업하고 있습니다. 그러나 LOCALHOST에서 프로젝트의 관리 부분에 액세스하려고하면 로그인 페이지에서 동의합니다 내 로그인, 이상적으로 내 로그인을 허용하고 인덱스, PHP에 저를 리디렉션합니다 .. 아래 내가 사용하고있는 로그인 스크립트는 ...이다 나는 올바른 이메일과 비밀번호로 로그인 할 때마다 문제를 추적 시도 내 프로젝트 관리자가 내 로컬 호스트 용 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 == '[email protected]') || ($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 [ '조치']"

누군가 나를 인도 할 수 있을까? 여기서 뭐가 잘못 됐니? 초기에 따르면

난을 register_long_arrays 내 로컬 호스트에서 활성화하고 이메일 주소와 비밀번호를 잘못 입력하는 경우에 매우 잘 작동

..

답변

2

변수 긴 배열라고하며, 사용되지 않습니다 - 및 비활성화 할 수 있습니다.
register_long_arrays 지시어에 대한 자세한 내용은 다음을 참조하십시오. 서버에서 사용하지 않도록 설정 했습니까?


$HTTP_GET_VARS 대신 $_GET 수퍼 글로벌 배열을 사용해야합니다. OS 상거래 소프트웨어의 아주 오래 된 조각, 그리고 장기 전에 경제력되었다


참고 : 참조의 몇

은, 참조 배열은 더 이상 사용되지 않을 것입니다 - 어쩌면 그것들이 사용되는 이유입니다 ... PHP의 구성에서 register_long_arrays 지시문을 활성화하는 것이 가능한 이유는 무엇입니까?

물론 이것은 새로운 소프트웨어에는 권장되지 않습니다 ...하지만 그걸로 작업해야한다면 ... $HTTP_GET_VARS의 모든 인스턴스를 교체하는 것보다 쉬울 수도 있습니다.

+0

그들은 내 로컬 호스트에서 사용할 수 있습니다 –

+0

나는 모두 $ _GET으로 바꿨지 만 여전히 작동하지 않습니다 –

0

$ HTTP_GET_VARS 답글 낡고 비추천 인 대신 $ _GET을 대신 사용하십시오. $ _POST, $ _REQUEST, $ _SERVER, $ _COOKIES, $ _FILES 등과 같은 다른 슈퍼 전역에도 동일하게 적용됩니다.

+0

를, 내가 사용하고 osCommersce V2 모든이 전역 변수가 눈에 띄는 곳이, $를 붙여 넣으려고 그냥 확실하게 액세스 –

0

$ HTTP_GET_VARS['action'] 대신 $_GET['action']을 시도하십시오. $HTTP_GET_VARS을 모두 $_GET으로 대체 하시길 바랍니다. PHP 5.0.0, 미리 정의 된 변수 배열은을 register_long_arrays 지시문을 사용할 수 수 있습니다 긴 PHP의로

. 같은 HTTP_GET_VARS 같은

+0

을 unables 내 코드로 문제가되지 않습니다 HTTP_GET_VARS = $ _GET; 스크립트 상단에 있습니다. – cypher

+0

나는 그것을 모두 $ _GET으로 바꿨지만 여전히 작동하지 않습니다 –

+0

오류보고가 있습니까? error_reporting (E_ALL | E_STRICT)을 사용해보십시오; – cypher

0

PHP 5.0.3부터 미리 정의 된 배열 HTTP_GET_VARS은 기본적으로 비활성화되어 있습니다.대신 사용 : 나는 그것에 대해 알고

$_GET['action']; 
+0

하지만 잘못된 전자 메일 주소와 암호를 삽입 할 때 활성화됩니다. 따라서 코드가 올바르게 작동하고 있음을 증명합니다. –

+0

모두 변경했습니다. ~ $ _GET, 여전히 작동하지 않음 –

관련 문제