我正在HTML页面上开发“转到下一条记录”按钮。
嗯,它会进入下一个记录,然后停止。在初始点击后单击“Prior Issue”按钮时没有任何反应。由于我增加了问题编号,光标应该移动到下一条记录。我目前只处理“先前问题”按钮。
HTML语法:
<a href="index.php?content=main_window&id=1" title="Show More Recent Issue" >< Next (Newer) Issue</a>             <a href="index.php?main_window&id=-1 title ="Show Older Issue" >Prior (Older)) Issue ></a>
变量“id”过去了:
// Get Cycle Direction "1" stands for newer issue, "0" No Direction set, "-1" stands for older issue
if (!isset($_REQUEST['id']))
{$cycle_direction=0;
} else {
$cycle_direction = trim($_REQUEST['id']);
}
然后转到:(此时只处理“case -1”。
switch(trim($cycle_direction))
{
case -1:
// display an older issue
echo "Decrement<br>";
$current_record_number=$current_record_number +1;
echo $current_record_number;
mysqli_data_seek($result, 0);
mysqli_data_seek($result, $current_record_number);
$row=mysqli_fetch_row($result);
printf ("%s \n",$row[0]);
$issuenum=$row[0];
break;
case 0:
// display current issue
//echo "No Selection";
break;
case 1:
// display newer issue
//echo "Increase";
$issuenum=2165;
break;
}
答案 0 :(得分:0)
做得对。所有你需要的是url with next / prev record&#39; s。
$current_id = isset($_GET['id']) ? intval($_GET['id']) : 0;
// in case you are using MySQL
$query = "SELECT
prev_id, next_id
FROM
(SELECT
id AS prev_id
FROM
issues
WHERE
id < $current_id
LIMIT 1) a,
(SELECT
id AS next_id
FROM
issues
WHERE
id > $current_id
LIMIT 1) b";
// fetch query data
$prev_id = ...
$next_id = ...
// SHOW CURRENT ISSUE
echo '<a href="index.php?content=main_window&id='.$next_id.'" title="Show More Recent Issue" >< Next (Newer) Issue</a> - <a href="index.php?main_window&id=$prev_id title ="Show Older Issue" >Prior (Older)) Issue ></a>';
如果您从任何其他数据库获取数据,逻辑是相同的。只需选择上一个和下一个ID,并使用$ prev_id和$ next_id提供网址。
使用MAX / MIN技巧的另一种解决方案。
$query = "SELECT
(SELECT MAX(id) FROM issues WHERE id < t.id) as prev_id,
(SELECT MIN(id) FROM issues WHERE id > t.id) as next_id
FROM issues t WHERE t.id = $current_id";
答案 1 :(得分:0)
“Beta”版本正在运行。我将代码剥离到非常简单的要点并添加了许多echo语句来观察程序如何响应。简而言之,PHP在每个网页之间没有内存,因此变量的值“丢失”。虽然我模糊地意识到这一点,但有一段时间它并没有变得明显。
解决方案是开发几个 $ _ SESSION 变量来保存数组并监视光标的位置。
<?php
// Start the session
session_start();
include ("establish_array.php");
?>
以下代码构成“ establish_array.php ”以在以下位置建立数组:“ $ _ SESSION ['result'] ”。
<?php
require_once 'php_data/login_data.php';
$conn = new mysqli($hn, $un, $pw, $db);
if ($conn->connect_error) die($conn->connect_error.' Sorry, could not connect to the sfmags database server');
$query = "Select IssueIDNUM FROM tblIssueList ORDER by IssueDate DESC, IssueIDNUM ";
$_SESSION['result'] =$conn->query($query);
if (!$_SESSION['result']) die($conn->error);
$_SESSION['rowcount'] = mysqli_num_rows($_SESSION['result']);
?>
下面的代码嵌入在case(switch)语句中,以便在按下伪“ next ”HTML键时将杂志问题移动到下一个旧杂志。函数“ return_row_number(); ”返回当前行号,+1添加到行号,“ mysqli_data_seek ”用于移动到下一个(更旧)记录(问题)。
$issuenum = $_SESSION['issuenum'];
$_SESSION['cursor_location'] = return_row_number();
echo "Cursor Location :" . $_SESSION['cursor_location'] . "<br>";
$_SESSION['cursor_location'] = $_SESSION['cursor_location'] + 1;
mysqli_data_seek($result, 0);
mysqli_data_seek($result,$_SESSION['cursor_location']);
$row=mysqli_fetch_row($result);
$issuenum=$row[0];
$_SESSION['issuenum'] = $issuenum;
echo "Issue Number: $issuenum <br>";
感谢:误解,Unheiiig和Alexander Ravikovich提供有用的建议和线索。
答案 2 :(得分:-1)
这是我从你的评论中得到的:
function return_row_number() {
// Loop through the Array; Get Row Number for the current issue global $result,$issuenum, $rowcount;
$count =0;
mysqli_data_seek($result, 0);
while($row=mysqli_fetch_array($result, MYSQL_ASSOC)) {
++$count;
if($issuenum == $row['IssueIDNUM']) {
return $count -1; break;
}
}
}
现在神秘的价值是$issuenum
。
还有一个术语问题。这不是“通过数组循环”,它正在查询数据库并循环查询结果。
这是查找下一条记录的一种相当低效的方法。但在纠正之前,您需要解释$issuenum
的值来自哪里。
特别是有关数据库表的更多信息也会有所帮助:
有多少发行记录?
编号方案是什么?
新问题多久会被添加一次?
更新结束
使用这行代码,您将始终获得1的值
$current_record_number=$current_record_number +1;
因为$current_record_number
= 0。
您应该将当前问题添加到href
,其中xx =当前记录#
我将“id”改为“循环”
已将content=
添加到下一个href
。
<a href="index.php?content=main_window&cycle=1&rec=xx"
title="Show More Recent Issue" > < Next (Newer) Issue</a>
           
<a href="index.php?content=main_window&cycle=-1&rec=xx
title ="Show Older Issue" >Prior (Older)) Issue ></a>
然后将其添加到您的PHP:
$current_record_number = intval($_GET['rec']);
并改变:
$cycle_direction = trim($_REQUEST['id']);
要:
$cycle_direction= intval($_GET['cycle']);
而不是trim
和isset
,您应该使用intval()
$cycle_direction = intval($_REQUEST['id']);
而不是$current_record_number=$current_record_number +1;
您可以使用:$current_record_number += $cycle_direction
并取消开关。
非传统方法
假设问题的值从1到10.
$next[-1] = array(0,10,1,2,3,4,5,6,7,8,9,1);
$next[1] = array(0,2,3,4,5,6,7,8,9,10,1);
$next[0] = array(0,1,2,3,4,5,6,7,8,9,10);
$nextIssue = $next[intval($_REQUEST['id'])];
如果问题编号为2001年至2010年
$nextIssue = 2000 + $next[intval($_REQUEST['id'])];
无论你有多少问题,都不需要使用数据库。
如上所示创建$ next数组,然后保存数组。
$fp = fopen('next.ser','w');
fwrite($fp,serialize($next));
fclose($fp);
如果您需要应用中的$ next数组,请使用:
$next= unserialize(file_get_contents('next.ser'));