0

Javascriptを仲介者として使用して、HTMLからPHPにデータを送信しています。SQL コマンドが機能しなくなるため、文字列に Javascript と PHP の ' が含まれているかどうかを確認したいと考えています。以下のコードを試しましたが、うまくいきません。どうすればいいですか?

function CheckQuestionAnswerField($value) {
    $isQAValid = true;

    if($value == "")
        $isQAValid = false;
    if($value == null)
        $isQAValid = false;
    for($LCV=0; $LCV<(count($value)-1); $LCV++) {
        if($value[$LCV] == "'")
            $isQAValid = false;
    }

    return $isQAValid;
}

上記のコードで、$value は文字列です。関数から false が返された場合は、アラートを表示します。この関数は最初の 2 つの if ステートメントで機能しますが、for ループでは機能しません。何が問題ですか?

Javascriptでこれを行う方法も知りたいと思いました。

また、これらの実装が ".


編集-1

以下のコードでstrposを試しましたが、まだ機能していません

function CheckQuestionAnswerField($value) {
    $isQAValid = true;

    if($value == "")
        $isQAValid = false;
    if($value == null)
        $isQAValid = false;
    if (strpos($value,"'") == true)
        $isQAValid = false;
    if (strpos($value,'"') !== false)
        $isQAValid = false;

    return $isQAValid;
}

今ではすべてが間違っていると言っています。

4

3 に答える 3

2

JavaScriptで使用するindexOf

if (-1 !== value.indexOf("'"))
{

}

そして、PHPで使用するstrpos

if (FALSE !== strpos($value, "'"))
{

}

ただし、準備済みステートメントの使用に切り替える場合は、これは必要ありません。 を参照してくださいPDO

于 2013-03-06T20:14:39.173 に答える
1

バックエンドでクエリを確実にエスケープします。そうしないと、大きなセキュリティ ホールになります。

この関数はそれを行う古い方法でした (代替手段への参照があります): http://php.net/manual/en/function.mysql-real-escape-string.php

htmlentities()ユーザーが送信したデータでの使用も検討します。

于 2013-03-06T20:14:48.247 に答える
-1

まず第一に、この文字が存在するかどうかを確認して値を無効にするだけではいけません。クエリの実行に関してこの値の存在が問題にならないように、すべてのクエリをエスケープする必要があります。その後、他の理由でこのキャラクターを禁止したい場合は、そうすることができます。

第 2 に、1 回のチェックでempty()と の両方をチェック""できますnull

最後に、文字列をループする理由はありませんstrpos。文字が出現するかどうかを調べるために使用できます。出現しない場合は返さfalseれます。

function CheckQuestionAnswerField($value) {
    $isQAValid = true;

    if(empty($value) {
       $isQAValid = false;
    } else if ( strpos($value, "'") !== false) {
      $isQAValid = false;
    }

    return $isQAValid;
}
于 2013-03-06T20:14:47.050 に答える