PHP 帖子不采用按钮标签的值


PHP post does not take the value of a button tag

我在login.php有检查用户是否存在的代码,还有一个 AJAX 调用,我有一个按钮标签的形式;如果我使用 PHP type='submit'但 AJAX 不工作;如果我使用type='button' AJAX 可以工作,但 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>

您需要阻止表单提交,以允许执行 AJAX 调用。对代码进行以下更改:

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

return false;语句告诉 HTML 表单"停止"表单提交的执行,以允许您改为执行自定义操作,例如 AJAX 表单提交。这就是为什么您的表单在使用时似乎失败的原因type='submit'

您的 AJAX 调用似乎也在调用"php/functions_sql.php"。您确定要 AJAX 调用看似(基于其标题)包含 SQL 相关方法的帮助程序类吗?

我担心您发布到"functions_sql.php",这可能不是为了读取这些变量而设计的。

if (isset($_POST['enviar'])) { ... }中的所有内容似乎都是登录脚本(并读取变量)。您似乎将"异步"(AJAX)和"非异步"用法混合在一起,这就是您感到困惑的原因。

将该代码移动到单独的文件中(例如,login_auth.php),然后更改 AJAX 调用以专门与其通信($.ajax({ ... , url: 'login_auth.php'}

PHP 检查$_POST['enviar'],但 AJAX 调用没有将其放在data:选项中。用:

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

而不是button,使用<input type='button' ....

它必须是一个输入字段才能跨浏览器正常工作