2014-02-05 20 views
-1

所以我的註冊和登錄php代碼有問題。我把它們放在一個名爲index.php的php文件中,並且註冊工作正常,但是當我嘗試登錄時它與註冊語句發生衝突。爲什麼我的註冊和登錄代碼發生衝突PHP

<?php 
include_once("php_includes/check_login_status.php"); 
// If user is already logged in, header that weenis away 
if($user_ok == true){ 
    header("location: user.php?u=".$_SESSION["username"]); 
    exit(); 
} 
?> 

<!-- .registerphp --> 
<?php 
// Ajax calls this NAME CHECK code to execute 
if(isset($_POST["usernamecheck"])){ 
    include_once("php_includes/db_conx.php"); 
    $username = preg_replace('#[^a-z0-9]#i', '', $_POST['usernamecheck']); 
    $sql = "SELECT id FROM users WHERE username='$username' LIMIT 1"; 
    $query = mysqli_query($db_conx, $sql); 
    $uname_check = mysqli_num_rows($query); 
    if (strlen($username) < 3 || strlen($username) > 16) { 
     echo '<strong style="color:#F00;">3 - 16 characters please</strong>'; 
     exit(); 
    } 
    if (is_numeric($username[0])) { 
     echo '<strong style="color:#F00;">Usernames must begin with a letter</strong>'; 
     exit(); 
    } 
    if ($uname_check < 1) { 
     echo '<strong style="color:#009900;">' . $username . ' is OK</strong>'; 
     exit(); 
    } else { 
     echo '<strong style="color:#F00;">' . $username . ' is taken</strong>'; 
     exit(); 
    } 
} 
?> 
<?php 
// Ajax calls this REGISTRATION code to execute 
if(isset($_POST["u"])){ 
    // CONNECT TO THE DATABASE 
    include_once("php_includes/db_conx.php"); 
    // GATHER THE POSTED DATA INTO LOCAL VARIABLES 
    $u = preg_replace('#[^a-z0-9]#i', '', $_POST['u']); 
    $e = mysqli_real_escape_string($db_conx, $_POST['e']); 
    $p = $_POST['p']; 
    $g = preg_replace('#[^a-z]#', '', $_POST['g']); 
    $c = preg_replace('#[^a-z ]#i', '', $_POST['c']); 
    // GET USER IP ADDRESS 
    $ip = preg_replace('#[^0-9.]#', '', getenv('REMOTE_ADDR')); 
    // DUPLICATE DATA CHECKS FOR USERNAME AND EMAIL 
    $sql = "SELECT id FROM users WHERE username='$u' LIMIT 1"; 
    $query = mysqli_query($db_conx, $sql); 
    $u_check = mysqli_num_rows($query); 
    // ------------------------------------------- 
    $sql = "SELECT id FROM users WHERE email='$e' LIMIT 1"; 
    $query = mysqli_query($db_conx, $sql); 
    $e_check = mysqli_num_rows($query); 
    // FORM DATA ERROR HANDLING 
    if($u == "" || $e == "" || $p == "" || $g == "" || $c == ""){ 
     echo "The form submission is missing values."; 
     exit(); 
    } else if ($u_check > 0){ 
     echo "The username you entered is alreay taken"; 
     exit(); 
    } else if ($e_check > 0){ 
     echo "That email address is already in use in the system"; 
     exit(); 
    } else if (strlen($u) < 3 || strlen($u) > 16) { 
     echo "Username must be between 3 and 16 characters"; 
     exit(); 
    } else if (is_numeric($u[0])) { 
     echo 'Username cannot begin with a number'; 
     exit(); 
    } else { 
    // END FORM DATA ERROR HANDLING 
     // Begin Insertion of data into the database 
     // Hash the password and apply your own mysterious unique salt 
     include_once ("php_includes/blowfish.php"); 
     $cryptpass = crypt($p); 
     $p_hash = cryptPass($cryptpass)."$cryptpass".cryptPass($cryptpass); 
     // Add user info into the database table for the main site table 
     $sql = "INSERT INTO users (username, email, password, gender, country, ip, signup, lastlogin, notescheck)  
       VALUES('$u','$e','$p_hash','$g','$c','$ip',now(),now(),now())"; 
     $query = mysqli_query($db_conx, $sql); 
     $uid = mysqli_insert_id($db_conx); 
     // Establish their row in the useroptions table 
     $sql = "INSERT INTO useroptions (id, username, background) VALUES ('$uid','$u','original')"; 
     $query = mysqli_query($db_conx, $sql); 
     // Create directory(folder) to hold each user's files(pics, MP3s, etc.) 
     if (!file_exists("user/$u")) { 
      mkdir("user/$u", 0755); 
     } 
     // Email the user their activation link 
     $to = "$e";       
     $from = "[email protected]"; 
     $subject = 'PFolio Account Activation'; 
     $message = '<!DOCTYPE html><html><head><meta charset="UTF-8"><title>PFolio Message</title></head><body style="margin:0px; font-family:Tahoma, Geneva, sans-serif;"><div style="padding:10px; background:#333; font-size:24px; color:#CCC;"><a href="http://www.pfolio.bugs3.com"><img src="http://www.pfolio.bugs3.com/images/smalllogo.png" width="215" height="50" alt="PFolio" style="border:none; float:left;"></a>PFolio Account Activation</div><div style="padding:24px; font-size:17px;">Hello '.$u.',<br /><br />Click the link below to activate your account when ready:<br /><br /><a href="http://www.pfolio.bugs3.com/activation.php?id='.$uid.'&u='.$u.'&e='.$e.'&p='.$p_hash.'">Click here to activate your account now</a><br /><br />Login after successful activation using your:<br />* Username: <b>'.$u.'</b></div></body></html>'; 
     $headers = "From: $from\n"; 
     $headers .= "MIME-Version: 1.0\n"; 
     $headers .= "Content-type: text/html; charset=iso-8859-1\n"; 
     mail($to, $subject, $message, $headers); 
     echo "signup_success"; 
     exit(); 
    } 
    exit(); 
} 
?> 
<!-- .registerphp --> 

<!-- .loginphp --> 
<?php 
// AJAX CALLS THIS LOGIN CODE TO EXECUTE 
if(isset($_POST["u"])){ 
    // CONNECT TO THE DATABASE 
    include_once("php_includes/db_conx.php"); 
    // GATHER THE POSTED DATA INTO LOCAL VARIABLES AND SANITIZE 
    $u = mysqli_real_escape_string($db_conx, $_POST['u']); 
    $p = crypt($_POST['p']); 
    // GET USER IP ADDRESS 
    $ip = preg_replace('#[^0-9.]#', '', getenv('REMOTE_ADDR')); 
    // FORM DATA ERROR HANDLING 
    if($u == "" || $p == ""){ 
     echo "login_failed"; 
     exit(); 
    } else { 
    // END FORM DATA ERROR HANDLING 
     $sql = "SELECT id, username, password FROM users WHERE username='$u' AND activated='1' LIMIT 1"; 
     $query = mysqli_query($db_conx, $sql); 
     $row = mysqli_fetch_row($query); 
     $db_id = $row[0]; 
     $db_username = $row[1]; 
     $db_pass_str = $row[2]; 
     if($p != $db_pass_str){ 
      echo "login_failed"; 
      exit(); 
     } else { 
      // CREATE THEIR SESSIONS AND COOKIES 
      $_SESSION['userid'] = $db_id; 
      $_SESSION['username'] = $db_username; 
      $_SESSION['password'] = $db_pass_str; 
      setcookie("id", $db_id, strtotime('+30 days'), "/", "", "", TRUE); 
      setcookie("user", $db_username, strtotime('+30 days'), "/", "", "", TRUE); 
      setcookie("pass", $db_pass_str, strtotime('+30 days'), "/", "", "", TRUE); 
      // UPDATE THEIR "IP" AND "LASTLOGIN" FIELDS 
      $sql = "UPDATE users SET ip='$ip', lastlogin=now() WHERE username='$db_username' LIMIT 1"; 
      $query = mysqli_query($db_conx, $sql); 
      echo $db_username; 
      exit(); 
     } 
    } 
    exit(); 
} 
?> 
<!-- .loginphp --> 

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="utf-8" /> 
<!--[if lt IE 9]><script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]--> 
<title>P'Folio</title> 
<meta name="keywords" content="" /> 
<meta name="description" content="" /> 
<link href="css/loginstyle.css" rel="stylesheet" type="text/css"> 
<script src="js/main.js"></script> 
<script src="js/ajax.js"></script> 
<!-- .registerjs --> 
<script> 
function restrict(elem){ 
    var tf = _(elem); 
    var rx = new RegExp; 
    if(elem == "email"){ 
     rx = /[' "]/gi; 
    } else if(elem == "username"){ 
     rx = /[^a-z0-9]/gi; 
    } 
    tf.value = tf.value.replace(rx, ""); 
} 
function emptyElement(x){ 
    _(x).innerHTML = ""; 
} 
function checkusername(){ 
    var u = _("username").value; 
    if(u != ""){ 
     _("unamestatus").innerHTML = 'checking ...'; 
     var ajax = ajaxObj("POST", "index.php"); 
     ajax.onreadystatechange = function() { 
      if(ajaxReturn(ajax) == true) { 
       _("unamestatus").innerHTML = ajax.responseText; 
      } 
     } 
     ajax.send("usernamecheck="+u); 
    } 
} 
function signup(){ 
    var u = _("username").value; 
    var e = _("email").value; 
    var p1 = _("pass1").value; 
    var p2 = _("pass2").value; 
    var c = _("country").value; 
    var g = _("gender").value; 
    var status = _("status"); 
    if(u == "" || e == "" || p1 == "" || p2 == "" || c == "" || g == ""){ 
     status.innerHTML = "Fill out all of the form data"; 
    } else if(p1 != p2){ 
     status.innerHTML = "Your password fields do not match"; 
    } else { 
     _("signupbtn").style.display = "none"; 
     status.innerHTML = 'please wait ...'; 
     var ajax = ajaxObj("POST", "index.php"); 
     ajax.onreadystatechange = function() { 
      if(ajaxReturn(ajax) == true) { 
       if(ajax.responseText != "signup_success"){ 
        status.innerHTML = ajax.responseText; 
        _("signupbtn").style.display = "block"; 
       } else { 
        window.scrollTo(0,0); 
        _("signupform").innerHTML = "OK "+u+", check your email inbox and junk mail box at <u>"+e+"</u> in a moment to complete the sign up process by activating your account. You will not be able to do anything on the site until you successfully activate your account."; 
       } 
      } 
     } 
     ajax.send("u="+u+"&e="+e+"&p="+p1+"&c="+c+"&g="+g); 
    } 
} 
</script> 
<!-- .registerjs --> 

<!-- .loginjs --> 
<script> 
function emptyElement(x){ 
    _(x).innerHTML = ""; 
} 
function login(){ 
    var u = _("user_name").value; 
    var p = _("pass_word").value; 
    if(u == "" || p == ""){ 
     _("sta_tus").innerHTML = "Fill out all of the form data"; 
    } else { 
     _("loginbtn").style.display = "none"; 
     _("sta_tus").innerHTML = 'please wait ...'; 
     var ajax = ajaxObj("POST", "index.php"); 
     ajax.onreadystatechange = function() { 
      if(ajaxReturn(ajax) == true) { 
       if(ajax.responseText == "login_failed"){ 
        _("sta_tus").innerHTML = "Login unsuccessful, please try again."; 
        _("loginbtn").style.display = "block"; 
       } else { 
        window.location = "user.php?u="+ajax.responseText; 
       } 
      } 
     } 
     ajax.send("u="+u+"&p="+p); 
    } 
} 
</script> 
<!-- .loginjs --> 
</head> 

    <body> 
<!-- .wrapper --> 
<div class="wrapper"> 
<!-- .header--> 
    <header class="header"> <img src="images/logo.png" alt="logo" title="P'Folio"> </header> 
    <!-- .header--> 

    <!-- .login --> 
    <div class="login"> 
    <form id="loginform" onsubmit="return false;"> 
     <div><img class="h1" src="images/lh.png" alt="login%20here"/></div> 
     <div><img class="p1" src="images/wb.png" alt="welcome%20back"/></div> 
     <input type="text" id="user_name" onfocus="emptyElement('status')" maxlength="16" class="loginboxes" placeholder="Username"> 
     <input type="password" id="pass_word" onfocus="emptyElement('status')" maxlength="100" class="loginboxes" placeholder="Password"> 
     <br /> 
     <button id="loginbtn" onclick="login()">Log In</button> 
     <p id="sta_tus"></p> 
     <a href="#">Forgot Your Password?</a> 
    </form> 
    </div> 
    <!-- .login --> 

    <!-- .main --> 
    <main class="content"> 
    <p>Are you a musician, a model, actor or actress or anyone with a talent then sign up for P'Folio. 
     Here on P'Folio we look to give you space to upload a portfolio for you to be noticed. </p> 
    </main> 
    <!-- .main --> 

    <!-- .signup --> 
    <div class="signup"> 
    <form name="signupform" id="signupform" onsubmit="return false;"> 
     <div><img class="h1" src="images/caa.png" alt="create%20account"/></div> 
     <div><img class="p1" src="images/ntm.png" alt="new%20to%20P'Folio"/></div> 
     <span id="unamestatus"></span> 
     <input id="username" type="text" onblur="checkusername()" onkeyup="restrict('username')" maxlength="16" placeholder="Username" class="registerboxes"> 
     <input id="email" type="text" onfocus="emptyElement('status')" onkeyup="restrict('email')" maxlength="88" placeholder="Email" class="registerboxes"> 
     <input id="pass1" type="password" onfocus="emptyElement('status')" maxlength="100" placeholder="Password" class="registerboxes"> 
     <input id="pass2" type="password" onfocus="emptyElement('status')" maxlength="100" placeholder="Confirm Password" class="registerboxes"> 
     <select id="gender" onfocus="emptyElement('status')" class="registerboxes"> 
     <option value="0" selected="selected">Choose...</option> 
     <option value="m">Male</option> 
     <option value="f">Female</option> 
     </select> 
     <select id="country" onfocus="emptyElement('status')" class="registerboxes"> 
     <?php include_once("template_country_list.php"); ?> 
     </select> 
     <div class="conditions">By clicking Sign Up, 
     you agree to our <a href="#">Terms</a> and that 
     you have read our <a href="#">Privacy Policy</a> , 
     including our <a href="#">Cookie Use</a> .</div> 
     <button id="signupbtn" onclick="signup()">Create Account</button> 
     <span id="status"></span> 
    </form> 
    </div> 
    <!-- .signup --> 

    <!-- .footer --> 
    <footer class="footer"> 
    <div id="legal"><a class="legal" href="JavaScript:newPopup('Login/Legal/Terms.php');">Terms</a> | <a class="legal" href="JavaScript:newPopup('Login/Legal/Privacy.php');">Privacy</a></div> 
    <div id="font"><a class="font">P'folio © 2014</a></div> 
    </footer> 
    <!-- .footer --> 
</div> 
<!-- .wrapper --> 
</body> 
</html> 

爲什麼我的註冊和登錄代碼不起作用?

+0

登錄與註冊正在檢查相同的條件:'isset($ _ POST [「u」])' –

+0

@JustinIurman請你可以展開 – user3276488

回答

0

對於註冊和登錄不使用AJAX。這個比較好。您可以使用經典 JavaScript預先檢查用戶名和密碼的正確設置,但不要將AJAX用於自己的登錄和註冊過程。

此外,將兩個進程拆分到不同的地方也很好。我從來沒有見過任何網站登錄和註冊將從同一個地方完成 - 並通過AJAX。

對於用戶名檢查你可以使用命令

preg_match('/^[^0-9][a-z0-9]{3,16}/i', $_POST['username']); 

來檢查,如果用戶名不以數字開頭,並且長度至少爲3升的跡象,最長不超過16升的跡象。它也允許小寫字母和數字。