Formdaki gizli alanında değer elde nasıl

4 Cevap php

Ben ayıklamak istediğiniz gizli değere sahip (benim kendi blog / cms i biraz oynamak istediğiniz yüklemeniz) formu var. Sorun bu sayfada 2 formları, değeri ile bu gizli alan ile her olmasıdır. Her form alan adını aynı, sadece gizli değer farklılık olduğunu. Böyle bir şey:

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

Hem html kaynağı aynı görünüyor. Yani, ben bu sayfa ile php dosyası açıldı kendime yardım etmek, onu düzenlenmiş ve i lüzum alanından önce bazı rasgele kelime ekledi. Yani şimdi bir alan (i don't istediğiniz bir) i need yukarıdaki kodda ama alanda olduğu gibi bu gibi:

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

How do i extract value from field i need (kendi kodunu önce mywordshere ile) i (libcurl ile yakaladı) php değişken benim sayfanın html kaynak varsa?

4 Cevap

Assumably iki biçimi farklı isimler, doğru var? DOM farkında şey ile kazınır metin ayrıştırmak Yani, onun ana form bunun için arayarak giriş alanı seçmek gerekir.

Kullanan bir örnek 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' );

?>

Note: HTML dizesi must bu iş için tanımlanmış bir DOCTYPE var.

Değeri kullandığınız hangi yöntemi bağlı olarak, ya $_GET["_hiddenname"] veya $_POST["_hiddenname"] sunulacak. Hangi form göndererek hangi yapıyor bağlıdır olsun tek.

Eğer aynı within aynı formu adlı iki alanları varsa, daha büyük bir sorun var.

Eğer aynı adlı iki giriş alanları ve aynı kimliğe sahip, gerçek bir sorun olduğu gerçeği. HTML elemanları için id özellik, belirli bir sayfada benzersiz olması gerekiyordu, ve o olsaydı, bir DOM parser ile bunu kolayca yapabilir. Örnek:

$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
    }
}

Eğer bu yaklaşım alamaz ve siz belirleyebilir bir dize ile giriş işaretlenmiş beri, ben string fonksiyonları bir arada kullanmak:

$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];
    }
}

Ben kuvvetle sen ancak eleman kimlikleri yeniden çalışmak ve DOM yaklaşımı kullanmanızı tavsiye ederim.