2011-03-29 6 views
0

이 오류가 계속 발생합니다. 그리고 내가 아는하지 않는 이유 ... 감사PHP 오류 공지 : 정의되지 않은 색인 : C : Wamp www tweetball classes word.class.php의 사용자 ID :

공지 사항 : 정의되지 않은 인덱스 : C에서 사용자 ID : \ WAMP \ www가 \ tweetball 클래스 \ \ word.class.php 라인

<?php 
session_start(); 
class Word 
{ 

    private $m_sWord; 
    private $m_sMessage; 
    private $link; 
    public function __set($p_sProperty, $p_vValue) 
    { 
     switch($p_sProperty) 
     { 
      case "Message": 
       $this->m_sMessage = $p_vValue; 
       break; 
     }  
    } 

    public function __get($p_sProperty) 
    { 
     $vResult = null; 
     switch($p_sProperty) 
     { 
     case "Message": 
      $vResult = $this->m_sMessage; 
      break; 
     } 
     return $vResult; 
    } 

    public function Save() 
    { 
     include("Connection.php"); 
     $sSql = "insert INTO words (word, FK_UserID) VALUES ('$_POST[message]','$_POST[UserID]')"; 

     if ($rResult = mysqli_query($this->link, $sSql)) 
     { 
      echo ""; 
     } 
     else 
     {  
      throw new Exception('We could not save your word!');  
     }     
     mysqli_close($this->link); 
    } 



    public function CreateNew() 
     { 
      $m_sHost = "localhost"; 
      $m_sUser = "root"; 
      $m_sPassword = ""; 
      $m_sDatabase = "tweetball"; 

       $link = mysqli_connect($m_sHost,$m_sUser,$m_sPassword,$m_sDatabase); 
       if($link!=null){ 
        $this->link=$link; 
       } 
       else 
       { 
        throw new Exception("There seems to be a database problem. Try again later"); 
       } 

    } 
    public function getWord() 
    { 


      $m_sHost = "localhost"; 
      $m_sUser = "root"; 
      $m_sPassword = ""; 
      $m_sDatabase = "tweetball"; 


     $sSql = "select * from tweetball where WordID = 1;";  
     if ($rResult = mysqli_query($this->link, $sSql)) 
     { 
      $singleRecord = mysqli_fetch_assoc($rResult); 

      $message = $singleRecord['Word']; 
     } 
     else 
     {  
      throw new Exception('We could get your word!'); 
     }     
     mysqli_close($link); 
     return($message); 
    } 

} 
?> 
+4

나는 [SQL injection] (http://stackoverflow.com/questions/332365/xkcd-sql-injection-please-explain)에 대해서도 배울 시간이있다. –

답변

1

35 당신 ' 배열 (이 경우 $ _POST)에 대해 정의되지 않은 배열 키 "UserID"를 참조하기 때문에이 오류가 발생합니다. SQL 쿼리를 살펴보면 키가 따옴표로 묶여 있지 않다는 것을 알 수 있습니다.

입력을 믿을 수 없을만큼 안전하지 않은지에 대해서는 언급하지 않겠습니다. 사용자 데이터를 데이터베이스에 저장하십시오.

0

이것은 실제로 오류가 아니며 더 많은주의를 요합니다. 그것은 수동으로 설정되지 않은 변수를 사용하려고한다는 것을 알려줍니다. 부적절한 설정으로 인해 변수 주입이 발생할 수 있습니다.

당신은 당신의 PHP의 설정을 사용하려고하거나 호출하기 전에 if(isset($variable))를 사용하기 전에 전부 또는 변수를 정의 안전하게 설정되어 있는지 있다면 (PHP는 오류 통지를 해제하거나이 문제를 해결할 수 있습니다.

0
$sSql = "insert INTO words (word, FK_UserID) 
    VALUES ('$_POST[message]','$_POST[UserID]')"; 

는 더 $_POST['UserID'] 값이 없습니다. (예를 들어 UserID) 대소 문자를 구분 해당 배열의 키를합니다.

또한주의 당신이 여기서 뭘하고있는 것은 SQL 인젝션에 취약 한 번에 변경되어야한다. 많은 질문이 여기에있다 SQL 주입과 처리 방법 PHP에서.

1

$_REQUEST 또는 $_POST을 사용하여 클래스에 ID를 정의해야합니다. 데이터베이스에 전송할 값의 열도 있어야합니다.

관련 문제