2011-01-16 18 views
0

私は簡単なLAMPアプリケーションを開発しています。ユーザーはPaypalを使用してアカウントにクレジットを振ることができます。私は、これは単純な問題である疑いがあるが、無駄に試して、かなり長い間を費やしているし、任意の考えをいただければ幸いです。セッションに基づいてユーザーのクレジットを表示するにはどうすればいいですか?


システムは、セッションを使用してユーザー管理システム作業罰金を持っているが、私はそれを得ることができません現在のユーザーのクレジットを表示します。

しかし、私はの線に沿って物事しようとしてきた:ユーザーから

$結果を=するmysql_query(」
SELECT *

INNERはaccount.UserID =の口座
を登録しよう。ユーザーID
ORDER BY account.accountID ");

ながら($ _ SESSION [ 'ユーザー名'] = $行[ 'ユーザー名']){ エコー$行[ 'ユーザー名']。 echo $ row ['Credit']; }

は私がしばらくの文が無効である疑いがあるが、私はそれは、現在のセッションのユーザー名=ユーザ名は、データベースに格納されているユーザー名と信用をエコーし​​ます。

ありがとうございました。ありがとうございます。非常に感謝しています。

+0

あなたのサイトでオンラインになるための基準としてユーザー名を保存するだけでなく、私はusername/idのsaltバージョン、または暗号化されたバージョンのパスワードを使用することをお勧めします(ユーザーの安全のために既にデータベースに暗号化されているはずです)。そしてそれを(username/id )。誰かが簡単にセッションを作成できます。それ以外の場合は自分のアカウントにアクセスするために既に存在するユーザーのユーザー名でjavascriptを実行します。ちょっとしたヒント。 – eklundchristopher

+0

あなたのコードを見ることで、開発されたソリッドアプリケーションの経験が豊富になるまで支払いシステムを処理する必要はないと思うので、数日の作業のためにプログラマーを雇うことをお勧めします。 – RobertPitt

答えて

2

これは実際には、あなたは明らかにPHPの知識が全くないので、あなたが修正できないコードにはかなり間違っています。
しかし、これを説明して、間違ったことをよく理解できるようにしてください:

まず、あなたのmysqlステートメントは間違っています。 なぜ自分自身のフィールドに参加しますか?ユーザーは実際には参加していないので、対応するユーザー< - >アカウント行は取得されません。
それに加えて、1人のローをフェッチしたい場合(1人のユーザのデータをエコーし​​たいだけなので、より多くをフェッチするのはリソースが重いだけです)、mysqlに指示します。簡単な例は、 "どこで=" b "LIMIT 1(aが" b "に等しい行だけを選択し、最初に見つかった後に戻る)です。対応するデータをフェッチ
あなたはmysql_fetch_assoc /は、mysql_fetch_array/mysql_fetch_objectを使用して これは、このようなものになりますことを行うことができます。。。あなたが一列のみを持っているよう$data = mysql_fetch_array($query);を をこのケースでは、while()ループを使用する必要はありません

エコーを2回呼び出す必要はありませんが、残りのコードは正しいはずです。両方の変数に "。"を付けてください:echo $row['Username'].$row['Credit'];
の間にスペースを挿入する場合は、別のドット(echo $row['Username']." ".$row['Credit'];)で接続します。

0
あなたが唯一のMySQLの結果を持って、今あなたが連想配列(またはオブジェクト)として、その情報を返す必要が

while ($row = mysql_fetch_assoc($result)) { 
    if ($_SESSION['username'] == $row['Username']) { 
     echo $row['Username']; 
     echo $row['Credit']; 
    } 
} 

あなたが方法として、$ _SESSION [「ユーザ名」]を使用しているかのように表示されますサイトでのユーザー認証を確認するには、塩漬け+ハッシュバージョンのユーザー名とログイン時間(パスワードは絶対に入れないでください)を使用する方がはるかに適しています。

1
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
{ 
    if ($row['Username'] == $_SESSION['Username']) 
    { 
     echo $row['Username']; 
     echo $row['Credit']; 
     break; // I believe username is unuque. 
    } 
} 

しかし、それは表からわずか1行を取得するにははるかに良いです:私に飛び出し

$result = mysql_query(" 
SELECT * 
FROM users 
INNER JOIN account 
ON account.UserID=users.UserID 
WHERE Username ='".mysql_real_escape_string($_SESSION['Username'])."'"); 
if ($result && $row = mysql_fetch_array($result, MYSQL_ASSOC)) 
{ 
    echo ..... 
} 
+1

なぜあなたはテーブルから1つの行だけを取得する必要があるのですか? – Robin

+0

私の最初の(php)コードは、質問の元のクエリを使用します( 'WHERE'なし)。これが私がDBから1つの行を取得する2番目のソリューションを提案した理由です。 – a1ex07

0

一つのことは、あなたのクエリがオンに参加しているということです。

代わり
account.UserID=account.UserID 

of:

account.UserID=user.ID 

また、th

while($_SESSION['Username'] = $row['Username']) 

=看板の比較は、割り当てのためではありませんので、あなたは$_SESSION['Username']$row['Username']の値を設定し、実際にだ:右ではないです。次に、式はブール値として評価されます(条件付きであるため)。そして、それが本当なら、永遠に真となるでしょう。無限ループ都市。

関連する問題