一尘不染

PHP $ _GET和未定义的索引

php

当我尝试在其他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如果未定义for的值,则会出现以下错误。

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

如果为声明了值s,但脚本要调用某些javascript函数会发生什么,但是如果未声明任何内容,我希望页面能够正常加载。

你能帮助我吗?


阅读 476

收藏
2020-05-26

共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>

2020-05-26