php $_GET 和未定义的索引

2022-08-30 10:11:10

当我尝试在另一台PHP服务器上运行我的脚本时,出现了一个新问题。

在我的旧服务器上,以下代码似乎工作正常 - 即使没有声明任何参数。s

<?php
 if ($_GET['s'] == 'jwshxnsyllabus')
echo "<body onload=\"loadSyllabi('syllabus', '../syllabi/jwshxnporsyllabus.xml',         '../bibliographies/jwshxnbibliography_')\">";
if ($_GET['s'] == 'aquinas')
echo "<body onload=\"loadSyllabi('syllabus', '../syllabi/AquinasSyllabus.xml')\">"; 
 if ($_GET['s'] == 'POP2')
echo "<body onload=\"loadSyllabi('POP2')\">";
elseif ($_GET['s'] == null)
echo "<body>"
?>

但是现在,在我的本地计算机(XAMPP - Apache)上的本地服务器上,当没有定义值时,我会收到以下错误。s

Notice: Undefined index: s in C:\xampp\htdocs\teaching\index.php on line 43
Notice: Undefined index: s in C:\xampp\htdocs\teaching\index.php on line 45
Notice: Undefined index: s in C:\xampp\htdocs\teaching\index.php on line 47
Notice: Undefined index: s in C:\xampp\htdocs\teaching\index.php on line 49

如果为 声明了值,我希望脚本调用某些javascript函数,但是如果没有声明任何内容,我希望页面正常加载。s

你可以帮我吗?


答案 1

错误报告将不包括先前服务器上的通知,这就是您没有看到错误的原因。

在尝试使用索引之前,您应该检查索引是否确实存在于数组中。s$_GET

像这样的东西就足够了:

if (isset($_GET['s'])) {
    if ($_GET['s'] == 'jwshxnsyllabus')
        echo "<body onload=\"loadSyllabi('syllabus', '../syllabi/jwshxnporsyllabus.xml',         '../bibliographies/jwshxnbibliography_')\">";
    else if ($_GET['s'] == 'aquinas')
        echo "<body onload=\"loadSyllabi('syllabus', '../syllabi/AquinasSyllabus.xml')\">"; 
    else if ($_GET['s'] == 'POP2')
        echo "<body onload=\"loadSyllabi('POP2')\">";
} else {
    echo "<body>";
}

使用语句使代码更具可读性可能会有所帮助(如果您计划添加更多事例)。switch

switch ((isset($_GET['s']) ? $_GET['s'] : '')) {
    case 'jwshxnsyllabus':
        echo "<body onload=\"loadSyllabi('syllabus', '../syllabi/jwshxnporsyllabus.xml',         '../bibliographies/jwshxnbibliography_')\">";
        break;
    case 'aquinas':
        echo "<body onload=\"loadSyllabi('syllabus', '../syllabi/AquinasSyllabus.xml')\">";
        break;
    case 'POP2':
        echo "<body onload=\"loadSyllabi('POP2')\">";
        break;
    default:
        echo "<body>";
        break;
}

编辑:顺便说一句,我写的第一组代码完全模仿了你的本意。意外值的预期结果是否意味着不输出任何标记,或者这是一个疏忽?请注意,交换机将始终默认为 来解决此问题。?s=<body><body>


答案 2

养成检查变量是否可用于 isset 的习惯,例如

if (isset($_GET['s']))
{
     //do stuff that requires 's'
}
else
{
     //do stuff that doesn't need 's'
}

您可以禁用通知报告,但处理它们具有良好的卫生习惯,并且可以让您发现可能错过的问题。


推荐