PHP에서 DB에 부담을 줄 수 있는(즉 공격을 가할 수 있는) index를 받게 되면 자동으로 \ or ' 를 붙이게 된다.

그래서 숫자를 idx로 가지게 되면 stripslashes()라는 함수로 제대로 풀어주는게 좋다.

역시 30분간 헤맨끝에 찾았다...

A에서 url 링크로 post_no=8을 넘기게 되면

B에서 $post_no= $_GET[post_no]; 이 경우 $post_no 는 8이어야 하는데 '\8\' 이렇게 되는 것.

고로 답은 stripslashers()

'Web > PHP' 카테고리의 다른 글

$_REQUEST, $_GET 한 값이 숫자일 때 간혹 \' 요로코롬 나오면?  (0) 2010.10.26
__set(), __get()의 활용.  (0) 2010.10.19
[2010-10-14] 오늘의 삽질  (0) 2010.10.14
오늘 겪엇던 삽질들 -  (0) 2010.10.13
Java에는 field에 대한 getter/setter가 존재한다. 

이런 식으로...

String name;

public void setName(String name){
     this.name = name;
}
public String getName(){
     return this.name;
}


PHP에도 비슷한게 있는데 getter/setter를 만들지 않고 java의 map 과 비슷한 방식으로 setter/getter를 사용한다. 근데 먼저 class내에서 변수가 맹글어지고 값이 들어가는걸 한번 살펴보고...

이렇게..

class Test{
     function __construct($name){
          $this->name = $name;
     }
}

클래스가 저렇게 있을때 field가 없다! 아무것도 없다! 만약 java에서라면 에러 팡팡 터진다. name이란 변수가 없으니까!!
근데 PHP는 에러가 안난다. 왜냐 name이 없으면 만들어버린다...(뭐지...)
우선 Test 클래스에는 __set()이 정의되어 있지 않다. PHP엔진은 __set()이 없으므로 자체적으로 __set()을 실행한다...
그래서 name이 없음에도 불구하고 name이란 변수에 값이 할당될 수 있다.


그러면 이제 __set()과 __get()을 어떻게 사용하는지 보고...
class Test{
     private $map;
     function __construct($name){
          $this->name = $name;
     }

     function __set($name, $value){
          $this->map[$name] = $value;
     }
     function __get($name){
          return $this->map[$name];
     }
}

대략적인 방식은 java의 map과 동일하다. key와 value로 구성된다.
클래스에 __set()과 __get()이 정의되어 있으면 PHP엔진은 정의된 set()과 get()을 먼저 호출한다.

class Test{
     private $map;
     function __construct($name){
		// 이렇게 해도되고...
		$this->name = $name;
     }

     function __set($name, $value){
		// 이렇게 해도 되고...
          $this->map[$name] = $value;
     }
     function __get($name){
          return $this->map[$name];
     }
}

$obj = new Test("ME");

$obj->__set("yeory", "yeory");

echo $obj->name."\n";    // ME
echo $obj->__get("yeory");  // yeory
?>


장단점.. ? 변수 선언과 값의 바인딩에 있어서 유연하다. 에러 볼일이 없다....
그러나.. 클래스내에 field가 없기 때문에 __set()하는 곳에서만 선언 이름을 알 수가 있다...
그래서 대부분 정해진 Object에서만 사용하는것 같다. 그 것이 아니라면 주석으로 어떤 이름으로 값이 set 되는지를 적던가..

'Web > PHP' 카테고리의 다른 글

$_REQUEST, $_GET 한 값이 숫자일 때 간혹 \' 요로코롬 나오면?  (0) 2010.10.26
__set(), __get()의 활용.  (0) 2010.10.19
[2010-10-14] 오늘의 삽질  (0) 2010.10.14
오늘 겪엇던 삽질들 -  (0) 2010.10.13
이게 왜 안되는 걸까??

public function setDataList($obj){
		for($i=0; $i<($this->totalCount); $i++){
			$row = mysql_fetch_object($obj);
			$dataList[$i] = $row;
		}
	}

왜 대체 왜 안되는건데 - ... 물어봐야지... ㅋ

물어보았다... 그리고 해결되었다..
오 ㅐ 해결되었는지 모르겠다..

	public function setDataList($obj){
		for($i=0; $i<($this->totalCount); $i++){
			$row = mysql_fetch_object($obj);
			$dataList[] = $row;
		}
		$this->dataList = $dataList;
	}
아나.. 나 바본가... ?


	echo "<script> var frm = document.controller; 
	frm.action = '".$nextLocation."';
	frm.result.value = ".$dataList.";	
	frm.submit();	</script>";
php에도 jsp에서 사용하는 request.setAttribute가 있을거 같은데 어딧을까...
script를 통해서 객체를 넘기는건 없는데 말이야...

php는 request가 발생될때마다 life cycle이 request 요청시 살고 response 하고나면 죽는다.
그래서 페이지 이동시는 객체를 jsp 처럼 넘기기 어렵다...
라고 경험자가 알려주었다....



Parse error: syntax error, unexpected T_VARIABLE in /home/www/php/class/dao/BbsDaoImpl.php on line 34
이건 무슨 에러인가... 아래 소스에서 에러가 난다... 대충 password 키워드 아래에 있는 것... 뭐지...
$query .= " values('".$this->bbs->getGno()."', 'A', '".$this->bbs->getName()."', ";
		$query .= "password('".$this->bbs->getPasswd()."'), '".$this->bbs->getEmail()."', ";
		$query .= "'".$this->bbs->getHomepage()."', '"$this->bbs->getSubject()."', ";
		$query .= "'".$this->bbs->getContent()."', '".$this->bbs->getCreateDate()."', ";
		$query .= "'".$this->bbs->getClientIp()."', '".$this->bbs->getHtmlTag()."')";

이클립스로 코드 옮겨보니... 연산자 . 빠졋다.. 젠장

'Web > PHP' 카테고리의 다른 글

$_REQUEST, $_GET 한 값이 숫자일 때 간혹 \' 요로코롬 나오면?  (0) 2010.10.26
__set(), __get()의 활용.  (0) 2010.10.19
[2010-10-14] 오늘의 삽질  (0) 2010.10.14
오늘 겪엇던 삽질들 -  (0) 2010.10.13
html에서 왜 php가 변환안되는지 몰랐었음.. 

  -> Apache 설정 중 php5.conf에 html 확장자가 없없음.

클래스를 선언하고 사용하는 것이 JAVA와 전혀 다름.
   -> 생성자에 매개변수로 값을 넘겨 해당 클래스의 지역번수로 값을 바인딩 했는데 다른 메서드에서 값이 없음;;

DB연결은 php가 설치된 곳에서 연결하기 때문에 host는 localhost가 되는 거임..
   -> 왜 DB 연결이 안되는가에 대한 개삽질의 결과물..

아직 삽질은 끝나지 않았다. 내일도 계속 될 것이여..

'Web > PHP' 카테고리의 다른 글

$_REQUEST, $_GET 한 값이 숫자일 때 간혹 \' 요로코롬 나오면?  (0) 2010.10.26
__set(), __get()의 활용.  (0) 2010.10.19
[2010-10-14] 오늘의 삽질  (0) 2010.10.14
오늘 겪엇던 삽질들 -  (0) 2010.10.13

+ Recent posts