Следующий код работает один раз.
Когда страница загружается, данные отображаются правильно. 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>
Поэтому я исправил это. Думаю...
Я все еще не знаю, почему переменные менялись.
Он начал работать, когда я возился с именами переменных в моем 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() ;
PHP Notice: Undefined index: [variable name here]
для каждого назначения (например,$ID = $_SESSION[ 'ID' ]
), поэтому эти переменные сеанса должны быть установлены в другом месте.