-2

私は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();
  }

 ?>`
4

2 に答える 2

4

1-$email=htmlspecialchars($email);

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

2-while($row = mysql_fetch_array($result)){

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

3-if ($count>0){

行を取得しようとする前に、これを実行する方が賢明ではないでしょうか。代わりに、このif()内に入力するフェッチ/セッション全体を実行できます

4-mysql_query($result);

これを実行した時点で、$ resultはブール値のFALSE(元のクエリ呼び出しが失敗した)、mysqlクエリ結果ステートメントハンドルのいずれかです。クエリ文字列ではないため、クエリ呼び出しは失敗します

5-mysql_query($loginr);

#4-を参照してください-$loginrは「false」またはステートメントハンドルのいずれかです。なぜクエリを2回行うのですか?

于 2011-01-16T04:38:20.517 に答える
1

あなたがメントインしたので、あなたは初心者です。あまりにも多くのことがうまくいかない可能性があるので(セキュリティ違反)、PHPで独自のログイン/認証システムを作成しないことを強くお勧めします。代わりに非常に使いやすいlightopenidを使用することをお勧めします。

于 2011-01-16T05:37:22.017 に答える