$ _PHP_SELF常量

时间:2017-01-13 20:16:58

标签: php mysql sql

我有一个显示SQL命令结果的脚本" SELECT"在页面中使用$_PHP_SELF常量的错误:

<html>
    <head>
        <title>Paging Using PHP</title>
    </head>
<body>
<?php
$dbhost = '127.0.0.1';
$dbuser = 'guest';
$dbpass = 'guest123';
$rec_limit = 10;
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) {
    die('Could not connect: ' . mysql_error());
}
mysql_select_db('test_db');
/* Get total number of records */
$sql = "SELECT count(emp_id) FROM employee ";
$retval = mysql_query( $sql, $conn );
if(! $retval ) {
    die('Could not get data: ' . mysql_error());
}
$row = mysql_fetch_array($retval, MYSQL_NUM );
$rec_count = $row[0];
if( isset($_GET{'page'} ) ) {
    $page = $_GET{'page'} + 1;
    $offset = $rec_limit * $page ;
}else {
    $page = 0;
    $offset = 0;
}
$left_rec = $rec_count -($page * $rec_limit);
$sql = "SELECT emp_id, emp_name, emp_salary ". 
"FROM employee "."LIMIT $offset, $rec_limit";
$retval = mysql_query( $sql, $conn );
if(! $retval ) {
    die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
    echo "EMP ID :{$row['emp_id']}  <br> ".
       "EMP NAME : {$row['emp_name']} <br> ".
       "EMP SALARY : {$row['emp_salary']} <br> ".
       "--------------------------------<br>";
}
if( $page > 0 ) {
    $last = $page -2;
    echo "<a href = \"$_PHP_SELF?page = $last\">Last 10 Records</a> |";
    echo "<a href = \"$_PHP_SELF?page = $page\">Next 10 Records</a>";
}else if( $page == 0 ) {
    echo "<a href = \"$_PHP_SELF?page = $page\">Next 10 Records</a>";
}else if( $left_rec < $rec_limit ) {
    $last = $page -2;
    echo "<a href = \"$_PHP_SELF?page = $last\">Last 10 Records</a>";
}
mysql_close($conn);
?>
</body>

我已经看到很多答案无法帮助我解决这个问题:

$PHP_SELF = &$_SERVER['PHP_SELF'];
echo $PHP_SELF;

如何让脚本正常工作?

它应该在每个页面中只显示10个结果,并通过单击页面底部的超链接转到下一个10结果的下一页。

2 个答案:

答案 0 :(得分:0)

if(isset($_GET["page"]))
{
    $page=$_GET["page"];
    $back=$page-5;
}
else
{
    $page=0;
    $back=0;
}
$forward=$page+5;

while($page<=$back and $page>=$forward)
{
    //code to execute
}

这样的事情会起作用吗?

echo '<a href="?=' . $page+10 . '">next</a>';

答案 1 :(得分:0)

你不应该以这种方式使用$_SERVER['PHP_SELF']。然后PHP_SELF将完整的网址打印到您的网页。可以将页面上的代码注入您的网站。

PHP_SELF and XSS

如果你想使用它,请逃避你的所有输出。

在您的情况下,它足以仅使用?page或在参数之前写入完整的URL。

echo sprintf('<a href = "?page=%d">Last 10 Records</a> |', $last);