2009-07-01 3 views
0

다중 선택 상자에서 정보로 레코드를 업데이트하려고하는데 새로운 행을 추가하기 위해 INSERT INTO를 사용할 때 제대로 작동했지만 현재는이 코드에 추가하려고합니다. mysql_real_escape_string()이 게시물의 맨 아래에 오류 메시지가 반환됩니다. PHP에 전달하려는 값이 잘못되었다고 생각하지만 PHP를 행복하게 만드는 방법을 모르겠습니다.MySQL PHP mysql_real_escape_string() -이 값이 문자열이 아닌가?

$query = "UPDATE studies 
      SET strategies = '" . mysql_real_escape_string($strategies) . "' WHERE id = '" . mysql_real_escape_string($id) . "'"; 



while($row = mysql_fetch_array($result)) { 
    $strategylist = $row['name']; 
    $strategyname = htmlspecialchars($row['name']); 
$pagelink = str_replace(" ","_",$strategylist); 

    echo '<option value="<a href=&quot;strategies.php?strategy=' . $pagelink . '&quot;>'.$strategyname.'</a>" >' . $strategyname . '</option>' . '\n'; 
} 

경고 :는 mysql_real_escape_string()는 매개 변수 1 라인 (100)에 주어진 문자열, 배열이 될 것으로 기대

+2

$ strategies 및 $ id에 할당 된 코드를 게시 할 수 있습니까? –

+1

$ id 및 $ strategies 변수를 설정하는 코드를 확인해야한다고 생각합니다. 그렇지 않으면 오류를 일으키는 항목을 알려주지 못합니다. 쿼리 문자열 생성 전에 관련 코드를 포함시켜야합니다. –

+0

mysql_real_escape_string ($ id) 대신 cast 연산자 (int) $ id 또는 intval ($ id)를 사용하는 것이 빠릅니다. – merkuro

답변

0

은 내가

생각 (즉 그 위의 라인은 ..... " '= SET 전략을 시작합니다)

$ ID가 문자열

그것은 그 $ 전략/$ id를 불평
mysql_real_escape_string($id) 
0

없는 것은 배열과 문자열이어야한다.

3

$ strateg처럼 보이는 것은 문자열이 아니라 배열입니다. 다중 선택 상자가 있기 때문에 여러 항목을 선택하면 $ strategies가 배열로 다시 나타납니다.

하나의 데이터베이스 열에 여러 선택 사항을 저장하는 방법이 여기에 해당됩니다. 당신이 여기서 뭘하고있는 것은 정말 무서운 보이는 제쳐두고

:

// Sets strategies to a comma-separated list of selected strategies. 
$query = "UPDATE studies 
      SET strategies = '" . 
      mysql_real_escape_string(is_array($strategies) ? implode(',', $strategies) : $strategies) . "' 
      WHERE id = '" . mysql_real_escape_string($id) . "'"; 

ETA : 당신은 단지 하나의 큰 문자열로 함께 선택 항목을 추가 할 경우, 내파()를 사용합니다. 선택 상자 옵션의 값에 대한 html 링크가 있는데,이 옵션을 데이터베이스에 저장합니다 (아마도 나중에 표시하겠습니까?).

누군가가 공격 사이트로 연결되는 링크를 포함하는 가짜 양식을 제출하는 사소한 XSS 공격에 실제로 몸을 숨길 수 있습니다. 공격 사이트는 DB에 행복하게 저장하고 나중에 사이트에 표시합니다.

데이터베이스에 ID 또는 ID 목록을 저장 한 다음 나중에 표시해야 할 때 나중에 링크를 작성하십시오.

관련 문제