2012-02-07 2 views
-3

foreach 루프를 작성하고 여러 줄의 코드에 저장했습니다. 기본적으로 모든 $ _POST 변수를 사용하고 이름을 사용하여 일반 PHP 변수를 만듭니다.PHP : 사용자 정의 함수 내에서 foreach의 값 반환

foreach(array_keys($_POST) as $str) 
{ 
${$str}=mysqli_real_escape_string($connection,trim($_POST["$str"])); 
} 

예상대로 작동하여 변수를 동적으로 생성합니다.

function createvariablesfromPOST() 
{ 
    foreach(array_keys($_POST) as $str) 
    { 
    ${$str}=mysqli_real_escape_string($GLOBALS["connection"],trim($_POST["$str"])); 
    } 
    return //something; 
} 

내가이 함수의 반환을 만드는 방법을 알고 // 뭔가를 해달라고 때문에이 (분명히 작동하지 않는 어떤 것을 : 내가 이런 식으로 수정 있도록

는 지금, 나는 사용자 정의 함수 안에 넣어 싶어 문제가 글로벌 범위에있을 수 있습니다. 여기서 뭘 해야하는거야?

루프가 완료 될 때까지 foreach 루프를 되돌릴 수 없습니다. 그렇지 않니?

도와주세요.

+7

당신이하고있는 일은 ** 절대하지 말아야 할 일의 훌륭한 예입니다. – zerkms

+0

단 하나의 항목 만 반환 할 수 있습니다 ("항목"은 하나의 변수이고 여러 변수를 지닌 배열 일 수도 있습니다).). 함수 밖에서 자동으로 생성 된 변수를 사용하려면 전역 변수로 설정해야합니다. 그러나 위에서 언급 한 것처럼 신뢰할 수있는 솔루션에 대해 생각해야합니다. – djot

+0

안녕하세요, @ Phil : 당신이 언급 한 페이지를 읽고 있어요 –

답변

0

사용자가 제공 한 임의의 변수를 할당하는 것은 매우 위험 할 수 있습니다! 변수를 덮어 쓸 수 있습니다.

이유가 작동하지 않는 이유는 글로벌 주소가 scope에 없기 때문입니다. $GLOBALS[$variable] = 'something';

대신 글로벌 범위에서 격리되도록 변수를 배열에 할당해야합니다. 즉 $input[$$var] = $escaped_value;

+0

감사합니다. foreach 루프 내부에서 변수를 전역으로 설정하라는 제안이 효과적이었습니다. 그러나 당신과 다른 사람들이 지적한 바와 같이 갈등의 가능성을 검토하고 있습니다. –