문제

나는 꽤 좌절했다. 예를 들어 O'Connor와 같은 단일 따옴표로 데이터베이스 이름에 삽입 할 수 있기를 원합니다.

따라서 DB에 삽입 할 때 다음을 수행합니다.

 $lname = mysql_real_escape_string($_POST['lname']);

그런 다음 $ lname을 db에 삽입합니다.

DB에있을 때는 O 'Connor로 나타납니다.

따라서 웹 응용 프로그램에서 그 성을 기억한다면 다음을 사용해야합니다.

 $lname = stripslashes($r["lname"]);

이 모든 것이 잘 작동하는 것 같습니다. 그러나 성을 검색하고 결과를 표시하는 검색 기능이 있습니다. 검색 할 때 결과를 얻으려면 O 'Connor를 검색해야합니다.

검색 후 TextBox는 방금 검색 한 내용 (세션 사용)의 값을 자동으로 저장합니다. 그래서 내 코드는 이것입니다.

 $search = mysql_real_escape_string($_GET['search']);
 $_SESSION['search'] = $search;

앞서 말했듯이 검색 할 때 "O 'Connor"를 사용해야하고 검색 후 텍스트 상자의 값이 "O 'Connor"가됩니다.

이것을 알아 내려고 노력하는 것은 실망 스러웠습니다. 내가 뭘 잘못하고 있는지 아는 사람 있나요? 감사!

편집하다:

마법 인용문과 관련하여 내 php5.ini 파일은 다음과 같습니다.

 ; Magic quotes
 ;

 ; Magic quotes for incoming GET/POST/Cookie data.
 magic_quotes_gpc = On

 ; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
 magic_quotes_runtime = Off

 ; Use Sybase-style magic quotes (escape ' with '' instead of \').
 magic_quotes_sybase = Off

그러나 내 사이트는 Godaddy에서 호스팅되며 파일을 편집 할 권한이 없습니다.

도움이 되었습니까?

해결책

처럼 들린다 마법 인용문 PHP 구성에서 활성화됩니다.

실제로 활성화되었는지 확인하려면 :

echo get_magic_quotes_gpc();

비활성화하려면, php.ini 파일 편집 :

; Magic quotes
;

; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off

; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off

; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off

또는이 줄을 .htaccess에 추가하십시오.

php_flag magic_quotes_gpc Off

다른 팁

마법 인용문이 활성화됩니다. 이것이 의미하는 바는 게시 또는 기타 유사한 위치에 배치 된 것이 자동으로 탈출되어 시작 프로그래머가 그것에 대해 걱정할 필요가 없다는 것입니다. 내가 올바르게 기억한다면 현재 PHP 버전에서는 더 이상 사용되지 않습니다.

이것을 다루기 위해하고 싶은 일을하고 스크립트가 구성에서 동일하게 실행되도록하십시오.

function fixinput($value){
    if (get_magic_quotes_gpc()){
      $value = stripslashes($value);
    }

    return mysql_real_escape_string($value);
}

이를 수정하여 숫자가 아닌 데이터를 따옴표로 랩핑하기 위해이를 더 많이 수정할 수 있습니다. 이는 일반적인 변형이지만 수동으로 따옴표를 배치하는 것이 좋습니다.

PHP의 설치에 실제 탈출 문자열이 있는지 확인하기 위해 FixInput 함수로 편집 할 수 없습니다.

  function fixinput($value){
    if (get_magic_quotes_gpc()){
      $value = stripslashes($value);
    }

    if (function_exists('mysql_real_escape_string')) {
      return mysql_real_escape_string($value);
    }
    else {
      return mysql_escape_string($value);
    }
  }

DB에있을 때는 O 'Connor로 나타납니다.

따라서 웹 응용 프로그램에서 그 성을 기억한다면 다음을 사용해야합니다.

 $lname = stripslashes($r["lname"]);

잘못된! 당신이 끈을 피할 때 mysql_real_escape_string, 그들은 쿼리에서만 탈출됩니다. 데이터베이스는 쿼리를 해석하므로 데이터는 탈출 문자없이 데이터베이스에서 끝납니다. 너 하지 마라 사용해야합니다 stripslashes 데이터베이스에서 데이터를 꺼낼 때 당신이 그렇게 생각한다면, 그것은 당신의 데이터베이스의 데이터가 엉망이된다는 것을 의미합니다. 마법 인용문이 켜져 있기 때문에 가능성이 높습니다.

당신은 :

  • 마법 인용문을 끄거나 전 세계적으로 효과를 바꾸십시오. 보다 매뉴얼 자세한 내용은.
  • 어느 쪽이든 바인딩 매개 변수 (최상의 솔루션) 또는 모든 변수를 탈출하십시오 mysql_real_escape_string. 쿼리를 구축하는 곳 에서이 작업을 수행해야합니다.
  • 데이터베이스에서 꺼내는 일에 아무것도하지 마십시오.

특히 기능을 la로 만들지 마십시오. fixinput 그리고 여기에 일부 답변에 나열된 변형. 문제를 해결하는 것은 잘못된 방법입니다. HTTP- 요청에서 나오지 않는 데이터를 엉망으로 만들기 때문입니다.

나는 확인하지 않는다 get_magic_quotes_gpc 온/꺼짐입니다.

난 그냥 해요 $lname = mysql_real_escape_string(stripslashes($_POST['lname'])); 따라서 인용 된 텍스트가 없으면 슬래시를 벗겨 내지 않습니다. 인용이 있으면 제거 할 것입니다.

그리고 그것은 나를 위해 놀라운 일을합니다!

검색 쿼리를 취하기 만하면 mysql_real_escape_string을 사용하면 완벽하게 괜찮아야합니다. 그러나이 작업을 수행하는 가장 좋은 방법은 탈출하지 않은 저장을하지 않고 모든 것이 데이터베이스로 들어가는 것입니다.

대신, 이것을 수행하십시오 :

 $_SESSION['search'] = $_GET['search'];
 $search = mysql_real_escape_string($_GET['search']);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top