Проблема с PHP Логин - PullRequest
       4

Проблема с PHP Логин

0 голосов
/ 16 января 2011

Я новичок в 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 ]

4 голосов
/ 16 января 2011

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 является либо логическим FALSE (оригиналне удалось выполнить запрос), дескриптор оператора результата запроса mysql.это НЕ строка запроса, поэтому ваш запрос не удастся

5 - mysql_query($loginr);

См. # 4 - $ loginr это либо "false", либо дескриптор оператора.Зачем делать запрос дважды?

1 голос
/ 16 января 2011

Поскольку вы проходите обучение, вы новичок, и я настоятельно рекомендую вам не писать свою собственную систему входа в систему / аутентификации на PHP, потому что слишком много вещей может пойти не так (нарушение безопасности). Я бы посоветовал вам использовать lightopenid , который очень прост в использовании.

...