2013-01-15 2 views
0

나는 데이터베이스에 저장된 여러 개의 문자열을 (예, 나는 그것이 가장 좋은 방법이 아니다 알지만, 다른 설계 시스템 사람과 일하고 있어요 내가 변경할 수 없습니다.)평가 PHP 코드

date('d', strtotime("thursday, november ".date("Y")." + 3 weeks")) 

이 내 코드로 뽑아 $request['order_date']라는 변수에 저장됩니다 예를 들어, 내 테이블이라고 specialDates에, 나는이 포함 된 computedDate 열 수 있습니다.

표준 PHP 코드에서 사용되는 경우 추수 감사절이 올해에 속하는 날짜를 반환합니다. 이 값의 평가 된 값 (올해 2013 년 값은 28)을 다른 쿼리로 전달해야합니다. 하지만 평가할 가치가없는 것 같습니다.

$query = 'SELECT count(orderID) as numberOfOrders FROM customer_orders WHERE customerID = ? AND orderDate = ?'; 
$param = array($request['customer_id'], eval($request['order_date'])); 

이 작동하지 않습니다.

echo eval($request['order_date']); 

나이 :

echo eval(" return \$request['order_date']; "); 

그냥 오히려 예상보다 문자열의 리터럴 값 (예를 date('d' etc.) 출력합니다 때 난 그냥이 일을, 화면에 값을 에코 시도 평가 값.

내가 잘못 뭐하는 거지?

업데이트 내가 트라이 아래 개발 AScherer의 대답, 난 그냥 화면에 값 에코 때이 작업을 수행하지만 :

$param = array($request['customer_id'], eval("return {$request['order_date']}")); 

방법 : 내 배열 내부의 평가를 사용하려고하면

echo eval(" return {$request['order_date']}; "); 

작동하지 않습니다 배열에서 전달하는 값이 문자열 pre-eval 대신 28의 실제 값이되도록이 값을 사용할 수 있습니까?

+0

나는 추수 감사절을 주문 날짜를 계산하는 것으로부터 어떻게 얻었는지 잘 모르겠다. : 이것은 매우 혼란 스럽다. – Oldskool

+0

@Oldskool - OP의 전체 쿼리를 보면 orderDate가 최종 매개 변수임을 알 수 있습니다. 평가 된 날짜를 해당 매개 변수로 전달해야합니다. – EmmyS

답변

1

당신은 당신이하고 싶지 않은 귀환 부분에서 $ 요청을 탈출했습니다. 이 방법은 효과가 있지만 ID를 추가하여 데이터베이스의 행을 반환하면 평가가 수정되지 않아야합니다.

$sql = "SELECT customer_id, CONCAT('return ', order_date, ';') as function from customer_orders WHERE customerID = ? AND orderDate = ?"; 
$param = array($request[ 'customer_id' ], eval($request[ 'function '])); 

--- 
OR 
--- 

$evalData = eval(" return {$request['order_date']}; "); 
$param = array($request['customer_id'], $evalData); 
+0

내 함수에서 사용할 때 실제로 반향하지 않습니다. 여전히 eval을 사용할 수 있습니까? – EmmyS

+0

나는 그것이 효과가 있다고 말하고 싶습니까?하지만 테스트를해야합니다. ($ request [ 'customer_id'], eval ("return {$ request [ 'order_date']} 그것 – Ascherer

+0

흠 나는 에코가 작동하지만, 배열에서 그것을 사용하지 않기 때문에 나는 아직도 뭔가 잘못하고있다. – EmmyS

-1

예, 변경할 수 있습니다. 현명한 결과가 아니라면 유용한 결과를 얻으십시오.

date('d', strtotime("thursday, november ".date("Y")." + 3 weeks")) 

이 "올해의 추수 감사절을 계산"할 수있는 정보는 다음과 같습니다

귀하의 입력 데이터는 문자열입니다.

$dateCalculations = array(
    'date(\'d\', strtotime("thursday, november ".date("Y")." + 3 weeks"))' => function() 
     { 
      return date('d', strtotime("thursday, november ".date("Y")." + 3 weeks")); 
     } 
    'date(\'...whatever else is in the system...' => function(){} 

    // alias names also work 
    'thanksgiving' => function() 
     { 
      return date('d', strtotime("thursday, november ".date("Y")." + 3 weeks")); 
     } 
); 

당신은 다음 호출 할 필요가 기능을 배열에 데이터베이스에서 문자열을 찾아 즉시 가지고 시도 할 수 있습니다 :

이 문자열과 필요한 기능을 실행 감지하는 조회 테이블을 설정할 수 있습니다
$thanksgiving = $dateCalculations[$dbvalue](); 

여기서 어디든 갈 수 있습니다.별칭 이름 "thanksgiving"과도 작동하므로 데이터베이스에서 바꿀 수 있습니다.이 braindead 접근법이 사용 된 다른 위치를 알고 있다면 ... 그렇지 않으면 적어도 최선을 다했습니다.