分页错误 - >未定义的索引

时间:2012-07-09 04:51:23

标签: php mysql

这不是重复的条目。我已经阅读了相同内容的上一篇文章,但我无法找到解决方案。这就是为什么我决定发布这个。

编辑02

<!-- language: lang-php -->

    <?php



 if (isset($_POST['lab_id']) && is_numeric($_POST['lab_id'])) 
   {         
     $lab_id = $_POST['lab_id']; 
   } 
else if (isset($_GET['lab_id']) && is_numeric($_GET['lab_id'])) 
   {         
     $lab_id = $_GET['lab_id']; 
   } 


//$targetpage = "view_all_chemicallab.php";     
    $limit      = 2; 

    $query = "SELECT COUNT(*) as num FROM chemical 
JOIN lab_inventory_chemical ON chemical.chemical_code = lab_inventory_chemical.chemical_code 
WHERE lab_inventory_chemical.lab_id= '$lab_id' ";         // this is line 71 
    $total_pages = mysql_fetch_array(mysql_query($query)); 
    $total_pages = $total_pages['num']; 

    $stages = 3; 
    $page =isset($_GET['name'])?mysql_escape_string($_GET['page']): ''; 
    if($page){ 
        $start = ($page - 1) * $limit; 
    }else{ 
        $start = 0;     
        }     

    // Get page data 
    $query1 = "SELECT * FROM chemical 
JOIN lab_inventory_chemical ON chemical.chemical_code = lab_inventory_chemical.chemical_code 
WHERE lab_inventory_chemical.lab_id='$lab_id' LIMIT $start, $limit";   //this is line 86 
    $result = mysql_query($query1); 

    // Initial page num setup 
    if ($page == 0){$page = 1;} 
    $prev = $page - 1;     
    $next = $page + 1;                             
    $lastpage = ceil($total_pages/$limit);         
    $LastPagem1 = $lastpage - 1;                     


    $paginate = ''; 
    if($lastpage > 1) 
    {     


   //  $paginate.= "<a href='$targetpage?page=$counter'>$counter</a>

        $paginate .= "<div class='paginate'>"; 
        // Previous 
        if ($page > 1){ 
            $paginate.= "<a href='view_all_chemicallab.php?lab_id=$lab_id&page=$prev'>previous</a>"; 
        }else{ 
            $paginate.= "<span class='disabled'>previous</span>";    } 



        // Pages     
        if ($lastpage < 7 + ($stages * 2))    // Not enough pages to breaking it up 
        {     
            for ($counter = 1; $counter <= $lastpage; $counter++) 
            { 
                if ($counter == $page){ 

                    $paginate.= "<span class='current'>$counter</span>"; 
                }else{ 
                $paginate.= "<a href='view_all_chemicallab.php?lab_id=1&page=$counter'>$counter</a>";}
                 //   $paginate.= "<a href='$targetpage?page=$counter'>$counter</a>";}                     
            } 
        } 
        elseif($lastpage > 5 + ($stages * 2))    // Enough pages to hide a few? 
        { 
            // Beginning only hide later pages 
            if($page < 1 + ($stages * 2))         
            { 
                for ($counter = 1; $counter < 4 + ($stages * 2); $counter++) 
                { 
                    if ($counter == $page){ 
                        $paginate.= "<span class='current'>$counter</span>"; 
                    }else{ 
                        //$paginate.= "<a href='$targetpage?page=$counter'>$counter</a>";
                        $paginate.= "<a href='view_all_chemicallab.php?lab_id=$lab_id&page=$counter'>$counter</a>";}                     
                } 
                $paginate.= "..."; 
                $paginate.= "<a href='view_all_chemicallab.php?lab_id=$lab_id&page=$LastPagem1'>$LastPagem1</a>"; 
                $paginate.= "<a href='view_all_chemicallab.php?lab_id=$lab_id&page=$lastpage'>$lastpage</a>";         
            } 
            // Middle hide some front and some back 
            elseif($lastpage - ($stages * 2) > $page && $page > ($stages * 2)) 
            { 
                $paginate.= "<a href='view_all_chemicallab.php?lab_id=$lab_id&page=1'>1</a>"; 
                $paginate.= "<a href='view_all_chemicallab.php?lab_id=$lab_id&page=2'>2</a>"; 
                $paginate.= "..."; 
                for ($counter = $page - $stages; $counter <= $page + $stages; $counter++) 
                { 
                    if ($counter == $page){ 
                        $paginate.= "<span class='current'>$counter</span>"; 
                    }else{ 
                        $paginate.= "<a href='view_all_chemicallab.php?lab_id=$lab_id&page=$counter'>$counter</a>";}                     
                } 
                $paginate.= "..."; 
                $paginate.= "<a href='view_all_chemicallab.php?lab_id=$lab_id&page=$LastPagem1'>$LastPagem1</a>"; 
                $paginate.= "<a href='view_all_chemicallab.php?lab_id=$lab_id&page=$lastpage'>$lastpage</a>";         
            } 
            // End only hide early pages 
            else 
            { 
                $paginate.= "<a href='view_all_chemicallab.php?lab_id=$lab_id&page=1'>1</a>"; 
                $paginate.= "<a href='view_all_chemicallab.php?lab_id=$lab_id&page=2'>2</a>"; 
                $paginate.= "..."; 
                for ($counter = $lastpage - (2 + ($stages * 2)); $counter <= $lastpage; $counter++) 
                { 
                    if ($counter == $page){ 
                        $paginate.= "<span class='current'>$counter</span>"; 
                    }else{ 
                        $paginate.= "<a href='view_all_chemicallab.php?lab_id=$lab_id&page=$counter'>$counter</a>";}                     
                } 
            } 
        } 

                // Next 
        if ($page < $counter - 1){ 
            $paginate.= "<a href='view_all_chemicallab.php?lab_id=$lab_id&page=$next'>next</a>"; 
        }else{ 
            $paginate.= "<span class='disabled'>next</span>"; 
            } 


    $paginate.= "</div>"; 

} 


// get results from database 
     //   $result = mysql_query("SELECT * FROM members") 
       //         or die(mysql_error());   

        // display data in table 
        echo "<div>"; 
        echo "<table id='table1'>"; 
        echo "<tr> <th>Chemical Name</th> <th>Chemical Code</th> <th>Type</th> <th>Edit</th><th>Delete</th><th>Stock</th>  </tr>"; 

        // loop through results of database query, displaying them in the table 
        while($row = mysql_fetch_array( $result )) 
        { 

                // echo out the contents of each row into a table 
                echo "<tr>"; 
                echo '<td>'. $row['name'] . '</td>'; 
                echo '<td>' . $row['chemical_code'] . '</td>'; 
                echo '<td>' . $row['type'] . '</td>'; 
                echo '<td><a href="editchemical.php?chemical_code=' . $row['chemical_code'] . '">Edit</a></td>'; 
                echo "<td><a href=\"delete_chemical.php?chemical_code=" . $row['chemical_code'] ."\" * onclick=\"return confirm('Are you sure you want to delete?')\">Delete</a></td>"; 
                echo '<td><a href="stock_chemical.php?chemical_code=' . $row['chemical_code'] . '">Stock</a></td>'; 
                echo "</tr>"; 


        } 
       echo "</table>"; 
       echo $paginate; 
       echo "</div>"; 


    ?>

我在php中遇到分页问题。我已经花了3天时间,但我找不到错误。所以最后决定向你们寻求帮助。这个分页脚本简单的查询,比如来自员工的Select *。但是当我在mysql查询中使用join时它会出错(第1页没有错误。但是当我点击分页页面时没有结果和错误)。 --- ---错误
1.Notice:未定义的变量:第71行的F:\ xampplite \ htdocs \ chem \ view_all_chemicallab.php中的lab_id
2.Notice:未定义的变量:第86行的F:\ xampplite \ htdocs \ chem \ view_all_chemicallab.php中的lab_id

(使用评论选项在上面的代码中显示错误行)

请帮帮我。提前致谢

2 个答案:

答案 0 :(得分:0)

在脚本的顶部定义$ lab_id = null;希望它对你有用。

答案 1 :(得分:0)

您的$lab_id变量似乎是通过表单中的POST发送的。在您的分页链接中,您不会再次提及它。因此,当您单击该链接时,服务器不再知道查询是什么。您需要像其他变量($targetPage$counter一样将其再次传回页面,这样您的查询仍然可以写入 - 或者将其保留在会话或cookie中或其他什么。

此外,您的代码容易受到注入攻击。您确实应该更改代码以使用PDOMysqli。不应使用旧的mysql_query类型命令。

编辑:在标题处尝试:

if (isset($_POST['lab_id']) && is_numeric($_POST['lab_id'])) 
{         
    $lab_id = $_POST['lab_id']; 
}
else
{
    if(!isset($_GET['lab_id']))
    {
        $lab_id="";
        // this means that the query will fail and you need to
        // make sure that your script never gets to here
    }
    else
    {
        // Do any other checking/verification here
        $lab_id=$_GET['lab_id'];
    }
}

这将确保始终设置lab_id(尽管它可能仍为空,请参阅上面的代码)。但是在你的$targetpage变量中,有这样的东西:

$targetpage = "view_all_chemicallab.php?lab_id=".$lab_id;  

编辑2: 您将不得不修改代码中的一些链接,以使href标记不包含两个?在$paginate.= "<a href='$targetpage?page=$counter'>$counter</a>之内,因为已经存在了?在变量$targetpage

编辑3: 您目前的代码是:

$paginate.= "<a href='$targetpage?page=$counter'>$counter</a>"

问题在于$targetpage已在上面定义为:

$targetpage = "view_all_chemicallab.php?lab_id=".$lab_id;

这意味着当你将两者结合起来时,你最终会得到:

$paginate.= "<a href='view_all_chemicallab.php?lab_id=1?page=$counter'>$counter</a>" // I used lab_id as 1 fot this example

这是一个无效的链接。传递多个参数的方法是使用&符号连接它们。这适用于paginate:

$paginate.= "<a href='$targetpage&page=$counter'>$counter</a>"

这将导致链接为:

<a href='view_all_chemicallab.php?lab_id=1&page=$counter'>$counter</a>

这是形成它的正确方法。