Проблема с входом в 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();
  }

 ?>`

person the_    schedule 16.01.2011    source источник
comment
Изучите магию отступов, пожалуйста. И если вам нужна помощь с проблемой, это МОЖЕТ помочь, если вы сообщите нам, В ЧЕМ проблема.   -  person Naatan    schedule 16.01.2011
comment
А сообщение об ошибке есть? Должны ли мы угадать? Когда вы идете к врачу и говорите ему, что плохо себя чувствуете, вы ожидаете, что он просто вытащит из сумки волшебное зелье, которое вылечит все, что вас беспокоит, ничего не зная о том, что это за болезнь на самом деле?   -  person Marc B    schedule 16.01.2011
comment
не советую писать логин-систему самостоятельно, потому что вы новичок. Смотрите мой пост ниже..   -  person Alfred    schedule 16.01.2011


Ответы (2)


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

person Alfred    schedule 16.01.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», либо дескриптор оператора. Зачем делать запрос дважды?

person Marc B    schedule 16.01.2011
comment
Эй, спасибо за помощь с этим... Я знаю, что это был отстойный вопрос, извините за это... Я должен был указать ошибки, которые я получил... В любом случае, я сделал то, что вы сказали, и это сработало. Спасибо! - person the_; 16.01.2011