单击链接时将会话变量传递到新页面
我在这方面遇到了一些麻烦。 我有一个带有各种链接的书籍的搜索结果页面,所有链接到同一页面(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>£" . $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']);
我认为你的新书目搜索在上面的代码中没有存储在一个新的会话中,旧的搜索结果只是存储尝试应用这些修改,并告诉我,如果它被解决了:)
链接地址: http://www.djcxy.com/p/59725.html