用于移动到下一个记录按钮的HTML / PHP语法

时间:2015-04-08 00:36:02

标签: php html

我正在HTML页面上开发“转到下一条记录”按钮。

嗯,它会进入下一个记录,然后停止。在初始点击后单击“Prior Issue”按钮时没有任何反应。由于我增加了问题编号,光标应该移动到下一条记录。我目前只处理“先前问题”按钮。

HTML语法:

<a href="index.php?content=main_window&id=1" title="Show More Recent Issue" >&#60; Next (Newer) Issue</a> &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp <a href="index.php?main_window&id=-1 title ="Show Older Issue" >Prior (Older)) Issue &#62;</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;
        }   

3 个答案:

答案 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" >&#60; Next (Newer) Issue</a> - <a href="index.php?main_window&id=$prev_id title ="Show Older Issue" >Prior (Older)) Issue &#62;</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" >    &#60; Next (Newer) Issue</a>
&nbsp &nbsp &nbsp &nbsp &nbsp &nbsp

<a href="index.php?content=main_window&cycle=-1&rec=xx

title ="Show Older Issue" >Prior (Older)) Issue &#62;</a>

然后将其添加到您的PHP:

$current_record_number = intval($_GET['rec']);

并改变:

$cycle_direction = trim($_REQUEST['id']); 

要:

$cycle_direction= intval($_GET['cycle']);

而不是trimisset,您应该使用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'));