�빫�� ����� ���

Posts tagged ‘web programming’

[PHP] 자유롭게 검색할 수 있도록 폼에서 쿼리문 추출하기

// 검색을 위해 입력된 폼에서 쿼리문을 만들어내는 함수

function combiQuery($tablename, $attributes, $order) { // table name으로 인자를 받는다.

global $HTTP_POST_VARS; // POST 연관배열을 전역변수로 선언하고

for($i = 0; $i < count($HTTP_POST_VARS); $i++) { // count를 계산

if(current($HTTP_POST_VARS)) $formcount++;

next($HTTP_POST_VARS);

}

reset($HTTP_POST_VARS); // 배열 포인터를 처음으로 돌림

if($formcount != 0) { // 입력된 폼이 하나 이상일 때

$query = “select “.$attributes.” from “.$tablename.” where”; // 쿼리문에 where 절 삽입

for($i = 0; $i < count($HTTP_POST_VARS); $i++) { // 폼의 최대값만큼 루프를 돌며

if(current($HTTP_POST_VARS)) { // POST 연관배열에 값이 있을 때

$query .= ” “.key($HTTP_POST_VARS).” like ‘%”.current($HTTP_POST_VARS).”%’”; // 쿼리문에 like 조건 절 삽입

$formcount–; // n개의 조건이면 n-1만큼 and 절 삽입

if($formcount != 0) $query .= ” and”; // n개의 조건이면 n-1만큼 and 절 삽입

next($HTTP_POST_VARS); // POST 연관배열의 다음 값.. 계속해서 연관배열의 값을 조사하여 루프

}

else next($HTTP_POST_VARS); // 연관배열의 현재 참조시 값이 없으면 다시 루프

}

$query .= ” order by “.$order;

}

else $query = “select “.$attributes.” from “.$tablename.” order by “.$order; // 폼에 값이 없을 때 기본 쿼리문

return $query; // 계산된 쿼리문 리턴

}

 

———————————————–

그러니까 method가 post로 넘어온 폼은 $HTTP_POST_VARS에 저장된는데 이것을 처리해서 쿼리를 만들어내는 함수이다.

폼에 여러 개의 textbox가 있을 때 or로 검색 가능하게 하는 것이지.

문제는 textbox에 아무것도 들어있지 않아도 완전한 null이 아니라는 것이다.

(그래서 count()를 해 보면 textbox나 기타 폼의 숫자만큼 count된다. 따라서 그만큼 루프.)

따라서 새로운 배열에 복사하는데 값이 “”(just like null ^^)가 아닐 때 current()를 사용하여 값을 복사.

복사한 배열의 index가 0일 때는 where절이 붙지 않고

index가 n 일 때 n-1 만큼의 and 절이 붙는다.

그래서 formcount를 계산하여 formcount가 n-1만큼 and절을 삽입한다.

이것이 이 함수의 비법이다.

 

^^v

 

 

 

* 정말 먼 옛날에 만들었던 코드이다. 2003년 즈음이던가..

[PHP] 입력 폼에서 추출하여 업데이트 하는 함수

// POST로 넘어온 것 중 걸러서 update하는 함수

function updateSiteInfo($uid, $tableName) {

global $HTTP_POST_VARS; // POST 연관배열을 전역변수로 선언하고

$attribute[] = array_values($HTTP_POST_VARS); // 연관배열의 인덱스 인자를 배열로 넣고 -> DB attribute가 됨

$query = “update $tableName set “; // 업데이트 쿼리문 준비

for($i=0; $i<count($attribute); $i++) {

if($attribute[i] != “send”) { // hidden text를 제외하고

$query .= $attribute[i].” = “;

$query .= “‘”.$HTTP_POST_VARS[$i].”‘ where = ‘”.$uid.”‘”;

$queryResult = mysql_query($query);

if (!$queryResult) { // 예외처리

error(“QUERY_ERROR”);

return “no”;

}

}

}

// $query = substr($query,(strlen($query)-1)); // 맨 뒤의 한 글자 제거 -> “,”

return “yes”;

}

 

지난번에 만들었던 함수를 update에 맞게 고치다가 array_values()를 발견했다. 생각해보니까 딱 맞는데.. 더 세련되게 만들 수 있었을텐데..

그래서 다시 만들었다. 세련된 코드.. ㅡㅡv

error()는 에러를 출력하는 함수로 회사 사장님이 만든거다. 혹시 이거 보고 하실분들은 에러처리에서 알아서 고치시길. ㅡㅡ;;