2014-01-09 4 views
0

Я реализовал эту систему входа на моем сайте: http://tutorialzine.com/2009/10/cool-login-system-php-jquery/PHP Войти код системы редактирования

Я новичок в php поэтому мой вопрос, когда пользователь регистрируется с именем пользователя и адрес электронной почты, как можно показать, что имя пользователя, выберите в письме. Прямо сейчас im отправляет только свой пароль.

Кроме того, как я могу проверить, что, когда пользователь пытается зарегистрироваться для учетной записи, этот адрес электронной почты, который они помещают, уже не используется для учетной записи? Прямо сейчас, когда вы регистрируетесь для учетной записи, у которой уже есть учетная запись, система просто назначает этот адрес электронной почты новым паролем, а старый пароль не работает.

<?php 

define('INCLUDE_CHECK',true); 

require 'connect.php'; 
require 'functions.php'; 
// Those two files can be included only if INCLUDE_CHECK is defined 


session_name('tzLogin'); 
// Starting the session 

session_set_cookie_params(2*7*24*60*60); 
// Making the cookie live for 2 weeks 

session_start(); 

if($_SESSION['id'] && !isset($_COOKIE['tzRemember']) && !$_SESSION['rememberMe']) 
{ 
    // If you are logged in, but you don't have the tzRemember cookie (browser restart) 
    // and you have not checked the rememberMe checkbox: 

    $_SESSION = array(); 
    session_destroy(); 

    // Destroy the session 
} 


if(isset($_GET['logoff'])) 
{ 
    $_SESSION = array(); 
    session_destroy(); 

    header("Location: DownloadLinks.php"); 
    exit; 
} 

if($_POST['submit']=='Login') 
{ 
    // Checking whether the Login form has been submitted 

    $err = array(); 
    // Will hold our errors 


    if(!$_POST['username'] || !$_POST['password']) 
     $err[] = 'All the fields must be filled in!'; 

    if(!count($err)) 
    { 
     $_POST['username'] = mysql_real_escape_string($_POST['username']); 
     $_POST['password'] = mysql_real_escape_string($_POST['password']); 
     $_POST['rememberMe'] = (int)$_POST['rememberMe']; 

     // Escaping all input data 

     $row = mysql_fetch_assoc(mysql_query("SELECT id,usr FROM tz_members WHERE usr='{$_POST['username']}' AND pass='".md5($_POST['password'])."'")); 

     if($row['usr']) 
     { 
      // If everything is OK login 

      $_SESSION['usr']=$row['usr']; 
      $_SESSION['id'] = $row['id']; 
      $_SESSION['rememberMe'] = $_POST['rememberMe']; 

      // Store some data in the session 

      setcookie('tzRemember',$_POST['rememberMe']); 
     } 
     else $err[]='Wrong username and/or password!'; 
    } 

    if($err) 
    $_SESSION['msg']['login-err'] = implode('<br />',$err); 
    // Save the error messages in the session 

    header("Location: DownloadLinks.php"); 
    exit; 
} 
else if($_POST['submit']=='Register') 
{ 
    // If the Register form has been submitted 

    $err = array(); 

    if(strlen($_POST['username'])<4 || strlen($_POST['username'])>32) 
    { 
     $err[]='Your username must be between 3 and 32 characters!'; 
    } 

    if(preg_match('/[^a-z0-9\-\_\.]+/i',$_POST['username'])) 
    { 
     $err[]='Your username contains invalid characters!'; 
    } 

    if(!checkEmail($_POST['email'])) 
    { 
     $err[]='Your email is not valid!'; 
    } 

    if(!count($err)) 
    { 
     // If there are no errors 

     $pass = substr(md5($_SERVER['REMOTE_ADDR'].microtime().rand(1,100000)),0,6); 
     // Generate a random password 

     $_POST['email'] = mysql_real_escape_string($_POST['email']); 
     $_POST['username'] = mysql_real_escape_string($_POST['username']); 
     // Escape the input data 


     mysql_query(" INSERT INTO tz_members(usr,pass,email,regIP,dt) 
         VALUES(

          '".$_POST['username']."', 
          '".md5($pass)."', 
          '".$_POST['email']."', 
          '".$_SERVER['REMOTE_ADDR']."', 
          NOW() 

         )"); 

     if(mysql_affected_rows($link)==1) 
     { 

     require_once "Mail.php"; 

$from = "Mail <[email protected]>"; 
$to = $_POST['email']; 
$subject = "Registration System- Your New Password"; 


$body = "Thank you for registering \n You username is: $usr $_SESSION[usr] 
Your password is: $pass \n Please login with your registered email and password"; 

$host = "mail.host.com"; 
$username = "username"; 
$password = "password"; 

$headers = array ('From' => $from, 
    'To' => $to, 
    'Subject' => $subject); 
$smtp = Mail::factory('smtp', 
    array ('host' => $host, 
    'auth' => true, 
    'username' => $username, 
    'password' => $password)); 

$mail = $smtp->send($to, $headers, $body); 

     if (PEAR::isError($mail)) { 
    echo("<p>" . $mail->getMessage() . "</p>"); 
    } else { 
    $_SESSION['msg']['reg-success']='We sent you an email with your new password! Check your junk/spam too!';} 

     } 

     else $err[]='This username is already taken!'; 
    } 

    if(count($err)) 
    { 
     $_SESSION['msg']['reg-err'] = implode('<br />',$err); 
    } 

    header("Location: DownloadLinks.php"); 
    exit; 
} 

$script = ''; 

if($_SESSION['msg']) 
{ 
    // The script below shows the sliding panel on page load 

    $script = ' 
    <script type="text/javascript"> 

     $(function(){ 

      $("div#panel").show(); 
      $("#toggle a").toggle(); 
     }); 

    </script>'; 

} 
?> 
+0

Просто запросите базу данных для их адреса электронной почты. Если он уже там, у них уже есть учетная запись. –

+0

плохой учебник, не используйте –

+0

очень плохой действительно – FreshPro

ответ

0

При регистрации вы не установили $_SESSION['usr]. Вместо этого используйте $_POST['username'].

$body = "Thank you for registering at The Quran Reciters Members Page \n You username is: " . $_POST['username'] . " 
Your password is: $pass \n Please login with your registered email and password"; 

Для того, чтобы убедиться, что пользователь не является зарегистрированным пользователем, вы должны сначала запросить базу данных для пользователя и адрес электронной почты. Точно так же вы делаете логин:

$row = mysql_fetch_assoc(mysql_query("SELECT id,usr FROM tz_members WHERE usr='" . $_POST['username'] . "' AND email = '" . $_POST['email'] ."'")); 

     if($row['usr']) 
     { 
      // return an error message and display the registration form again 
     } 

Но, как упоминает Дагон, это не очень хороший учебник. Я надеюсь, что это только для обучения, а не для системы, используемой для производства.

+0

Большое спасибо, первая часть работала. если я только что сделал это . Ваше имя пользователя: $ _POST ['username'], оно вызвало синтаксическую ошибку, но когда я сделал это $ username = $ _POST ['username']; и тогда вы имя пользователя: $ username, он работал –

+0

Я не получил вторую часть, не могли бы вы показать мне, где поставить этот код? является его здесь: $ строка = mysql_fetch_assoc (mysql_query ("SELECT ID, USR FROM tz_members WHERE USR = '{$ _ POST [' имя пользователя ']}' И передать = '" md5 ($ _ POST [. 'Пароль' ]) "'")). if ($ row ['usr']) { –

+0

Прежде чем вставлять новую регистрацию в базу данных, проверьте, доступно ли имя пользователя, а адрес электронной почты еще не указан в вашем db. В качестве альтернативы установите свою базу данных так, чтобы имя пользователя и адрес электронной почты были уникальными. – Hameed

Смежные вопросы