【问题标题】:How to POST values to two different PHP pages如何将值发布到两个不同的 PHP 页面
【发布时间】:2019-06-28 19:48:51
【问题描述】:

我已经使用 PHP 和 MySQL 创建了一个登录页面,当我登录时,它会将用户登录详细信息发布到 LoginCheck.php 页面,如果它们不匹配,它将检查这些值与数据库中的值, 用户被返回到 login.php 页面,但如果他们是正确的,他们将被带到 home.php 页面。我现在希望能够在 home.php 页面上再次访问这些登录详细信息,但我找不到通过两个页面或两个不同页面发布的方法?当我尝试调用它们时,POST vales 在 home.php 页面上显示为空白。

下面的代码说明了我如何通过 HTML 将用户登录详细信息发布到 LoginCheck.php 页面,

<form method ="POST" action="LoginCheck.php">

<div class="form-input">

    <b> User Name <b><br />
    <input type="text" name="user" id="user" />
    <br />

    <b> Password <b><br />
    <input type="text" name="password" id="password" />
    <br />

<input type="submit" type="submit" value="Login" class="btn-login"/>

我也试过 AJAX 来传递这个值,但它也返回同样的错误

<script type ="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script type ="text/javascript">

    $(document).ready(function(){

        $('#submit').click(function(){
            alert("is working");
            var user = $('#user').val();
            var password = $('#password').val();

            var userData = 'user=' + user + '&password=' + password;            
            $.ajax({
                type: "POST",
                url:'home.php',
                data: userData,
                success: function(){
                    alert("has passed data");
                }
        });

    });
});

</script>

理想情况下,我希望在加载时从 LoginCheck 页面发布值,因为该页面对用户仅可见几秒钟。

当我通过 Home.php 中的 POST 调用它们时,我收到错误:通知:未定义索引:用户和通知:未定义索引:密码

【问题讨论】:

  • 您再次访问用户登录详细信息的目的是什么?使用 POST 变量不是这里的方法,因为它们会随着每个新请求而被删除,也许看看PHP Sessions
  • 您的 LoginCheck.php 页面接收 $_POST 数据。好的,它会检查数据库,如果没问题,我假设您使用 JavaScript 将用户转发到 Home.php。您可以在 GET (Home.php?user=someguy) 中添加值。但是使用会话要好得多,因为没有有效数据的通信,只有会话 ID。
  • 我想从数据库中提取更多数据,WHERE UserLogin = user AND UserPassword = password 等等,所以我可以提取他们的信息供他们查看
  • 然后在 Home.php 中执行此操作。不要在 LoginCheck.php 中执行此操作并传递该信息。将其保存在服务器中,不要相信您的客户端会从其浏览器向您发送有效数据(阅读黑客攻击!)。
  • 请不要通过破坏您的帖子为他人增加工作量。通过在 Stack Exchange (SE) 网络上发帖,您已在 CC BY-SA 3.0 license 下授予 SE 分发内容的不可撤销的权利(即无论您未来的选择如何)。根据 SE 政策,分发非破坏版本。因此,任何破坏行为都将被撤销。请参阅:How does deleting work? …。如果允许删除,则在帖子下方左侧有一个“删除”按钮。您可能需要使用浏览器,而不是移动应用程序。

标签: php mysql post php-7


【解决方案1】:

我同意 GrumpyCrouton 的评论。发布到多个页面很难让我头晕目眩。 . .用户的浏览器会分成两部分吗?另一种方法是将 POST 到您的 LoginCheck.php,然后该页面会将 $_POST 数据保存到一个或多个 $_SESSION 值,以便后续页面可以使用它们。

if ($authenticated) $_SESSION['user'] = $_POST['user'];

【讨论】:

    【解决方案2】:

    正如其他人所说,发布到两个不同的页面并不是在登录检查后检索数据的方式。我们通常使用$_SESSION。阅读DOCS

    话虽如此,我不知道您使用的是 PDO 还是 MySQli,所以我将仅使用 MySQli 为例。

    这是简单/干净的方法:

    form.php

    <form method ="POST" action="LoginCheck.php">
    <div class="form-input">
        <b> User Name <b><br />
        <input type="text" name="user" id="user" />
        <br />
    
        <b> Password <b><br />
        <input type="text" name="password" id="password" />
        <br />
    <input type="submit" type="submit" value="Login" class="btn-login"/>
    </form>
    

    loginCheck.php

        if (!empty( $_POST )) {
        if ( isset( $_POST['user'] ) && isset( $_POST['password'] ) ) {
    
        //post variables
        $user = $_POST['user'];
        $password = $_POST['password'];
    
        //check the database if there are records matching user info
        $stmt_invalidatepass = $conn->prepare("SELECT password,id FROM users 
        WHERE username=? ORDER BY dateCreated DESC LIMIT 1");
        $stmt_invalidatepass->bind_param("s",$user); 
        $stmt_invalidatepass->execute(); 
        $resultvvvid = $stmt_invalidatepass->get_result();
        $rowvalida = $resultvvvid->fetch_assoc();
        $checkPassword = $rowvalida['password'];
    
        //verify password
        $hash1_verified = password_verify($password, $checkPassword);
    
        if( ($hash1_verified==false)){
    
        //oops no result redirect to login.php
    
        }else{
    
        //found user
        //set in session
        $_SESSION['user_id'] = $rowvalida['id'];
    
        //redirect to home.php
        header("Location: home.php");
        exit();
        }
    
    }
    }
    

    home.php

    // Always start this first
    session_start();
    
    if (!isset($_SESSION['user_id'])) {
    
        header("Location: login.php");
        exit();
    
    } else {
    
    //do user queries here
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-12
      • 2015-11-18
      • 2011-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多