2015-06-11 65 views
0

我有一個login.php代碼來檢查用戶是否存在,也是一個AJAX調用,我有一個按鈕標籤的形式;如果我使用type='submit' PHP的作品,但不是AJAX;如果我使用type='button' AJAX工作,但不是PHP。PHP的帖子不採取按鈕標籤的值

我也試圖與輸入,但它是相同的:

<?php 
    if (isset($_POST['enviar'])) { 
       include "php/conexion.php"; 
       try { 


       $user = $_POST['user']; 
       $pass = $_POST['pass']; 


       $sql = 'SELECT count(user_name) FROM user WHERE user_name=:usuario AND password=:password'; 
       $query = $conexion->prepare($sql); 
       $query->bindParam(":usuario", $user); 
       $query->bindParam(":password", $pass); 
       $query->execute(); 


       if($res = $query->fetch()) 
       { 
         header("refresh:0.1;url=main.php"); 
         }else{ 
        echo"User or Password incorrect"; 
       } 

      } catch (Exception $ex) { 
       $a= $ex->getMessage(); 
       var_dump($a); 
       die(); 
      } 
     } 

     ?> 


      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 
      <script type="text/javascript"> 
      function realizaProceso(user,pass){ 
      $.ajax({ 
        data: {"user" : user, "pass": pass}, 
        url: 'php/functions_sql.php', 
        type: 'post', 
        success: function(output) { 
         } 
      }); 
    } 
      </script> 

    <div class="container"> 
    <div class="login-container"> 
      </div> 
      <div class="form-box"> 
       <form action="login.php" method="post"> 
        <input name="user" id="user" type="text" placeholder="User"> 
        <input type="password" name="pass" id="pass" placeholder="Password"> 
        <button class="btn btn-info btn-block login" type="button" id="enviar" name="enviar" onclick="realizaProceso($('#user').val(),$('#pass').val());" >Login</button> 
       </form> 
      </div> 
     </div> 

</div> 
</div> 
+1

將PHP代碼移到另一個文件,然後用Ajax調用它。 –

+0

那我必須做2個Ajax調用? –

+0

檢測是否使用AJAX進行調用,並作出相應的響應:http://davidwalsh.name/detect-ajax – schnauss

回答

0

您需要防止您的形式從提交,讓你的AJAX調用執行。做如下修改代碼:

onclick="realizaProceso($('#user').val(),$('#pass').val()); return false;"

return false;語句告訴HTML表單「一站式」的形式提交的執行,讓你而不是執行自定義操作,如AJAX表單提交。這就是爲什麼你的表單似乎失敗時使用type='submit'

您的AJAX調用也似乎是調用'php/functions_sql.php'。你確定你想讓你的AJAX調用看起來像(根據它的標題)一個包含SQL相關方法的Helper類嗎?

我擔心你發佈到'functions_sql.php',這可能不是爲了讀取這些變量而設計的。

if (isset($_POST['enviar'])) { ... }中的所有內容似乎都是登錄腳本(並讀取變量)。您似乎將「異步」(AJAX)和「非異步」用法混合在一起,這就是您感到困惑的原因。

此舉代碼放到一個單獨的文件(login_auth.php,例如),然後換你的AJAX調用去跟它具體的($.ajax({ ... , url: 'login_auth.php'}

+0

是的它包含sql方法,但我需要傳遞一些變量到這個文件,這是我知道的方式,喲喲以另一種方式給我建議嗎? –

+0

我已將我的評論回覆移至我的回答中 – 1owk3y

+0

那麼這是工作^ __ ^我會改變它到另一個文件,謝謝 –

0

的PHP檢查$_POST['enviar'],但AJAX調用不提出,在data:選項。用途:

$.ajax({ 
    data: { user: user, pass: pass, enviar: 1 }, 
    url: 'php/functions_sql.php', 
    type: 'post', 
    success: function(output) { 
    } 
}); 
+0

它不會調用ajax :( –

+0

您是使用'type =「按鈕」還是'type =「submit 「'?如果使用'type =」submit「',那麼點擊按鈕會執行一個正常的提交,除非你執行'event.preventDefault()',這會重新加載頁面並且AJAX丟失 – Barmar

+0

no我正在使用'鍵入=「按鈕」' –

0

代替button,使用<input type='button' ....

它具有成爲一個可以正常工作的輸入字段跨瀏覽器