2012-09-14 4 views
0

나는 사용자가 자신에 대해 게시하는 양식을 가지고 있습니다. 나는 PDO를 사용하여 아포스트로피 또는 첨부 파일과 관련하여 아무런 문제가 없지만 "\" exc로 표시됩니다. 당신이 짐작할 수 있듯이.PHP PDO 아포스트로피 및 인용 부호 이스케이프

또한 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 코드를 확인하십시오. 여전히 l 헤더 파일에이 코드를 포함

보다 활성 이케, 내 문제를 해결하지만, 여전히 문제가 계속되면, 당신은 귀하의 의견 sanitizations EXC을 확인하는 것보다

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); 
} 

.

+0

당신이'cleanInput'에 대한 코드를 게시 하시겠습니까? 마법 따옴표이를 실행하여 사용할 수있는 경우

확인

확인합니다 – andrewsi

+1

아마도, 당신의'cleanInput()'함수가 addslashes() 또는 비슷한 것을 호출하고 있다고 가정합니다. 당신은 자리 표시자를 그대로 사용할 때 준비된 진술로 그럴 필요가 없습니다. –

+0

PHP 구성을 확인하고 [magic quotes] (http://us.php.net/manual/en/info.configuration.php#ini.magic-quotes-gpc)가 꺼져 있는지 확인하십시오. – DCoder

답변

1

서버에서 마법 인용 부호가 활성화되어 있거나 cleanInput() 함수가 addslashes() 함수를 호출 중입니다.

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

PHP manual 당신이 마법 따옴표 처리하는 방법을 보여줍니다 :

+0

사실, 이것 역시 PDO 킬러입니다;) – dweeves

+0

오, 나는 마술 따옴표를 사용할 수있게했습니다 ... 한숨을 지어 라! , 고맙습니다. –

+1

웹 호스트에게 PHP 구성이 좋지 않으며 나쁜 느낌이 들었다고 말하십시오. –

0

문제는 확실히 post 값을 이스케이프 처리하는 cleanInput 메소드 때문입니다.

+0

나는 그것을 제거하려고했지만 아무것도 변경하지 않았습니다. –