我正試圖從網頁中檢索數據。手動更改下拉列表會在頁面上生成內容,並且會存儲該內容,以便在刷新頁面時,更改後的數據將保留,除非手動再次進行更改。僅在手動刷新後纔會更改內容CURL
因此,根據下拉的設置,我會收到不同的數據。
我已經想通了如何確定我想從頁面檢索數據字段和改變,像這樣的URL顯示什麼數據:
main.php:
public function options($url = null) {
// no data fields provided
if($url == null)
$url = 'http://www.example.com/page/';
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$retrievedPage = curl_exec($ch);
// retrieve options from drop down menu
$regex = '/<div class=\"form\-item form\-type\-select\">(.*?)<\/div>/s';
preg_match($regex, $retrievedPage, $options);
$doc = new DOMDocument();
@$doc->loadHTML($options[0]);
$ops = $doc->getElementsByTagName('option');
$singleOption = array();
$options = array();
foreach($ops as $op) {
$name = $op->nodeValue;
$id = $op->getAttribute('value');
$singleOption = array(
'name' => $name,
'id' => $id
);
array_push($options, $singleOption);
}
return $options;
}
public function updateOptions($id) {
$url = 'http://www.example.com/page/?id='.$id;
$this->options($url);
}
index.php:
<?php
$email = '[email protected]';
$password = 'mypassword';
// options() and updateOptions() are in the Account class
$user = new Account($email, $password);
// options array, initially called to display dropdown options
$options = $user->options();
if(isset($_POST['options'])) {
$user->updateOptions($_POST['options']);
}
?>
<form method="POST">
<select name="options" onchange="this.form.submit()">
<?php foreach($options as $key): ?>
<?php
echo '<option value="'.$key['id'].'">'.$key['name'].'</option>';
?>
<?php endforeach; ?>
</select>
</form>
下拉菜單成功地看起來像這樣在H TML:
<select>
<option value="123">Option 1</option>
<option value="456">Option 2</option>
</select>
的問題是,改變的內容將不會出現,除非我手動刷新我的網站的形式提交後。
我放了回聲來檢查curl_exec()
之前的URL,它似乎成功地在URL的末尾添加了發佈數據字段,但是除非手動刷新我的網站,否則內容不會出現。
查找到阿賈克斯。 – Mihai