ユーザーが自分自身について投稿するフォームがあります。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);
}
これで問題は解決しましたが、問題が解決しない場合は、入力のサニタイズを確認する必要があります。