我的脚本没有按预期工作

时间:2015-02-10 21:57:11

标签: php

这是按钮

<a href="index.php?p=contact">contact<a>

这是php脚本:

<?php
$p = isset($_GET['p']);

if($p == "artist")
{
    include 'artist.php';   
}

if($p == "contact")
{
    include 'contact.php';  
}

if($p == "releases")
{
    include 'releases.php'; 
}

if($p == "downloads")
{
    include 'downloads.php';    
}

else
{
    include 'home.php'; 
}
?>

因此,当我点击按钮时,我的脚本应该包含contact.php,但它不包括contact.php,而是包含所有php文件。 (这也发生在其他按钮上)。

3 个答案:

答案 0 :(得分:3)

现在,您的$p变量等于true(这是isset返回的内容。)

$p = isset($_GET['p']);更改为$p = $_GET['p'];,您就会很好

更好:

$p = isset($_GET['p']) ? $_GET['p'] : false;

在这种情况下,您可以防止p为空

修改

您的代码还有另一个问题 - 最后else声明。 $pdownloads不同时始终为真。因此,要么将每个if更改为else if,请执行以下操作:

if($p == 'artist')
{
    include 'artist.php';   
}

else if($p == 'contact')
{
    include 'contact.php';  
}
(...)
else
{
    include 'home.php'; 
}

或将其更改为switch声明:

switch($p)
{
case 'artist':
    include 'artist.php';
    break;
(...)
default:
    include 'home.php';
}

答案 1 :(得分:1)

isset($ _ GET [&#39; p&#39;])返回true或false,因此将$ p与某些字符串进行比较的代码将始终返回true并在if块中运行代码。

$ p = isset($ _ GET [&#39; p&#39;]) 改为 $ p = $ _GET [ &#39; p&#39]

答案 2 :(得分:0)

为了使这个(更多)可重用,你应该稍微改变你的脚本。创建一个简单的白名单,检查它是否允许参数,如果是,直接包含$ _GET ['p']的值:

$allowed = false;

if (isset($_GET['p'])) 

{

switch $_GET['p'] {

  case 'contact':
     $allowed = true;
     break;

  case 'artist':
     $allowed = true;
     break;

   // and so on for all your IFs

}

  if ($allowed === true) {
    include $_GET['p'].'.php'
  }
  else 
  {
    die('illegal parameter found')
  }
}