开关上有两个不同的$GET变量(PHP)

开关上有两个不同的$GET变量(PHP),php,variables,get,switch-statement,Php,Variables,Get,Switch Statement,我使用Switch Station更改我的页面内容,如下所示: $id=$_GET['id']; $n = $_GET['n']; switch ($id) { case 0: include("news.php"); break; case 1: include("newsdetail.php?n=".$n); break;

我使用Switch Station更改我的页面内容,如下所示:

$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");
}
    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>";
}
case 1:
    include("newsdetail.php?n=".$n);
    break;                                 
在news.php中,我显示所有现有新闻,如下所示:

$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");
}
    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>";
}
case 1:
    include("newsdetail.php?n=".$n);
    break;                                 
和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']."";
}
当我尝试这样做时,我得到了一个类似于…/index.php?id=1&n=1的url,但没有显示任何内容。单独测试时,一切正常。
有没有可能让这样的东西起作用?

你不能这样做:

$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");
}
    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>";
}
case 1:
    include("newsdetail.php?n=".$n);
    break;                                 
这将使PHP试图找到一个名为newsdetail.PHP?n=1的文件,因此不会显示任何内容

但是没有必要这样做;您包含的文件仍然可以访问$\u GET变量,如$\u POST等,它们是全局的,因此可以在代码中的任何地方访问


只是一张要小心的纸条;您正在将$\u GET中的值直接传递到查询中。这会使您面临SQL注入问题。您应该考虑使用mysqli_uuo或PDO,这两种方法都可以帮助您编写更安全的代码。

您的代码存在很多问题。我将设法逐一解决这些问题

首先,你是一个非常开放的人。始终使用 准备语句和参数化查询

您将SQL与逻辑甚至表示代码混合在一起。你应该把它放在完全不同的类中,因为每个类应该只有一个职责。这也使您的代码更易于维护,您可以重用代码,而不是违反原则复制粘贴代码。模式就是这个概念的一个例子

要访问应用程序的不同部分,您应该使用该模式—看起来您已经在这样做了。所以这很好。现在,您可以使用自动加载所需文件的。我建议使用和使用

现在,如果您使用的是MVC,您仍然需要将请求路由到正确的类方法控制器。例如,我建议您使用许多可用的库中的一个。如果你想自己写,至少看看一些路由库的代码,看看它们是如何做到的


我知道这是很多,但我希望你花时间来学习我上面描述的概念。如果你第一次不明白所有的事情,不要担心。如果您有任何问题,请立即提问。

我认为您不能传递查询字符串以包含,但您可以只包含该文件,然后使用$\u GET在该文件中再次获取n。@FDL确实正确。文件内容可以使用,但您没有包括它。我只删除了'n=.$n',效果非常好!谢谢你的澄清和帮助,我会做点什么的。我很高兴能帮上忙。如果你需要更多的帮助,尽管问吧!你给了我很多作业哈哈,非常感谢你提供的信息,我有很多空闲时间,所以我会在阅读之前继续编写我的页面。谢谢