SWITCH上有两个不同的$ _GET变量(PHP)

Enr*_*más 0 php variables get switch-statement

我使用Switch statment来改变我的页面内容,如下所示:

$id=$_GET['id'];
$n = $_GET['n'];          
switch ($id) {
    case 0:
        include("news.php");   
        break;      
    case 1:
        include("newsdetail.php?n=".$n);
        break;                                                                                            
    default:  
        include("news.php");
}
Run Code Online (Sandbox Code Playgroud)

在news.php中,我显示了所有现有的新闻:

    while($myrow = mysqli_fetch_array($result)){
    echo "<table>
            <tr>
             <td><img width='200' heigth='115' src='images/".$myrow['smallimage'].".jpg'/></td>
             <td>
             <b>".$myrow['title']."</b>
              <br />
             <i>By ".$myrow['author'].", ".$myrow['date']."</i>
              <br />
             ".$myrow['preview']."<br>
             <a href='index.php?id=1&n=".$myrow['id']."'><b>READ</b></a>
             </td>
            </tr>
           </table>";
}
Run Code Online (Sandbox Code Playgroud)

而且insidetails.php:

    $idnews = $_GET['n'];
$sql = "SELECT * FROM news WHERE id='$idnews'";
$result = mysqli_query($db,$sql);
while($myrow = mysqli_fetch_array($result)){
    echo    $myrow['title']."<br>
            <i>Por ".$myrow['author']."</i><br>
            ".$myrow['date']."<br>
            <img src='images/".$myrow['bigimage'].".jpg'>
            ".$myrow['body']."";
}
Run Code Online (Sandbox Code Playgroud)

当我尝试这个时,我会得到一个网址,.../index.php?id=1&n=1但没有显示任何内容.单独测试时一切正常.是否可以制作这样的东西并让它起作用?

and*_*wsi 6

你不能做这样的包括:

case 1:
    include("newsdetail.php?n=".$n);
    break;                                 
Run Code Online (Sandbox Code Playgroud)

这将让PHP试图找到一个名为的文件newsdetail.php?n=1,因此没有内容显示出来.

但是没有必要这样做; 你包含的文件仍然可以访问$ _GET变量 - 比如$ _POST等等,它们是全局的,因此可以在代码中的任何地方访问.

只是要注意警惕; 您将值$_GET直接传递给查询.这将使您了解SQL注入问题.你应该看看使用mysqli_或PDO,它们都可以帮助你编写更安全的代码.