перенаправление на домашнюю страницу с использованием php после отправки формы с помощью ajax

#php #ajax #forms

#php #ajax #формы

Вопрос:

Я впервые использую ajax с php. У меня есть форма регистрации, в которой я проверяю, существует ли введенное имя пользователя уже в базе данных mongodb. Если это произойдет, я покажу ошибку на своей странице, иначе я хочу перенаправить на свою index.php и начните сеанс .

РЕДАКТИРОВАТЬ: я полностью изменил свой скрипт, теперь я успешно перенаправляю. Предупреждение AngularJS исчезло!

register.php куда я отправляю свои данные для проверки, ОБНОВЛЯЕТСЯ!

  $("#registerForm").submit((e)=>{
            e.preventDefault();
            var uname = $("#username").val();
            var fname = $("#firstname").val();
            var lname = $("#lastname").val();
            var addr = $("#address").val();
            var pw = $("#password").val();
            var sub = $("#submitRegister").val();
            var errorSubmit = $("#checkSubmitError").val();
            $.ajax({
              type:'POST',
              data:{username:uname,firstname:fname,
                    lastname:lname,address:addr, password:pw ,
                    submitRegister:sub , checkSubmitError: errorSubmit },
              url:'insertUser.php',
              success:(data)=>{
                if(data == 'success'){
                  window.location.href = '../php/index.php';
                }else if(data =='failed'){
                    $("#username").val(""); //empty username field
                    var submitErr = $("#checkSubmitError");
                    var isHidden =submitErr.hasClass("hide");
                    if(isHidden){
                      submitErr.removeClass("hide");
                      submitErr.addClass("show");
                    }else{
                      submitErr.removeClass("hide");
                      submitErr.addClass("show");
                    }
                }
              },
              error: (xhr)=>{
                alert("error");
              },

            });
          });



 <body>
       <form action = "insertUser.php" method= "POST" id ="registerForm" name= "regForm">
           ...my inputs with ids 
          <!-- button that submits form  -->
          <button type="submit" class="btn btn-success" id = "submitRegister" name="submit" 
           >Submit
          </button> 
        <!--hidden error I display if username exists --> 
        <span id ="checkSubmitError" class= "hide text-danger"> </span>
       </form>
  </body>
 

Затем в моем insertUser.php где я проверяю, существует ли имя пользователя в моей обновленной базе данных!

 <?php

  require '../vendor/autoload.php';


  if(isset($_POST['submitRegister'])){
    $m = new MongoDBClient("mongodb://127.0.0.1/");
    $db = $m ->ECommerce;
  
    $collection = $db->users;
    //check if username already exists 
    $alreadyExists = false;
    $check = $collection->find(array('userName'=>$_POST['username']));
    $count=0;
    if(is_array($check) || is_object($check)){
      foreach($check as $i){ 
        $count= $count 1;
      }
    }
    if($count==0){
   
      $document = array(
        "firstName" => $_POST['firstname'],
        "lastName" => $_POST['lastname'],
        "address" => $_POST['address'],
        "userName" => $_POST['username'],
        "password" => password_hash($_POST['password'] ,PASSWORD_DEFAULT)
      );
    
    
      $collection->insertOne($document); //inserts succesfully 
      $response = "success";
      echo $response;
      exit();
    
      
    }else{
      $alreadyExists = true;
      $response = "failed";
      echo $response;
      exit();
    }

  
  }
  

?>
 

Комментарии:

1. После a header('Location:... у вас всегда должен быть exit; as header() , который отправляет заголовок в браузер, он не завершает выполнение скрипта. Не уверен, что именно это вызывает вашу проблему в этом случае, но она все равно должна быть там

2. @RiggsFolly не сработал, все еще пытался загрузить AngluarJS более одного раза, и я остаюсь на странице регистрации

3. Насколько я знаю, .load() — выполняет запрос GET, а не POST-запрос. Это должен быть запрос POST, поэтому вы можете переосмыслить метод и $.ajax() $.post() вместо этого использовать or .

4. @vasilis есть ли еще вопрос после вашего редактирования? Если нет, пожалуйста, отправьте ответ на решение и примите его как хорошее решение, пожалуйста.

5. @PedroFerreira Я могу через 2 дня

Ответ №1:

Код, который я отредактировал в моем примере, теперь работает отлично. Все кончено . Что я узнал :

$ajax лучше, чем $load метод перенаправления. Чтобы вернуть данные success() , которые будут работать с вами echo $data в php-скрипте exit() .

Это были ключевые точки здесь .