2011-01-16 5 views
-2

私はPHPの初心者で、ユーザーのログインセッションをしようとしています。私は間違いを続けている。どんな助けでも大歓迎です。PHPログインの問題

<?php session_start();  
    include('./config.php'); 
    $email=$_POST['email']; 
    $email=htmlspecialchars($email); 
    $Password=$_POST['password']; 
    $Password=htmlspecialchars($Password); 
    $ip=$_SERVER['REMOTE_ADDR']; 
    $result = mysql_query("SELECT * FROM member WHERE email='$email' AND password='$Password'") or trigger_error(mysql_error()); 
    $count = mysql_num_rows($result); 
    while($row = mysql_fetch_array($result)){ 
$logfirstname=$row['firstname']; 
$loglastname=$row['lastname']; 
$logid=$row['id']; 
$logemail=$row['email']; 
$logphone=$row['phone']; 
$logbiz=$row['biz_id']; 
$logdate=$row['date_joined']; 
$logaddress=$row['address']; 
$logsponsored=$row['sponsored']; 
    } 
if ($count>0){ 
$_SESSION['auth']=1; 
$_SESSION['id']=$logid; 
$_SESSION['biz']=$logbiz; 
$_SESSION['name']=$logfirstname." ".$loglastname; 
$sess=$logfirstname." ".$loglastname; 
if ($logsponsored === "1") { $_SESSION['sponsored']=1;} 
mysql_query($result); 
mysql_close(); 
session_regenerate_id(); 
$sid=session_id(); 

include('./config.php'); 
$loginr=mysql_query("INSERT INTO login (sessionid, memberid, username, IPAddr, LogInTime, Status, name) 
VALUES ('$sid', '$logid', '$email', '$ip', NOW(), 'On', '$sess')"); 
mysql_query($loginr); 
mysql_close(); 

    header("Location: controlpanel.php"); 
    exit(); 
    }else{ 
    header('Location: login.php?fail=1'); 
    exit(); 
    } 

?>` 
+2

炎の準備をする。 – Stoosh

+7

くぼみの魔法を覚えてください。問題の原因を知りたい場合には、問題の解決策が必要な場合は助けてください。 – Naatan

+4

エラーメッセージは?私たちは推測すべきでしょうか?あなたが医者に行くとあなたが気分が良くないと話すとき、病気が本当に何であるかについて何も知らずに、あなたの病気を修正する魔法の薬を彼のバッグから取り出してくれると期待していますか? –

答えて

1

あなたは初心者ですので、あまりにも多くのことが間違っている可能性がある(セキュリティ侵害)ので、あなた自身のログイン/認証システムをPHPで書くことを強くお勧めします。私はlightopenidを使用することをお勧めします。これは代わりに使いやすいです。

+0

thats cool。私はそれを試みます。 –

+0

これはとても使いやすいです!それはちょうど箱の外で働く。 – Alfred

4

1から$email=htmlspecialchars($email);

これは、SQLクエリのテキストをサニタイズする方法ではありません。これはXSS攻撃を多少防ぎますが、SQLインジェクションには何もしません。代わりにmysql_real_escape_string()を使用してください。

2からwhile($row = mysql_fetch_array($result)){

おそらく唯一の単一の行が返されるので、ループ内でこれを行うにはポイントがありません。 whileループなしで単一の行をフェッチするだけです。

3からif ($count>0){

あなたが行を取得しようとする前には、これに賢くではないでしょうか? $結果がブール値FALSE(元のクエリの呼び出しが失敗した)、Aのいずれかで、あなたがこれを実行する時点でmysql_query($result);

- (場合)は、代わりに

4をこの中に移入フェッチ/セッションの全体を行うことができますmysqlのクエリ結果文のハンドル。 mysql_query($loginr);

#4を参照してください - - $のloginrは「偽」、またはステートメント・ハンドルのいずれかである。クエリの呼び出しが

5を失敗するので、それは、クエリ文字列ではありませんなぜクエリを2回行うのですか?

+2

実際にそのことを読んでいるあなたに誇りを持って – Naatan

+0

私は今夜退屈です... :) –

+0

こんにちは、これを手伝ってくれてありがとう...私はそれについて申し訳ありませんが、私が得たエラーを与えているはずでした...とにかく私はあなたが言ったことをし、それは働いた。ありがとう! –