【发布时间】:2017-04-08 03:06:14
【问题描述】:
我在 PHP 中使用会话。在两页的顶部,我做了一个 session_start();在其他任何事情之前。
稍后,从用于在页面中填充信息的数据库中提取信息。现在我只使用 20 种不同的物品。第一页遍历数据库并给出我期望的输出。选择图像后,它会转到另一个页面,该页面应该包含有关该对象的更多信息。问题是,新页面总是显示数据库中的最后一个对象。我会贴出相关代码,希望有人能指出我的失败。
<?php
//initial page with list of objects
session_start();
$_SESSION['listingID'] = $listingID;
?>
<!DOCTYPE HTML>
<html>
<head>
<title>Some Title</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<link rel="stylesheet" href="main.css" />
</head>
<body>
<!-- Wrapper -->
<div id="wrapper">
<!-- Header -->
<header id="header">
<h1><a href="#" target="__blank">Some H1 that works fine</h1>
<nav>
<ul>
<li><a href="#" target="__blank">Some link</a></li>
</ul>
</nav>
</header>
</div>
</body>
</html>
<?php
try {
$dbh = new PDO("mysql:host=$dbservername;dbname=$dbname", $dbusername, $dbpassword);
//echo "Connection is successful!<br/>";
$sql = "SELECT * FROM $tablename";
$users = $dbh->query($sql);
foreach ($users as $row) {
extract($row);
$_SESSION['listingID'] = $listingID;
echo "THIS IS listingID ". $listingID;
echo '<div id="main" style="margin-bottom: 2em;">';
echo '<article class="thumb">';
echo '<a href="lake_full.php?'.$listingID.'" class="image"><img style="width:100%;height:100%;" src="' . $image . '" /></a>';
echo "<h2>$address</br>$city, $state $zip</br>$$asking_price</h2>";
echo '</article>';
echo '</div>';
} // end foreach
$dbh = null;
}
catch (PDOexception $e) {
echo "Error is: " . $e-> etmessage();
}
?>
以下代码是我在新页面上使用的代码,它应该带来“id”或与第一页上选择的图像相关的内容。
<?php
//lake_full.php
session_start();
$listingID = $_SESSION['listingID'];
echo "ID IS ".$listingID;
?>
<!DOCTYPE HTML>
<html>
<head>
<title>Some Title</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<link rel="stylesheet" href="main.css" />
</head>
<body>
<!-- Wrapper -->
<div id="wrapper">
<!-- Header -->
<header id="header">
<h1><a href="#">Some H1</h1>
<nav>
<ul>
<li><a href="#" target="__blank" class="icon fa-info-circle">Some Link</a></li>
</ul>
</nav>
</header>
</body>
</html>
<?php
try {
$dbh = new PDO("mysql:host=$dbservername;dbname=$dbname", $dbusername, $dbpassword);
//echo "Connection is successful!<br/>";
$sql = "SELECT listingID FROM $tablename";
$users = $dbh->query($sql);
echo "THIS ID IS ". $mls;
echo '<div id="main" style="margin-top: 2em;">';
echo '<article class="thumb">';
echo '<a href="#" class="image"><img style="width:100%;height:100%;" src="' . $image . '" /></a>';
echo "<h2>$address</br>$city, $state $zip</br>$$asking_price</h2>";
echo '</article>';
echo '</div>';
$dbh = null;
}
catch (PDOexception $e) {
echo "Error is: " . $e-> etmessage();
}
?>
【问题讨论】:
-
在您的第一页上,您正在使用
$listingID设置会话。那个变量是从哪里来的?你所有的数据库变量来自哪里?您还在尝试块中再次使用$listingID设置会话? -
我删除了所有 mysql 的东西,这样它就不会弄乱代码。发生的事情是我可以回显所选房屋的 ID 或任何内容,但是当我选择它时,新页面仅反映数据库中的最后一个条目。我试图让它记住选择了哪所房子,这样我就可以在下一页上显示所有这些信息。
-
在“新页面”中
<?php之前真的有一个空格字符吗?我也看不到你在哪里使用$listingID -
$listIingD是否来自数据库?由于您使用的是extract(),因此很难说出变量的来源。如果是这样,您将在每次迭代时覆盖会话变量,因此它始终只包含最后一个。 -
没有空格字符,这就是它被复制到这个堆栈问题的方式。每个房子都有一个 ID 和一个列表 ID。您可以在 HTML 的回显中看到第一页上的其他变量,它们工作正常。我只是在尝试存储选择的房屋时遇到问题,以便将其与其余信息一起显示在新页面上。无论选择如何,我现在都只得到数据库中的最后一个房子。
标签: php mysql database session-cookies