2012-11-03 2 views
0

"answers"라는 데이터베이스 테이블의 값을 업데이트하는 것과 관련하여 문제가 발생했습니다. 테이블을 업데이트하지 않으므로. 누군가는 표시를 클릭 할 때마다 나는 (버튼 제출) 1에 0 값을 갖는 '표시'필드를 업데이트 할mysql 테이블에서 업데이트 할 수 없습니다

if(isset($_POST['marked'])) 
      { $marked= $_POST['marked']; 
      $command= "UPDATE Answers SET " . 
      "SessionID=" . $_POST['SessionID'] . ", " . 
      "TestID=" . $_POST['TestID'] . ", " . 
      "QuesID=" . $_POST['QuesID'] . ", " . 
      "A1=0, " . 
      "A2=0, " . 
      "A3=0, " . 
      "A4=0, " . 
      "A5=0, " . 
      "A6=0, " . 
      "AnswerText=\"\", " . 
      "SortOrder='" . intval($_POST['Order']) . "' " . 
      "marked=1". 
      "WHERE SessionID=" . $_POST['SessionID'] . 
      " AND QuesID=" . $_POST['QuesID']; 
      $lolsql= mysql_query($command, $conn); 


      } 

: 그래서, 여기에 내 코드 그것은`. 누군가 나를 도와주세요. 미리 감사드립니다 :)

+1

*** 경고 *** 귀하의 코드는 SQL 인젝션 공격에 매우 취약합니다! 준비된 명령문을 사용하여 코드를 변환하면 문제도 해결됩니다. –

+0

'SortOrder = ''''','문자가 누락되었습니다. – Wilq

+0

글쎄, 데이터베이스 라이브러리에는 오류에 대해 더 자세히 알려주는 몇 가지 기능이 있습니다. 그걸 써. 또한 오류 반환 값을 확인하십시오 : http://php.net/mysql_query – hakre

답변

1

당신이 두 번째 mysql_()은 더 이상 사회에 의해 유지되고, mysqli_() 또는 PDO statements 사용을 시작하지, 전혀 입력을 살균하고 직접 DATBASE를 업데이트하지 않기 때문에 귀하의 코드를 주입 ​​공격에 extremenly 취약합니다.

이어야가

예 귀하의 의견

if(isset($_POST['whatever'])) { 
    $holder = mysqli_real_escape_string ($connection, $_POST['value']); 
} 

을 살균하는 mysqli_real_escape_string()를 사용하여 쿼리에 총 엉망이다, 당신은 왜 연결을 사용하고 있습니까? 위와 같은 쿼리를 작성하지 않으시겠습니까?

$query = "UPDATE table_name SET col_name = '$value', col_name2 = '$value2' ... WHERE ..."; 
1

전체 코드 :

<? if(isset($_POST['marked'])) { 

    $answer_text = "something here"; 

    $marked = mysql_real_escape_string($_POST['marked']); 
    $session = mysql_real_escape_string($_POST['SessionID']); 
    $test = mysql_real_escape_string($_POST['TestID']); 
    $ques = mysql_real_escape_string($_POST['QuesID']); 
    $answer = mysql_real_escape_string($answer_text); 
    $order = intval(mysql_real_escape_string($_POST['Order'])); 

    mysql_query(" 
    UPDATE 
     `Answers` 

    SET 
     `SessionID` = '$session', 
     `TestID` = '$test', 
     `QuesID` = '$que', 
     `A1` = 0, 
     `A2` = 0, 
     `A3` = 0, 
     `A4` = 0, 
     `A5` = 0, 
     `A6` = 0, 
     `AnswerText` = '$answer', 
     `SortOrder` = '$order', 
     `marked` = 1 

    WHERE 
     `SessionID` = '$session' 
     AND 
      `QuesID` = '$ques'; 
    ") or die("Error: " . mysql_error()); 

}?> 

당신이 한 줄에 쿼리를 선호하는 경우 : 당신은 여전히 ​​문제가 발생하는 경우

mysql_query("UPDATE `Answers` SET `SessionID` = '$session', `TestID` = '$test', `QuesID` = '$que', `A1` = 0, `A2` = 0, `A3` = 0, `A4` = 0, `A5` = 0, `A6` = 0, `AnswerText` = '$answer', `SortOrder` = '$order', `marked` = 1 WHERE `SessionID` = '$session' AND `QuesID` = '$ques';") or die("Error: " . mysql_error()); 

,이 스크립트 것 Error:으로 시작하는 오류를 반환하십시오. 열 중 하나를 잘못 입력했을 수 있습니다.

+1

답장을 보내 주셔서 감사합니다. :) –

+0

이 질문에 대한 답변을 얻으려면 답변으로 표시해야합니다. –

관련 문제