簡體   English   中英

單擊鏈接時將會話變量傳遞到新頁面

[英]Pass session variable to new page when link is clicked

我對此有點麻煩。 我有一個包含各種鏈接的書籍的搜索結果頁面,所有鏈接都鏈接到同一頁面(book.php),並且我想設置一個會話變量以傳遞到新頁面,該頁面應顯示有關特定結果鏈接的更多信息,即已選擇。 當在while循環中選擇鏈接時,我試圖將變量$ _SESSION ['booktitle']傳遞給book.php。 搜索結果頁面的代碼為:

<form id="rform" name="formsort" action=""  method="post">
<select name="sort" id="sort" onChange="document.forms['formsort'].submit()">
<option value="default">Sort Results</option>
<option value="lowhigh">Price: Low to High</option>
<option value="highlow">Price: High to Low</option>
<option value="az">Alphabetical Order: A-Z</option>
<option value="za">Alphabetical Order: Z-A</option>
</select>
<?php
if(isset($_POST['title']))
    {
        echo '<input type="hidden" name="title" value="'.$_POST['title'].'" />';
    }
if(isset($_POST['author']))
    {
        echo '<input type="hidden" name="author" value="'.$_POST['author'].'" />';
    }
if(isset($_POST['isbn']))
    {
        echo '<input type="hidden" name="isbn" value="'.$_POST['isbn'].'" />';
    }
if(isset($_POST['keyword']))
    {
        echo '<input type="hidden" name="keyword" value="'.$_POST['keyword'].'" />';
    }
?>
</form>
<?php
include "include.php";
session_start();
// Defining variables from home.php if set
$title = mysql_real_escape_string($_POST['title']);
$author = mysql_real_escape_string($_POST['author']);
$isbn = mysql_real_escape_string($_POST['isbn']);
$keyword = mysql_real_escape_string($_POST['keyword']);

if(isset($_POST['sort'])){
$sort=@$_POST['sort'];}
// Determine the WHEREs to use
$where = array();
if ( ! empty($title))
$where[] = "booktitle LIKE '%" . $title . "%'";
if ( ! empty($author))
$where[] = "author LIKE '%" . $author . "%'";
if ( ! empty($isbn))
$where[] = "isbn LIKE '%" . $isbn . "%'";
if ( ! empty($keyword))
$where[] = "description LIKE '%" . $keyword . "%'";

//Determine the ORDERs to use
$order = array();
if ((isset($sort)) && ($sort=='lowhigh'))
$order[] = "price ASC";
if ((isset($sort)) && ($sort=='highlow'))
$order[] = "price DESC";
if ((isset($sort)) && ($sort=='az'))
$order[] = "booktitle ASC";
if ((isset($sort)) && ($sort=='za'))
$order[] = "booktitle DESC";
// Build the query
$query = 'SELECT * FROM book';
if ( ! empty($where))
$query .= ' WHERE ' . implode(' AND ', $where);
if(! empty($sort))
$query .= ' ORDER BY ' . implode($order);
//Display results
$result = mysqli_query($con, $query) or die("Error in query $query: " . mysqli_error());
while ($row = mysqli_fetch_array($result)) {
  ?><a id="1" href="book.php" border="0"><img src="<?php echo $row[12]; ?>" width="112px" height="150px" /></a>
<a href="book.php?booktitle='<?php echo $_SESSION['booktitle']=$row[1];?>'"><b><?php echo  $row[1] . ", (" . $row[5] . ")";?></b></a><br><?php
echo $row[2];
echo "<br><div style='text-align:right'> <b>&pound;" . $row[9] . "</b></div>";
echo "<b>Book description:</b> " . substr($row[3],0,300) . "...<br /><hr>";
}
mysqli_close($con);             //closes the connection
?>

我使用以下方法在book.php中稱呼它:

<?php
include "include.php";
session_start();
$book=$_SESSION['booktitle'];

$query = "SELECT * FROM book WHERE booktitle='$book'";
$result = mysqli_query($con, $query) or die("Error in query $query: " . mysqli_error());
while ($row = mysqli_fetch_array($result)) {
echo $row[1];
} ?>

但是無論我選擇什么書鏈接,while循環中第一個搜索結果的書名都會被回顯。 知道為什么嗎?

任何幫助將不勝感激。

更換

$book=$_SESSION['booktitle'];

$book=$_GET['booktitle'];

您可以使用GET方法從鏈接獲取booktitle

而不是使用$row[1]替換為$row['booktitle']

希望我能為您提供最大的幫助。

首先,我想了解如果第二個塊是book.php ,第一個塊所在的文件名是什么?

然后,我建議您在代碼頂部使用session_start()消除任何“標題警告”。

然后,我想請您向我解釋為什么您將此指令放入代碼中

<?php echo $_SESSION['booktitle']=$row[1]?>

為什么不將其寫為:

<?php
$_SESSION['booktitle'] = $row[1];
echo $_SESSION['booktitle'];
?>

然后總是回顯一次只需要一次的$_SESSION['variable']后,在直接回顯它之后就對其執行unset() ,就像在您的情況下一樣unset($_SESSION['booktitle']);

我認為您的新書名搜索未存儲在上述代碼中的新會話中,而舊的搜索結果僅存儲在其中,請嘗試應用這些修改並告訴我是否已解決:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM