0

質問はかなり自明だと思います。コードは次のとおりです。

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 ページは以下を出力します。

Notice: 未定義のインデックス: email in D:\xampp\htdocs\tfasamp\execute.php 行 46

Notice: 未定義のインデックス: cellphone in D:\xampp\htdocs\tfasamp\execute.php 行 46

注意: 未定義のインデックス: D:\xampp\htdocs\tfasamp\execute.php の 46 行目の area_code

(CTFA_SAMP->createUser) 電子メール () がありません。

例外を表示するために PHP がこれらの通知を表示しないようにするにはどうすればよいですか?

4

1 に答える 1

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は完全に予測不可能なユーザー入力を扱います。これは、既存の値または存在しない値をチェックする必要がある最初の防衛線です。これを責任として後でコードに組み込むことはできません。

于 2013-12-29T19:56:09.870 に答える