0

ユーザーが自分自身について投稿するフォームがあります。PDO を使用すると、アポストロフィや引用符で問題が発生しないことを読みましたが、 exc"として取得しています。\"ご想像のとおりです。

http://www.php.net/manual/en/pdo.prepared-statements.phpについても読み込もうとしましたが、ウェブサイトのこの部分が機能していないことがわかりました。そのため、最初にここで質問します。

次のようなユーザー入力を取得します。

if(isset($_POST["doit"])) {
    $about = cleanInput($_POST["about"]);
    $name = cleanInput($_POST["name"]);

    if(!empty($about) && !empty($name)){
     try{
     $cu_query = "INSERT INTO `members` (`about`, `name`) VALUES (:about, :name)";
     $cu_query_do = $db->prepare($cu_query);
     $cu_query_do -> bindParam(':about', $about, PDO::PARAM_STR);
     $cu_query_do -> bindParam(':name', $name, PDO::PARAM_STR);
     $cu_query_do->execute() or die(print_r($cu_query_do->errorInfo(), true));
   }

     catch(PDOException $e) {
     $log->logError($e." - ".basename(__FILE__));
   }

   }
}

このようにユーザー入力を出力し、次のように db からユーザー入力をフェッチします。

    //if isset get exc..

    try {
 $mq = "SELECT * FROM `members` WHERE `m_id` = :m_id";
 $mq_check = $db->prepare($mq);
 $mq_check->bindParam(':m_id', $m_id, PDO::PARAM_INT);
 $mq_check->execute();
 $ac = $db->query("SELECT FOUND_ROWS()")->fetchColumn();
 }
     catch(PDOException $e) {
 $log->logError($e." - ".basename(__FILE__));
                }


     if(!empty($ac)) {
     $_loader = true;
     $fetch = $mq_check->fetch (PDO::FETCH_ASSOC);
     $name = cleanInput($fetch['name']);
     $about = cleanInput($fetch['about']);


     }

     echo $name;

ありがとうございました

回答 : WHM または php.ini exc から無効にしても問題が解決しない場合は、以下のコード @Wayne Whitty で確認してください。

次のコードをヘッダー ファイルに含めます。

if (get_magic_quotes_gpc()) {
$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
while (list($key, $val) = each($process)) {
    foreach ($val as $k => $v) {
        unset($process[$key][$k]);
        if (is_array($v)) {
            $process[$key][stripslashes($k)] = $v;
            $process[] = &$process[$key][stripslashes($k)];
        } else {
            $process[$key][stripslashes($k)] = stripslashes($v);
        }
    }
}
unset($process);
}

これで問題は解決しましたが、問題が解決しない場合は、入力のサニタイズを確認する必要があります。

4

2 に答える 2

1

サーバーでマジック クォートが有効になっているか、関数 cleanInput() が関数 addslashes() を呼び出しています。

これを実行して、マジック クォートが有効になっているかどうかを確認します。

if(get_magic_quotes_gpc()){
    echo 'Magic Quotes enabled... sigh!';
}

PHPのマニュアルには、マジック クォートの扱い方が示されています。

于 2012-09-14T14:29:43.387 に答える
0

問題は確かに、投稿値を事前にエスケープしていると思われる cleanInput メソッドによるものです。

于 2012-09-14T14:29:18.560 に答える