【问题标题】:How to show search result using form in another page如何在另一个页面中使用表单显示搜索结果
【发布时间】:2022-01-14 17:28:26
【问题描述】:

当用户搜索他的手机号码时。或搜索表单中的 id,然后他的所有数据(信用历史、个人详细信息)显示在 homepage.php 上

但主页包含同一位置的信用记录和个人详细信息。并且信用记录有多个记录,就像我们的银行存折一样。

现在我希望当用户点击主页上提到的 LINK 时,它会将所有信用记录转发到一个新页面 link1.php,它只显示信用记录。

我成功地使用 $_session 转发了新页面 link1.php 上的信用记录,但我无法转发使用主页上的搜索表单搜索到的所有信用记录。

例如。当用户搜索他的手机号码时。 3333 在 1-form.php 上,它会将用户重定向到 homepage.php,并附上他的个人详细信息(姓名、手机等) 并且信用记录有多个记录(例如或银行存折有多个信用主条目)

在主页用户看到一个将用户重定向到link1.php的链接,他只检查他的信用记录已经在homepage.php中获取 . 但是当用户点击链接时,他只看到 link1.php 中的最后一条记录 他想使用 session 或任何其他方法查看他在 link1.php 上的所有历史记录。

我的配置如下。 1-form.php

<?php
session_start();
?>
<!DOCTYPE html>
<html>
  <body>
    <!-- (A) SEARCH FORM -->
    <form method="post" action="homepage.php">
      <h1>SEARCH FOR USERS</h1>
      <input type="text" name="username" required/>
      <input type="submit" value="Search"/>
    </form>

    <table>
    

2-search.php

<?php
// (A) DATABASE CONFIG - CHANGE TO YOUR OWN!
define("DB_HOST", "localhost");
define("DB_NAME", "test2");
define("DB_CHARSET", "utf8");
define("DB_USER", "root");
define("DB_PASSWORD", "");

// (B) CONNECT TO DATABASE
try {
    $pdo = new PDO("mysql:host=".DB_HOST.";charset=".DB_CHARSET.";dbname=".DB_NAME,
                    DB_USER, DB_PASSWORD, 
                    [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
                     PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
                    ]
            );
} catch (Exception $ex) { 
    exit($ex->getMessage()); 
}

// (C) SEARCH
$stmt = $pdo->prepare("SELECT * 
                        FROM `table1` 
                        WHERE `Id` LIKE ? 
                        OR `Mobile` LIKE ?");
$stmt->execute(["%".$_POST["username"]."%", 
                "%".$_POST["username"]."%"]);
$results = $stmt->fetchAll();
if (isset($_POST["ajax"])) { 
    echo json_encode($results); 
}
$pdo->connection = null;
$pdo=null;

try {
    $pdo2 = new PDO("mysql:host=".DB_HOST.";charset=".DB_CHARSET.";dbname=".DB_NAME,
                    DB_USER, DB_PASSWORD,
                    [
                      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
                      PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
                    ]
            );
} catch (Exception $ex) { 
    exit($ex->getMessage()); 
}

// (C) SEARCH
$stmt2 = $pdo2->prepare("SELECT * 
                        FROM `table2` 
                        WHERE `Id` LIKE ? 
                        OR `Paymobile` LIKE ?");
$stmt2->execute(["%".$_POST["username"]."%", 
                "%".$_POST["username"]."%"]);
$results2 = $stmt2->fetchAll();
if (isset($_POST["ajax"])) { 
    echo json_encode($results2); 
}

$pdo2->connection = null;
$pdo2=null;

homepage.php

<?php
session_start();
?>

<?php
// (B2) DISPLAY RESULTS 
?>
<div class="card-body p-0">
    <div class="table-responsive">
        <table class="table table-hover mb-0">
            <thead>
                <tr>
                    
                    <th>Name</th>
                    <th>Mobile</th>
                    <th>Email</th>
                </tr>
            </thead>
            <tbody>
                <tr>
    </div>
<?php
// (B) PROCESS SEARCH WHEN FORM SUBMITTED
if (isset($_POST["username"])) {
    // (B1) SEARCH FOR USERS
    require "2-search.php";
?>
<?php
      // (B2) DISPLAY RESULTS
    if (count($results) > 0) { 
        foreach ($results as $r) {
?>  
                                            
                    <td><?php echo $r['Name'] ;?></td>
                    <td><?php echo $r['Mobile'] ;?></td>
                    <td><?php echo $r['Email'] ;?></td> 
                </tr>
<?php
        }
    } else { 
        echo "No results found"; 
    }
}
?>

                    </tbody>
                </table>
            </div>
        </div>
    </div>
</div>


<div class="card-body p-0">
    <div class="table-responsive">
        <table class="table table-hover mb-0">
            <thead>
                <tr>
                    
                    <th>Name</th>
                    <th>Mobile</th>
                    <th>Email</th>
                </tr>
            </thead>
            <tbody>
                <tr>
        </div>
<?php
// (B) PROCESS SEARCH WHEN FORM SUBMITTED
if (isset($_POST["username"])) {
    // (B1) SEARCH FOR USERS
?>
<?php
    // (B2) DISPLAY RESULTS
    if (count($results2) > 0) { 
        foreach ($results2 as $r2) {
?>  
                                            
                    <td><?php echo $r2['Month'] ;?></td>
                    <td><?php echo $r2['Amount'] ;?></td>
                    <td><?php echo $r2['Date'] ;?></td> 
                </tr>
<?php
        }
    } else { 
        echo "No results found"; 
    }
}
?>
<?php
$_SESSION['r2m'] = $r2['Month'];
$_SESSION['r2a'] = $r2['Amount'];
$_SESSION['r2d'] = $r2['Date'];
?>
                    </tbody>
                </table>
                <a href="link1.php">Click here</a>
            </div>
        </div>
    </div>
</div>
</table>
</html>

link1.php

<?php
session_start();
?>
    <table>
        <tr>
            <th>Month</th>
            <th>Amount</th>
            <th>Date</th>
        </tr>
        <tr>                  
            <td><?php echo $_SESSION['r2m'] ;?></td>
            <td><?php echo $_SESSION['r2a'] ;?></td>
            <td><?php echo $_SESSION['r2d'] ;?></td>
        </tr>
    </table>

【问题讨论】:

  • 这里有几件事。 1. 你的$_SESSION['r2m'] = $r2['Month']; 应该在foreach 中,否则它只会使用最后一个值(如果你没有得到任何结果,则为未定义的变量$r2 抛出错误)。 2. 它们也应该是$_SESSION['r2m'][] = $r2['Month'];(你需要将它推送到一个数组中,否则你只会覆盖该值)。但是,我只需将 URL(查询字符串)中的搜索字符串传递给 link1.php 并再次从 DB 中获取结果。
  • 良好的代码缩进将帮助我们阅读代码,更重要的是,它将帮助您调试代码Take a quick look at a coding standard 为您自己的利益。您可能会被要求在几周/几个月内修改此代码,最后您会感谢我的。
  • 如果你想坚持会话,那么你可以简单地存储结果:$_SESSION['results'] = $results; 然后在 link1.php 上迭代它,就像你在 homepage.php 上做的那样
  • 大注意一个脚本只需要连接一次数据库,而不是每次你想运行一个新的查询
  • 我对 foreach 了解不多。虽然当我尝试使用您的第二个答案 $_SESSION['results'] = $results;然后它将显示上次插入值的单个记录。

标签: php html forms


【解决方案1】:

我的新配置但它有一个问题一个用户按下返回按钮返回 homepage.php 它不会将他重定向回 homepage.php 它只是关闭会话(一些网上银行网站警告我们不要按下返回按钮 否则我们必须再次登录)当用户单击返回按钮时它会显示错误。

确认表格重新提交此网页需要您之前输入的数据才能正确显示。您可以再次发送此数据,但这样做会重复此页面之前执行的任何操作。 按重新加载按钮重新提交加载页面所需的数据。 ERR_CACHE_MISS

1-form.php

<?php
session_start();
?>
<!DOCTYPE html>
<html>
  <body>
    <!-- (A) SEARCH FORM -->
    <form method="post" action="homepage.php">
      <h1>SEARCH FOR USERS</h1>
      <input type="text" name="username" required/>
      <input type="submit" value="Search"/>
    </form>

    <table>
    

2-search.php


<?php
// (A) DATABASE CONFIG - CHANGE TO YOUR OWN!
define("DB_HOST", "localhost");
define("DB_NAME", "test2");
define("DB_CHARSET", "utf8");
define("DB_USER", "root");
define("DB_PASSWORD", "");

// (B) CONNECT TO DATABASE
try {
  $pdo = new PDO(
    "mysql:host=".DB_HOST.";charset=".DB_CHARSET.";dbname=".DB_NAME,
    DB_USER, DB_PASSWORD, [
      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
      PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    ]
  );
} catch (Exception $ex) { exit($ex->getMessage()); }

// (C) SEARCH
$stmt = $pdo->prepare("SELECT * FROM `table1` WHERE `Id` LIKE ? OR `Mobile` LIKE ?");
$stmt->execute(["%".$_POST["username"]."%", "%".$_POST["username"]."%"]);
$results = $stmt->fetchAll();
if (isset($_POST["ajax"])) { echo json_encode($results); }

$pdo->connection = null;
$pdo=null;




try {
  $pdo2 = new PDO(
    "mysql:host=".DB_HOST.";charset=".DB_CHARSET.";dbname=".DB_NAME,
    DB_USER, DB_PASSWORD, [
      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
      PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    ]
  );
} catch (Exception $ex) { exit($ex->getMessage()); }

// (C) SEARCH
$stmt2 = $pdo2->prepare("SELECT * FROM `table2` WHERE `Id` LIKE ? OR `Paymobile` LIKE ?");
$stmt2->execute(["%".$_POST["username"]."%", "%".$_POST["username"]."%"]);
$results2 = $stmt2->fetchAll();
if (isset($_POST["ajax"])) { echo json_encode($results2); }

$pdo2->connection = null;
$pdo2=null;

homepage.php

<?php
session_start();
$_SESSION['username'] = $_POST['username'];
?>

<?php
// (B2) DISPLAY RESULTS 
?>
 <div class="card-body p-0">
                        <div class="table-responsive">
                            <table class="table table-hover mb-0">
                                <thead>
                                    <tr>
                                        
                                        <th>Name</th>
                                        <th>Mobile</th>
                                        <th>Email</th>
                                    </tr>
                                </thead>
                                <tbody>
                                    <tr>
                                    
                                            
                                            </div>
                                            <?php
    // (B) PROCESS SEARCH WHEN FORM SUBMITTED
    if (isset($_POST["username"])) {
      // (B1) SEARCH FOR USERS
      require "2-search.php";
      ?>
      <?php
      // (B2) DISPLAY RESULTS
      if (count($results) > 0) { foreach ($results as $r) {
      ?>  
                                            
                                                    <td><?php echo $r['Name'] ;?></td>
                                                    <td><?php echo $r['Mobile'] ;?></td>
                                                    <td><?php echo $r['Email'] ;?></td> 
                                    </tr>
                                    <?php
      }} else { echo "No results found"; }
    }
    ?>

                                </tbody>
                            </table>
                        </div>
                    </div>
                </div>
            </div>


<div class="card-body p-0">
                        <div class="table-responsive">
                            <table class="table table-hover mb-0">
                                <thead>
                                    <tr>
                                        
                                        <th>Name</th>
                                        <th>Mobile</th>
                                        <th>Email</th>
                                    </tr>
                                </thead>
                                <tbody>
                                    <tr>
                                    
                                            
                                            </div>
                                            <?php
    // (B) PROCESS SEARCH WHEN FORM SUBMITTED
    if (isset($_POST["username"])) {
      // (B1) SEARCH FOR USERS
      
      ?>
      <?php
      // (B2) DISPLAY RESULTS
      if (count($results2) > 0) { foreach ($results2 as $r2) {
      ?>  
                                        <?php
                                            $_SESSION['r2m'] = $r2
                                            
                                            ?>
                                                    <td><?php echo $r2['Month'] ;?></td>
                                                    <td><?php echo $r2['Amount'] ;?></td>
                                                    <td><?php echo $r2['Date'] ;?></td> 
                                    </tr>
                                    <?php
      }} else { echo "No results found"; }
    }
    ?>

                                </tbody>
                            </table>
                            <a href="link1.php">Click here</a>
                        </div>
                    </div>
                </div>
            </div>
</table>
</html>

link1.php

<?php
session_start();

?>
    <table>
        <tr>
            <th>Month</th>
            <th>Amount</th>
            <th>Date</th>
        </tr>
        <tr>
            <?php
        $_POST['username'] = $_SESSION['username'];
                                     ?>       
                                            </div>
                                            <?php
    // (B) PROCESS SEARCH WHEN FORM SUBMITTED
    if (isset($_POST["username"])) {
      // (B1) SEARCH FOR USERS
      require "2-search.php";
      ?>
      <?php
      // (B2) DISPLAY RESULTS
      if (count($results2) > 0) { foreach ($results2 as $r2) {
      ?>  
                                            
                                                    <td><?php echo $r2['Month'] ;?></td>
                                                    <td><?php echo $r2['Amount'] ;?></td>
                                                    <td><?php echo $r2['Date'] ;?></td> 
                                    </tr>
                                    <?php
      }} else { echo "No results found"; }
    }
    ?>

       
     
</table>

【讨论】:

  • 这是一个完全不同的问题,应该作为另一个问题发布,而不是作为对您之前问题的回答。但简而言之,浏览器需要向该页面发出 POST 请求才能重新创建它,否则不会定义 $_POST['username']。我会将搜索更改为&lt;form method="get",然后使用$_GET['username']。问题解决了。毕竟,您是在 GETting 数据。 POST 通常用于将数据发送到服务器进行存储(这就是为什么浏览器会询问您是否真的要再次重新提交数据,因为它可能会导致重复等)
  • @M.Eriksson 谢谢,我将尝试一次 Get 方法,现在正如您所说,这是另一个与此无关的问题,然后我将这个问题作为问题解决。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 2012-06-27
  • 2011-08-25
  • 2017-06-21
相关资源
最近更新 更多