PHP - Запрос изменяет мои переменные сеанса

1

Следующий код работает один раз.

Когда страница загружается, данные отображаются правильно. Hoever. Когда я обновляю страницу, все мои переменные сеанса меняются, чтобы отразить данные, извлеченные из SQL-запроса ниже. Это происходит только при запуске запроса и отображении переменных сеанса на одной странице. Если у меня один, то другого нет. я искал решение в течение нескольких часов, но я не могу обернуть это вокруг. Я новичок в SQL и PHP, поэтому простите мое невежество. Любое руководство высоко ценится.

EDIT Подробнее.. Этот код загружается через jQuery. Сначала я начал с одного запроса на clients таблицы, чтобы заполнить #chapter1-accountInfo. Позже я хотел показать всех субброкер, зарегистрированных в основной учетной записи, и добавил запрос ниже для заполнения .listTable. Всякий раз, когда они выполнялись, они меняли мои переменные сеанса. Я попытался выполнить эксперимент, назначив поля для #chapter1-accountInfo для переменных сеанса временно, чтобы увидеть, сможет ли только запуск одного запроса на clients таблицы исправить мою проблему. Это не так. Вот почему я объявляю так много переменных сеанса ниже.

PHP brokerAccountInfo.php

<?php session_start() ;

include ( 'database/sql_link.php' ) ;

$ID          = $_SESSION[ 'loginID'    ] ;
$companyName = $_SESSION[ 'company'    ] ;
$authority   = $_SESSION[ 'userLevel'  ] ;
$realName    = $_SESSION[ 'actualName' ] ;
$userName    = $_SESSION[ 'userName'   ] ;
$contact     = $_SESSION[ 'email'      ] ;

echo "

    <h2 class='chapterTitle'>
        Account Details
    </h2>

    <div class='chapter1' id='chapter1-accountInfo'>

        <p class='floatLeft'> Company Name: </p>
        <p class='floatRight'> $companyName </p>

        <br clear='both'>

        <p class='floatLeft'> Active Since: </p>
        <p class='floatRight'> $contact </p>

        <br clear='both'>

        <p class='floatLeft'> Your Account Level: </p>
        <p class='floatRight'> $authority </p>

        <br clear='both'>

        <p class='floatLeft'> Your Name: </p>
        <p class='floatRight'> $realName </p>

    </div> " ;

$query  = "    SELECT     *
               FROM       clients
               WHERE      companyName = '$companyName'
               AND        userLevel   = 'subBroker'
          " ;


$result = $db -> query( $query ) ;

if ( !$result = $db -> query($query) ) {
    die( ' There was an error running the query [ ' . $db -> error . ' ] ' ) ;
}

echo "
       <h2 class='chapterTitle'> Your Sub-Accounts </h2>

       <table  id='brokerSubBrokersTable'>
       <thead>
           <tr>
               <th> Company    </th>
               <th> Name       </th>
               <th> Login Name </th>
               <th> Email      </th>
           </tr>
       </thead>
       <tbody>
     " ;

while( $row = $result -> fetch_assoc() ) {

    $company     = $row[ 'companyName' ] ;
    $actualName  = $row[ 'actualName'  ] ;
    $loginName   = $row[ 'userName'    ] ;
    $email       = $row[ 'eMail'       ] ;

    echo "  <tr>
                 <td>  $company    </td>
                 <td>  $actualName </td>
                 <td>  $loginName  </td>
                 <td>  $email      </td>
            </tr> " ;
}
echo " </tbody>
       </table> " ;

Я думаю, что это поможет, если я поделюсь другим кодом,

JS - это функция загрузки, которую я использую

$( '#navBrokeAccount' ).on( 'click' , function() {

        $( '#content' ).fadeOut( 'fast' ).hide() ;
        $( '#content' ).load( 'brokerAccount.php' , function() {

            $( '.chapter1' ).load( 'brokerAccountInfo.php' ) ;

        } ).delay( 500 ).fadeIn( 'slow' ) ;
 } ) ;

PHP - это начальная настройка сеансов (опять же, я не планирую хранить это множество переменных сеанса)

<?php session_start() ;



if( !function_exists( 'hash_equals' ) )
{

    function hash_equals( $a , $b )
    {

        $ret   = strlen( $a ) ^ strlen( $b ) ;
        $ret  |= array_sum( unpack( "C*" , $a ^ $b ) ) ;

        return !$ret ;

    }

}




include( 'database/sql_link.php' ) ;

$user    = mysqli_real_escape_string( $db , $_GET[ 'uName' ] ) ;
$pass    = mysqli_real_escape_string( $db , $_GET[ 'pWord' ] ) ;
$query   = "
             SELECT  *
             FROM    clients
             WHERE   userName = '$user'
           " ;

$result = $db -> query( $query ) ;

if ( mysqli_num_rows( $result ) == 0 )
{

    echo "error" ;

}

else
{

    while ( $row  = $result -> fetch_assoc() ) {

        $userName    = $row[ 'userName'    ] ;
        $hash        = $row[ 'Pass_Word'   ] ;
        $companyName = $row[ 'companyName' ] ;
        $realName    = $row[ 'actualName'  ] ;
        $id          = $row[ 'ID'          ] ;
        $firstLogin  = $row[ 'firstLogin'  ] ;
        $userLevel   = $row[ 'userLevel'   ] ;
        $email       = $row[ 'eMail'       ] ;

    }

    if ( hash_equals( $hash , crypt( $pass , $hash ) ) ) {

        $_SESSION[ 'loginID'    ] = $id          ;
        $_SESSION[ 'company'    ] = $companyName ;
        $_SESSION[ 'userLevel'  ] = $userLevel   ;
        $_SESSION[ 'email'      ] = $email       ;
        $_SESSION[ 'actualName' ] = $realName    ;

        if( isset( $_SESSION[ 'loginID' ] ) )
        {
            echo $_SESSION[ 'loginID' ] ;
        }
        else
        {
            echo 'Session Error' ;
        }

    } else {

        echo 'Invalid' ;

    }


$result         -> free() ;
$db             -> close() ;

PHP brokerAccount.php

<div class='contentHeader'>

    <h1 class='contentTitle'> Your Account </h1>

</div>

<br clear='both'>

<div class='chapter1'> 

    <!-- THIS IS THE DIV THE DATA IS BEING LOADED INTO  -->    

</div>
  • 0
    Вы устанавливаете что-нибудь в $ _SESSION в своем коде? Вы говорите, что значения в этом массиве меняются без установки каких-либо значений?
  • 0
    Проблема вызвана в другом месте. Запуск только предоставленного вами кода даст PHP Notice: Undefined index: [variable name here] для каждого назначения (например, $ID = $_SESSION[ 'ID' ] ), поэтому эти переменные сеанса должны быть установлены в другом месте.
Показать ещё 5 комментариев
Теги:
session
variables

1 ответ

0

Поэтому я исправил это. Думаю...

Я все еще не знаю, почему переменные менялись.

Он начал работать, когда я возился с именами переменных в моем brokerSubBrokersTable.php. Некоторые переменные в этом файле заполняются данными, запрошенными из таблицы, как одна из переменных $_SESSION[''], которые установлены в checkLogin.php

Мой рабочий код:

JQuery

    $( '#content').load( 'brokerAccount.php' , function() {
        $.getJSON( 'brokerAccountInfo.php' , function( info ) {

            var companyInf = ( info.companyInf ) ;
            var nameInf    = ( info.nameInf    ) ;
            var levelInf   = ( info.levelInf   ) ;
            var activeInf  = ( info.activeInf  ) ;

            $ ( '#chapter1-accountInfo-company' ).text( companyInf ) ;
            $ ( '#chapter1-accountInfo-name'    ).text( nameInf    ) ;
            $ ( '#chapter1-accountInfo-level'   ).text( levelInf   ) ;
            $ ( '#chapter1-accountInfo-active'  ).text( activeInf  ) ;

            // This query is where the initial problem was.  Changed some variable names and it started working . .
            //
            $( '#chapter1-subBrokersList' ).load( 'brokerSubBrokersTable.php' ) ;

        } ) ; // End JSON function . .

    } ) ; // End .load function . .

brokerAccount.php

<div class='chapter1'>
    <h2 class='chapterTitle'> Account Details </h2>
    <div class='chapter1-accountInfo' id='chapter1-accountInfo'>
           <p class='floatLeft'> Company Name: </p>
           <p class='floatRight' id='chapter1-accountInfo-company'> </p>
           <br clear='both'>
           <p class='floatLeft'> Name: </p>
           <p class='floatRight' id='chapter1-accountInfo-name'>    </p>
           <br clear='both'>
           <p class='floatLeft'> Privilege: </p>
           <p class='floatRight' id='chapter1-accountInfo-level'>   </p>
           <br clear='both'>
           <p class='floatLeft'> Active Since: </p>
           <p class='floatRight' id='chapter1-accountInfo-active'>  </p>
    </div>

    <!-- THIS IS BEING LOADED AS A SEPARATE QUERY -->
    <div id='chapter1-subBrokersList'>  </div>

</div>

brokerAccountInfo.php

<?php session_start() ;
include( 'database/sql_link.php' ) ;
$loginID  =   $_SESSION[ 'loginID' ] ;
$query    = "
                SELECT     *
                FROM       clients
                WHERE      ID ='$loginID'
             " ;
$result = $db -> query( $query ) ;
if ( !$result = $db -> query($query) ) {
    die( ' There was an error running the query [ ' . $db -> error . ' ] ' ) ;
}
while( $row = $result -> fetch_assoc() ) {
    $companyID   = $row[      'companyName' ] ;
    $realName    = $row[      'actualName'  ] ;
    $authority   = $row[      'userLevel'   ] ;
    $active      = $_SESSION[ 'Timestamp'   ] ;
    $return_data = array( "companyInf"  => $companyID ,
                          "nameInf"     => $realName  ,
                          "levelInf"    => $authority ,
                          "activeInf"   => $active    ) ;
    header( 'Content-Type: application/json' ) ;
    echo json_encode( $return_data ) ;
    exit() ;
}
$db          -> close() ;
$query       -> free()  ;
$result      -> free()  ;

brokerSubBrokersTable.php

<?php session_start() ;
include ( 'database/sql_link.php' ) ;

$levelID     =           "subBroker"  ;
$userComp    = $_SESSION[ 'company' ] ;
$query = " SELECT    *
           FROM      clients
           WHERE     companyName  =  '$userComp'
           AND       userLevel    =  '$levelID'
           ORDER BY  ID " ;

      $result = $db -> query( $query ) ;

if ( !$result = $db -> query( $query ) ) {
    die( ' There was an error running the query [ ' . $db -> error . ' ] ' ) ;
} else if ( mysqli_num_rows( $result ) == 0 ) {
    echo "Error running query or no results returned..." ;
} else {
    echo "
            <h2 class='chapterTitle'> Your Sub-Accounts </h2>
            <table  id='brokerSubBrokersTable'  class='listTable'  style=\"padding:5px;\" >
                <thead>
                    <tr>
                        <th> Company    </th>
                        <th> Name       </th>
                        <th> Login Name </th>
                        <th> Email      </th>
                    </tr>
                </thead>
                <tbody>
    " ;
while( $row = $result -> fetch_assoc() ) {
$rowID       = $row[ 'ID'          ] ;
$companyName = $row[ 'companyName' ] ;
$nameID      = $row[ 'actualName'  ] ;
$loginName   = $row[ 'userName'    ] ;
$userEmail   = $row[ 'eMail'       ] ;
    echo "
                    <tr style=\"height:10px;\" >
                        <td style=\" padding-left:10px; text-align:center; \" >  $companyName </td>
                        <td style=\" padding-left:10px; text-align:center; \" >
                            <p class='quoteLink'>
                                <span class='icon-profile'>  $nameID </span>
                            </p>
                        </td>
                        <td style=\" padding:0 10px; text-align:center; \" > $loginName       </td>
                        <td style=\" padding:0 10px; text-align:center; \" > $userEmail       </td>
                    </tr>
    " ;

    }
    echo "
                </tbody>
            </table>
    " ;


}


$db     -> close() ;
$result -> free()  ;

checkLogin.php

<?php session_start() ;

if( !function_exists( 'hash_equals' ) ) {
    function hash_equals( $a , $b ) {
        $ret   = strlen( $a ) ^ strlen( $b ) ;
        $ret  |= array_sum( unpack( "C*" , $a ^ $b ) ) ;
        return !$ret ;
    }
}
include( 'database/sql_link.php' ) ;

$user    = mysqli_real_escape_string( $db , $_GET[ 'uName' ] ) ;
$pass    = mysqli_real_escape_string( $db , $_GET[ 'pWord' ] ) ;
$query   = "
             SELECT  *
             FROM    clients
             WHERE   userName = '$user'
           " ;
$result = $db -> query( $query ) ;

if ( mysqli_num_rows( $result ) == 0 )
{
    echo "error" ;
} else {
    while ( $row  = $result -> fetch_assoc() ) {
        $userName    = $row[ 'userName'    ] ;
        $hash        = $row[ 'Pass_Word'   ] ;
        $companyName = $row[ 'companyName' ] ;
        $realName    = $row[ 'actualName'  ] ;
        $id          = $row[ 'ID'          ] ;
        $firstLogin  = $row[ 'firstLogin'  ] ;
        $userLevel   = $row[ 'userLevel'   ] ;
        $email       = $row[ 'eMail'       ] ;
    }
    if ( hash_equals( $hash , crypt( $pass , $hash ) ) ) {
        $_SESSION[ 'loginID'    ] = $id          ;
        $_SESSION[ 'company'    ] = $companyName ;
        $_SESSION[ 'userLevel'  ] = $userLevel   ;

        if( isset( $_SESSION[ 'loginID' ] ) ) {
            echo $_SESSION[ 'loginID' ] ;
        } else {
            echo 'Session Error' ;
        }
    } else {
        echo 'Invalid' ;
    }
$result         -> free() ;
$db             -> close() ;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню