2017-04-07 39 views
0

我很困惑,我甚至不能很好地解释我的问题。当我点击我的注册按钮时,它会重定向到index.php。它应该检查错误,而不是重定向或类似的东西。我试过从我的代码中删除错误,更改ID,更改CSS属性。添加和删​​除JQuery。我真的不知道如何解决这个问题。为什么我的注册按钮重定向到index.php?

编辑

在成功的功能,我试图删除window.open(),它仍然重定向到index.php#check_signup点击。我将在那里保留这一行,以显示原始代码假设的样子。该代码不会被重定向,因为代码尚未达到成功文本。

假设发生的事情是,代码通过AJAX通过check_signup.php检查错误。如果代码全部正确执行,此页面将返回单词“success”。 script.js中的代码然后在重定向到index.php之前检查单词“success”。

我尝试删除ID #check_signup并且页面没有重定向。当我尝试点击#check_signup时发出页面警报时,它不起作用。因此,在点击元素注册之前,页面正在重定向。

这是代码:

的script.js

$(document).ready(function() { 

    /* Sign Up Page */ 

    $("#check_signup").click(function() { 
    var username_signup = $("#signup_container input[key='username_signup']").val(); 
    var email_signup = $("#signup_container input[key='email_signup']").val(); 
    var password_signup = $("#signup_container input[key='password_signup']").val(); 

    $.ajax({ 
    type: "POST", 
    url: "check_signup.php", 
    data: {username: username_signup, email: email_signup, password: password_signup}, 
    success: function(data){ 
    if(data.indexOf("Success")) { 
     window.open("index.php","_self"); 
    } else { 
    $("#signup_container").html(data); 
    } 
    } 
}); 

    }); 
}); 

signup.php

<?php 

    require "connect.php"; 

?> 

<!DOCTYPE html> 
<html> 
    <head> 
    <title> Website </title> 

    <!-- CSS Files --> 
    <link href="https://fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet"> 
    <link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet"> 
    <link rel="stylesheet" href="css/styles.css"> 

    <!-- JS Files --> 
    <script src="http://code.jquery.com/jquery-1.11.1.min.js"></script> 
    <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.0/js/bootstrap.min.js"></script> 
    <script src='js/jquery.countdown.js'></script> 
    <script src='js/script.js'></script> 
    </head> 

    <body> 

    <!-- Navigation --> 
    <nav class="navbar navbar-default navbar-fixed-top"> 
    <div class="container"> 

     <div class="navbar-brand"> 
      <a href="index.php"> <img src="http://logos-download.com/wp-content/uploads/2016/06/Udemy_logo.png" class="img-responsive" id="logo"> </a> 
     </div> 

     <div class="pull-right"> 
       <a href='login.php'> <button type="button" class="btn btn-danger" id="login_button">Login</button> </a> 
     </div> 

    </div> 
</nav> 
    <!-- End of Navigation col-md-3 portfolio-item --> 


<div class="container"> 
    <div class="row vertical-offset-100"> 
     <div class="col-md-4 col-md-offset-4" id='login_form'> 
      <div class="panel panel-default"> 
       <div class="panel-heading"> 
        <h3 class="panel-title">Join for Free</h3> 
       </div> 
       <div class="panel-body" id='signup_container'> 
        <form> 
        <fieldset> 
         <div class="form-group"> 
          <input class="form-control" placeholder="Username" name="username" type="text" key='username_signup' autocomplete="off"> 
         </div> 

         <div class="form-group"> 
          <input class="form-control" placeholder="Email" name="email" type="text" key='email_signup' autocomplete="off"> 
         </div> 

         <div class="form-group"> 
          <input class="form-control" placeholder="Password" name="password" type="password" value="" key='password_signup' autocomplete="off"> 
         </div> 

         <input class="btn btn-lg btn-primary btn-block" type="button" value="Sign Up Now" id='check_signup'> 
        </fieldset> 
        </form> 
       </div> 
      </div> 
     </div> 
    </div> 
</div> 
<!-- End of Login Page --> 

check_signup.php

<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script> 
    <script src='js/script.js'></script> 

<?php 

require "connect.php"; 

error_reporting(0); 

// Variables 
$username = $_POST["username"]; 
$email = $_POST["email"]; 
$password = $_POST["password"]; 
$md5_password = md5($password); 

// Username 

echo " <form> 
        <fieldset>"; 

if(strlen($username) < 3) { 
    echo "<div class='form-group has-error'> 
    <label class='control-label' for='inputError1'>Username requires 3 characters</label> 
    <input type='text' class='form-control' id='inputError1' key='username_signup' value='$username'> 
</div>"; 
} else { 
    $username_count++; 
} 

if(strlen($username) > 25) { 
    echo "<div class='form-group has-error'> 
    <label class='control-label' for='inputError1'>The username is limited to 25 characters</label> 
    <input type='text' class='form-control' id='inputError1' value='$username' key='username_signup'> 
</div>"; 
} else { 
    $username_count++; 
} 

$check_user = $db->query("SELECT * FROM users WHERE username='$username'"); 
$num_user = $check_user->num_rows; 

if($num_user == 0) { 
    $username_count++; 
} else { 
    echo "<div class='form-group has-error'> 
    <label class='control-label' for='inputError1'>Username Taken </label> 
    <input type='text' class='form-control' id='inputError1' value='$username' key='username_signup'> 
</div>"; 
} 

if($username_count == 3) { 
    echo "<div class='form-group'> 
          <input class='form-control' placeholder='Username' name='username' type='text' id='username_signup' value='$username' key='username_signup'> 
         </div>"; 
} 

// End of Username 

// Email 

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { 
    // invalid emailaddress 
    echo "<div class='form-group has-error'> 
    <label class='control-label' for='inputError1'>Invalid Email</label> 
    <input type='text' class='form-control' id='inputError1' value='$email' key='email_signup'> 
</div>"; 
} else { 
    $email_count++; 
} 

$check_email = $db->query("SELECT * FROM users WHERE email='$email'"); 
$num_email = $check_email->num_rows; 

if($num_email == 0) { 
    $email_count++; 
} else { 
    echo "<div class='form-group has-error'> 
    <label class='control-label' for='inputError1'>Email Taken</label> 
    <input type='text' class='form-control' id='inputError1' value='$email' key='email_signup'> 
</div>"; 
} 

if($email_count == 2) { 
    echo "<div class='form-group'> 
          <input class='form-control' placeholder='Username' name='username' type='text' id='username_signup' value='$email' key='email_signup'> 
         </div>"; 
} 

// End of Email 

// Password 

if(strlen($password) < 6) { 
    echo "<div class='form-group has-error'> 
    <label class='control-label' for='inputError1'>Password requires 6 characters</label> 
    <input type='password' class='form-control' id='inputError1' value='$password' key='password_signup'> 
</div>"; 
} else { 
    $password_count++; 
    echo "<div class='form-group'> 
          <input class='form-control' placeholder='Password' name='password' type='password' id='password_signup' value='$password' key='password_signup'> 
         </div>"; 
} 

echo "<input class='btn btn-lg btn-primary btn-block' type='button' value='Sign Up Now' id='check_signup'> 
        </fieldset> 
        </form>"; 

// End of Password 

if($username_count == 3 && $email_count == 2 && $password_count == 1) { 
    $db->query("INSERT INTO users VALUES('','$username','$email','$md5_password')"); 

    $findID = $db->query("SELECT * FROM users WHERE username='$username' AND password='$md5_password'"); 
    $fetchID = $findID->fetch_object(); 
    $real_id = $fetchID->id; 

    session_start(); 
    $_SESSION["username"] = $real_id; 

    echo "Success"; 

} 

?> 

我知道这是很多代码。我已经从字面上尝试了我能想到的一切。我相信这是一个简单的错误,但我不知道如何解决这个问题。我试图修复代码来检查错误,而不是重定向到index.php。

+0

如果您的代码不正确地重定向到index.php,那么第一步是搜索代码以查找对index.php的任何引用。你觉得'window.open(“index.php”,“_ self”);'做了什么? – nnnnnn

+0

@nnnnnn我已经删除了对index.php的引用,它仍然重定向到index.php。我不知道为什么... – user6902601

+0

@SumanDey任何帮助表示赞赏。我的头痛得很厉害:) – user6902601

回答

1

我之前发布了这个帮助其他人。所以,也许这会让你走上正确的道路......当你认为合适的时候用它来修补它,我希望它有帮助! :-)

注意几件事: 1.我没有使用表格标签。这消除了表单的正常操作,并通过某些浏览器重定向问题。这也意味着你必须自己处理重定向。 2.验证字段在PHP中完成,并且在访问任何数据库之前也完成。这有助于限制对数据库的调用并节省资源。 3.我正在使用mysqli和准备好的语句。这是出于安全目的,并且在编码ANYTHING时应该是标准做法。 4.我正在查看大于和小于相同的字符数。保持您的代码清洁。 5.我完成他们后,我正在关闭我的连接。这是为了安全和在服务器上节省资源。这是最好的做法。 6.我在我的代码中使用异常,在必要时抛出异常。这有助于通过限制if/else if/else循环的次数来保持代码清洁。

//////////////// FORM HTML //////////////// 

<div class="form" id="signupform"> 

    <fieldset> 

     <div class="form-group"> 

      <input class="form-control" placeholder="Username" id="user" type="text" key='username_signup' autocomplete="off"> 

     </div> 

     <div class="form-group"> 

      <input class="form-control" placeholder="Email" id="email" type="email" key='email_signup' autocomplete="off"> 

     </div> 

     <div class="form-group"> 

      <input class="form-control" placeholder="Password" id="pass" type="password" key='password_signup' autocomplete="off"> 

     </div> 

     <input class="btn btn-lg btn-primary btn-block" type="button" value="Sign Up Now" id='signupbutton'> 

    </fieldset> 

</div> 



//////////////// JQUERY/AJAX CODE //////////////// 

<script> 

    // Call form submit from on click action 
    $('#signupbutton').on('click', function(e){ 

     // Prevent onclick even from propagating 
     e.stopPropagation(); 

     // Set variables from form inputs 
     var user = $("#user").val(), 
      email = $('#email').val(), 
      pass = $('#pass').val(); 

     // Initiate ajax call to external script 
     $.ajax({ 
      type: 'POST', 
      url: 'postpage.php', 
      data: { 
       user : user, 
       email : email, 
       pass : pass 
      }, 
      success: function(data){ 
       if(data.indexOf("Success")) { 

        // Successful response 
        var successmessage = data; 
        alert(successmessage); 

       } 
       else { 

        // Error response 
        var errormessage = data; 
        alert(errormessage); 

       } 
      } 
     }); 

    }); 

</script> 



//////////////// PAGE TO POST AJAX TOO //////////////// 

<? 

# Start your try/catch statement to check for thrown exceptions (error messages) 
try { 

    # Check for $_POST to initiate script 
    if(!empty($_POST)){ 

     # Loop through each post value 
     foreach($_POST as $key => $val){ 

      # Check if each post value is empty and throw and exception and if not set it as a variable 
      if(!empty($val)){ 

       ${$key} = trim($val); 

      } 

      else { 

       # Throw Exception (error message) 
       throw new Exception("Error, missing fields."); 

      } 

     } 

     # Check if $user is alphanumeric and is at least 3 to 25 characters 
     if(!ctype_alnum($user) || strlen($user) < 3 || strlen($user) > 25){ 

      # Throw Exception (error message) 
      throw new Exception("Error, username must be alphanumeric and at least 3 to 20 characters."); 

     } 

     # Check if $email is valid 
     if(filter_var($email, FILTER_VALIDATE_EMAIL)){ 

      # Throw Exception (error message) 
      throw new Exception("Error, invalid email."); 

     } 

     # Check if $pass is at least 6 to 25 characters 
     if(strlen($pass) < 6 || strlen($pass) > 25){ 

      # Throw Exception (error message) 
      throw new Exception("Error, password must be at least 6 to 25 characters."); 

     } 

     # Connection data 
     $servername = ""; 
     $username = ""; 
     $password = ""; 
     $dbname = ""; 

     # Make MYSQLI Connection 
     $mysqli = new mysqli($servername, $username, $password, $dbname); 

     if ($mysqli->connect_errno) { 

      # Throw connections error message 
      throw new Exception("Error, could not connect to database."); 

     } 

     # Prepare your query for execution 
     $stmt = $mysqli->prepare("SELECT `username`,`email` FROM `users` WHERE `username` = ? OR `email` = ?"); 

     # Bind the two parameters to your statement 
     $stmt->bind_param("ss", $user, $email); 

     if ($stmt === false) { 

      # Throw Exception (error message) 
      throw new Exception("Error, could not process data submitted."); 

     } 

     # Excecute your query 
     $stmt->execute(); 

     if ($stmt === false) { 

      # Throw Exception (error message) 
      throw new Exception("Error, count not execute database query."); 

     } 

     # Bind the results to a variable 
     $stmt->bind_result($users); 

     # Fetch your data from results 
     while($stmt->fetch()){ 

      $foundusers = $users; 

     } 

     if ($stmt === false) { 

      # Throw Exception (error message) 
      throw new Exception("Error, could not get results from database."); 

     } 

     # Set counters for username and emails found 
     $usernames = 0; 
     $emails = 0; 

     # Loop through each database entry retrieved and check for matching usernames and emails 
     foreach($foundusers as $thisuser){ 

      if(!empty($thisuser["email"]) && $thisuser["email"] == $email){ 

       # Add 1 to the $emails counter 
       $emails++; 

      } 

      if(!empty($thisuser["username"]) && $thisuser["username"] == $user){ 

       # Add 1 to the $usernames counter 
       $usernames++; 

      } 

     } 

     # close your statement 
     $stmt->close(); 
     $thread = $mysqli->thread_id; 
     $mysqli->kill($thread); 


     #Check if matching usernames OR emails were found 
     if($usernames > 0 || $emails > 0){ 

      # Check if $usernames and $emails counter is great than 0 
      if($usernames >= 1 && $emails >= 1){ 

       # Throw Exception (error message) 
       throw new Exception("Error, username & email are taken."); 

      } 

      # Check if $usernames counter is great than 0 
      if($usernames >= 1) { 

       # Throw Exception (error message) 
       throw new Exception("Error, username is taken."); 

      } 

      # Check if $emails counter is great than 0 
      if($emails >= 1) { 

       # Throw Exception (error message) 
       throw new Exception("Error, email is taken."); 

      } 

     } 

     # Make MYSQLI Connection 
     $mysqli = new mysqli($servername, $username, $password, $dbname); 

     if ($mysqli->connect_errno) { 

      # Throw connections error message 
      throw new Exception("Error, could not connect to database."); 

     } 

     # Prepare your query for execution 
     $stmt = $mysqli->prepare("INSERT INTO `users` (`username`, `email`, `password`) VALUES (?, ?, ?)"); 

     # Bind the two parameters to your statement 
     $stmt->bind_param("sss", $user, $email, $pass); 

     if ($stmt === false) { 

      # Throw Exception (error message) 
      throw new Exception("Error, could not process data submitted."); 

     } 

     # Excecute your query 
     $stmt->execute(); 

     if ($stmt === false) { 

      # Throw Exception (error message) 
      throw new Exception("Error, count not execute database query."); 

     } 

     # close your statement 
     $stmt->close(); 
     $thread = $mysqli->thread_id; 
     $mysqli->kill($thread); 

     # Echo success message 
     echo "Success, account hase been created!"; 

    } 
    else { 

     # Throw Exception (error message) 
     throw new Exception("Error, could not initiate script."); 

    } 

} 

# Catch any exceptions thrown and output the error 
catch(Exception $e) { 

    # Check if statement is still open and close it 
    if($stmt){ 
     $stmt->close(); 
     $thread = $mysqli->thread_id; 
     $mysqli->kill($thread); 
    } 

    # Echo success message 
     echo $e->getMessage(); 

} 
0

的preventDefault();`这样

$("#check_signup").click(function(event) { 
    event.preventDefault(); 
    //rest of your code 
    ... 
} 

希望这将帮助你click事件之后。

+0

感谢您的回答。它现在不重定向,但它现在不会做任何事情...... – user6902601

+0

有问题的按钮是'type =“按钮”',所以它没有任何默认行为来取消。 – nnnnnn

+0

他通过ajax提交表单,因此preventDefault不会为他做任何事情......从技术上讲,

标记是无用的和不相关的。 –