我认为问题是相当自我解释的,这是代码:
HTTP请求:localhost / execute.php?password = testing& command = create& api = api
这是执行代码的一部分。
try
{
$TFA_SAMP->createUser($_GET['email'], $_GET['cellphone'], $_GET['area_code']);
}
catch(Exception $createError)
{
echo $createError->getMessage();
}
这是类方法:
function createUser($email, $cellphone, $areaCode = 1)
{
if(!isset($email))
throw new BadMethodCallException('(CTFA_SAMP->createUser) email ('. $email .') is missing.');
if(!isset($cellphone))
throw new BadMethodCallException('(CTFA_SAMP->createUser) cellphone ('. $cellphone .') is missing.');
$authyLibrary = new Authy_Api($this->API, $this->connectionURL);
$requestResult = $authyLibrary->registerUser($email, $cellphone, strval($areaCode));
if($requestResult->ok())
{
echo $requestResult->id();
}
else
{
foreach($requestResult->errors() as $field => $message)
echo "$field = $message";
}
}
PHP页面打印:
注意:未定义的索引:第46行的D:\ xampp \ htdocs \ tfasamp \ execute.php中的电子邮件
注意:未定义的索引:第46行的D:\ xampp \ htdocs \ tfasamp \ execute.php中的手机
注意:未定义的索引:第46行的D:\ xampp \ htdocs \ tfasamp \ execute.php中的area_code
(CTFA_SAMP-> createUser)缺少电子邮件()。
我如何阻止PHP向我发送这些通知,因为我使用例外来显示它们?
答案 0 :(得分:4)
$TFA_SAMP->createUser($_GET['email'], $_GET['cellphone'], $_GET['area_code']);
^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^
此处可访问不存在的变量。没有人关心你稍后在完全不同的变量上检查isset
并抛出异常,问题出在上面一行。你需要在那里解决它。例如:
$args = $_GET + array('email' => null, 'cellphone' => null, 'area_code' => null);
$TFA_SAMP->createUser($args['email'], $args['cellphone'], $args['area_code']);
或者,在此处使用isset
语句并为缺少用户输入抛出异常。
基本上,触及$_GET
的代码处理完全不可预测的用户输入。这是您需要检查现有值或不存在值的第一道防线。你不能把它作为责任推到后来的代码中。