PHP登录问题

时间:2011-01-16 04:18:25

标签: php mysql login login-control

我是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 个答案:

答案 0 :(得分:4)

1 - $email=htmlspecialchars($email);

这不是您如何清理SQL查询的文本。这在一定程度上可以防止XSS攻击,但对于SQL注入却没有任何作用。请改用mysql_real_escape_string()

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

可能只会返回一行,所以在循环中执行此操作毫无意义。只需在没有while循环的情况下获取单行。

3 - if ($count>0){

在您尝试检索行之前,这不是更聪明吗?你可以在if()而不是

中完成整个提取/会话填充

4 - mysql_query($result);

在执行此操作时,$ result是boolean FALSE(原始查询调用失败),mysql查询结果语句句柄。它不是查询字符串,因此您的查询调用将失败

5 - mysql_query($loginr);

请参阅#4 - $ loginr是“false”或语句句柄。为什么查询两次?

答案 1 :(得分:1)

正如你所指导的那样,你是一个新手,我强烈建议你不要在PHP中编写自己的登录/身份验证系统,因为太多事情可能会出错(安全漏洞)。我建议你使用lightopenid,这很容易使用。