2012-05-10 4 views
1

PHP 파일에 게시하는 동적으로 이름이 지정된 100 개가 넘는 필드가있는 양식이 있으며 현재 PHP 파일에 게시 된 모든 필드를 가져 가고 싶습니다.양식에서 _POST 데이터를 동적으로 MYSQL에 삽입합니다.

이에서
Array ([option_page] => plugin_options 
[action] => update 
[_wpnonce] => a51bfc281a 
[_wp_http_referer] =>/wp-admin/options-general.php page=plug.php 
[13939069] => 
[2171] => 
[3600645] => 
[2168] => 
[13937024] => 
[submit] => Save Changes 
[__qca] => P0-1887521465-1334258158937 
[s_vi] =>) 

나는 형식으로 MySQL의 테이블에 데이터를 삽입 할 :

id  | option_name  | value 
-------------------------------------------- 
autonum | post data key | post data value 

하지만 문제는 내가 후 포스트 데이터 값 만에 intrested 오전 : [_wp_http_referer]하지만 [이전 제출] 참조 포인트로 사용할 수 있습니다.

내가 함께 stuggling하고 부분은 다음과 같습니다

  • 어떻게 동적으로 게시 데이터의 그 부분을 얻을 것?
  • 필요한 배열 키를 가져와 테이블에 동적으로 삽입하려면 어떻게해야합니까?

감사합니다. 은 "좋은"모든 값은 항상 숫자 키가있는 경우

$discard_array = array('option_page', 'action', '_wpnonce', '_wp_http_referer', 'submit', '__qca', 's_vi'); 
$good_array = array(); 
foreach ($_POST as $key => $val) 
{ 
    if (!in_array($key, $discard_array)) $good_array[$key] = $val; 
} 

// use $good_array to insert your data into db 
print_r($good_array); 

또는, 여기에 간단한 변화이다 :

+0

보십시오. –

+0

그 때 당신은 무엇을 건의 할 것입니까? –

+0

당신이 원치 않는 값을 알고 요청과 함께 전송 된 다른 모든 포스트 값을 얻으므로 무시할 값의 블랙리스트를 작성할 수 있습니다. – dm03514

답변

1

당신 매트 내가 * 사이 * 순서가 동일하게 보장되지 않기 때문에이 문제를 해결하기위한 올바른 방법을`$ _POST` 요소입니다 가져 오는 생각하지 않습니다이

$start = array_search("_wp_http_referer",array_keys($_POST))+1; 
$end = array_search("submit",array_keys($_POST))-1; 
$newArr=array_slice($_POST, $start, $end); 
foreach($newArr as $k=>$v) 
{ 
    // $k is the key name and $v is the value of that key 
    //echo $k."=".$v."<br />"; 
    $val=mysql_real_escape_string($v); 
    $sql="INSERT INTO table_name VALUES (null, ".$k.", ".$val.")"; 
    mysql_query($sql); 
} 
+0

이것은 거의 그들의 열쇠가 같은 이름을 그들에게 0,1,2의 이름을 바꾸지 않고 유지하는 것입니다. 같은 값을 유지할 방법이 있습니까? –

+0

localhost에서 테스트 해본 결과, 키의 이름이 변경되지 않습니다. –

+0

미안하지만 $ k 대신 $ key를 사용하는 것이 내 문제입니다. 내가 볼 수있는 한 가지는 제출하는 스틸 링입니다. :에스 –

0
$counter = 0; 

foreach($_POST as $key=>$value) 
{ 

if($key == "_wp_http_referer") 
{ 
$counter = 1; 
} 

if($counter == "1") 
{ 
if($key != "submit") 
{ 
mysql_query("INSERT INTO table_name(id, option_name, value) VALUES ('','".mysql_real_escape_string($key)."','".mysql_real_escape_string($value)."')"); 
} 
} 

} 
+0

-1 뻔뻔한 SQL 주입 취약점. –

+0

@MarcB가 mysql_real_escape_string()을 추가했습니다. – Adam

+1

PDO를 사용하십시오.이 사이트는 "Use PDO"메시지로 탔습니다. 이제 mysql_ *이 죽을 때가되었습니다. –

0

당신은 같은 것을 할 수

$good_array = array(); 
foreach ($_POST as $key => $val) 
{ 
    if (is_numeric($key)) $good_array[$key] = $val; 
} 
print_r($good_array); 

희망을 그 도움이됩니다.

+0

미안하지만 완전히 어리 석 으리라 생각합니다. 오류를 계속 발생시키면서 어떻게 '좋은'값을 모두 에코라고 말하면 나머지는 완료할까요? –

+0

오타가있었습니다. 죄송합니다. 업데이트 된 코드를 사용해보십시오. – Juan

0

원하는 키는 모두 숫자로 표시되므로 키만 저장할 수 있습니다. 다른 사람들과 마찬가지로 보안 및 편의성을 높이기 위해 PDO를 사용하는 것이 좋습니다.

$dbh = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); 
foreach($_POST as $key => $value) { 
    if(preg_match("/^[0-9]+$/", $key) { 
     $stmt = $dbh->prepare('INSERT INTO table_name(option_name, value) VALUES (?, ?)'); 
     $stmt->execute(array($key, $value)); 
    } 
} 
관련 문제