【发布时间】: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;然后它将显示上次插入值的单个记录。