2009-09-08 3 views
0

양식을 추출해야하는 숨겨진 값으로 양식 (내 블로그/cms에서 약간 재생하고 싶습니다)이 있습니다. 문제는 해당 페이지에 2 개의 양식이 있고 각 페이지에는 값이있는 숨겨진 필드가 있습니다. 각 양식 필드 이름에서 동일하며 숨겨진 값만 다릅니다. 이 같은 것 :양식의 숨겨진 필드에서 값을 추출하는 방법

<input type="hidden" id="_hiddenname" name="_hiddenname" value="valuehere"/> 

두 가지 모두가 같은 HTML 소스로 보입니다. 그래서, 내가이 페이지와 함께 php 파일을 열어 보았고, 그것을 편집하고 필요한 필드 앞에 임의의 단어를 추가했습니다. 이제 하나 개의 필드 (내가하지 원하는 할 사람이) 내가 필요로 위의 코드 만 필드에 같은 것은 같은 것입니다 : 내가 필드에서 값을 추출하려면 어떻게

mywordshere <input type="hidden" id="_hiddenname" name="_hiddenname" value="valuehere"/> 

내가 mywordshere와 ( 필요 그 코드를하기 전에) 만약 내가 libcurl (잡힌 PHP에서 변수 내 페이지의 HTML 소스가?

답변

1

값은 사용하는 방법에 따라 $_GET["_hiddenname"] 또는 $_POST["_hiddenname"] 중 하나에서 사용할 수 있습니다. 어떤 양식을 제출 하느냐에 따라 달라집니다.

의 두 필드가 동일한 양식의 내에있는 경우 더 큰 문제가 있습니다.

+2

페이지가 제출되었지만 포스터가 페이지 긁힌 자국에서 필드를 식별하는 방법을 묻는 경우 true입니다. – dnagirl

1

아마도 두 형식의 이름이 다를 수 있습니다. 맞습니까? 그래서 당신이 무언가를 알고있는 DOM으로 당신의 긁힌 텍스트를 분석한다면, 당신은 그것의 부모 형태로 그것을 검색하여 입력 필드를 선택할 수 있어야합니다.

+0

그게 작동 할 수 있습니다 제안을 주셔서 감사합니다 ... – Phil

1

DOMDocument

<?php 

$html = <<<HTML 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" 
    "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<body> 
    <input type="hidden" id="_hiddenname" name="_hiddenname" value="valuehere"> 
</body> 
</html> 
HTML; 

$doc = new DOMDocument(); 
$doc->validateOnParse = true; 
$doc->loadHTML($html); 

$node = $doc->getElementById('_hiddenname'); 
echo $node->getAttribute('value'); 

?> 

주를 사용하는 예 : 당신의 HTML 문자열 해야 작동이에 대해 정의 된 DOCTYPE 있습니다.

0

두 개의 입력 필드가 동일하고 동일한 id를 갖는 사실이 실제 문제입니다. HTML 요소에 대한 id 속성은 주어진 페이지에서 고유해야하며, 그렇다면 DOM parser을 사용하여 쉽게 지정할 수 있습니다. 예 :

$str = 'mywordshere <input type="hidden" id="_hiddenname" name="_hiddenname" value="valuehere"/>'; 
$pos = strpos($str,'mywordshere'); 
if ($pos !== false) { 
    $valuePos = strpos($str,'value=',$pos); 
    if ($valuePos !== false) { 
     //get text starting from the 'value=' portion of the string 
     $str = substr($str,$valuePos); 
     $arr = explode('"',$str); 
     //value will be in $arr[1] 
     echo $arr[1]; 
    } 
} 

I : 당신이 접근을 할 수 없으며, 당신은 당신이 식별 할 수있는 문자열 입력을 표시 한 이후

$dom = new domDocument; 
$dom->loadHTML($html); 
$dom->preserveWhiteSpace = false; 
$inputs = $dom->getElementsByTagName('input'); 
foreach ($inputs as $i) 
{ 
    if ($i->getAttribute('id') == 'targetId') { 
     //do some stuff 
    } 
} 

, 나는 문자열 함수의 조합을 사용합니다 그러나 요소 ID를 다시 작성하고 DOM 접근법을 사용하는 것이 좋습니다.

+0

나는 그것을 재 작업 할 수 없다, 나는 WordPress를 사용하고있다, 내 사용자 정의 CMS 또는 그런 것 같지 않다 – Phil

+0

일반적으로 돔 또는 PHP를 설치하거나 내가 그것을 활성화해야합니까? – Phil

+0

PHP 코어에 포함되어 있지만 설치에 따라 다릅니다. 활성화되어 있지 않으면 php5-xml이 설치되었는지 확인 (rpm 기반 패키지 용)하거나 --enable-dom 플래그로 다시 컴파일해야합니다. 'phpinfo()'또는'get_loaded_extensions()'의 출력을 검사하거나 명령 행에서'php -m'을 실행하여 설치 여부를 알 수 있습니다. – zombat

관련 문제