mysql データベースに書き込みたいデータを含むページをスクリーン スクレイピングしています。
$url = "http://example.com/index.jsp";
$raw = file_get_contents($url);
$newlines = array("\t","\n","\r","\x20\x20","\0","\x0B");
$content = str_replace($newlines, "", $raw);
$start = strpos($content,'<table border="0" cellspacing="0" cellpadding="0" width="100%">"');
$end = strpos($content,'</table>',$start) + 8;
$table = substr($content,$start,$end-$start);
データ処理はうまく機能し、すべての html タグ、空白、および などの html 特殊文字がデータから削除されました。処理ページにエコーされると、値は正常に見えます。
function cleanSiteVal($siteval){
$repl = array('value=', '"');
$siteval = strip_tags($siteval);
$siteval = str_replace($repl, '', $siteval);
$siteval = html_entity_decode($siteval);
return $siteval;
}
foreach ($rows[0] as $row){
if ((strpos($row,'<td align')==true)){
//echo $row;
preg_match_all( '@value="([^"]*)"@', $row, $cells ) ;
$fln = cleanSiteVal($cells[0][0]);
$flf = cleanSiteVal($cells[0][1]);
$sch = cleanSiteVal($cells[0][2]);
$est = cleanSiteVal($cells[0][3]);
$trm = cleanSiteVal($cells[0][4]);
$sts = cleanSiteVal($cells[0][5]);
echo 'flnr: '.$fln.', from: '.$flf.', scheduled: '.$sch.', estimated: '.$est.', terminal: '.$trm.', status: '.$sts.'<br />';
$fliarr[] = array(
0 => $fln,
1 => $flf,
2 => $sch,
3 => $est,
4 => $trm,
5 => $sts
);
}
}
この処理されたデータから作成しているクエリを「エコー」し、phpmyadmin 内で実行されたこのクエリは正常に動作していますが、for ループ内で実行しているクエリは正常に動作していません。
for ($i = 0; $i < count($fliarr); $i++) {
$nrfli = $fliarr[$i][0];
$stat = $fliarr[$i][5];
$term = $fliarr[$i][4];
if ($fliarr[$i][3]!='' || !empty($fliarr[$i][3])) { $abr = $today.' '.$fliarr[$i][3].':00'; } else { $abr = $today.' '.$fliarr[$i][2].':00'; }
//echo 'estimated/sched. time: '.$abr.', flugnr: '.$fliarr[$i][0].', status: '.$stat.'<br />';
$sql = "UPDATE `some_table` SET `val1`='$stat', `val2`='$term', `val3`='$abr' WHERE (`datetime_field` BETWEEN '$sfrom' AND '$till') AND `val4`='$nrfli'";
echo $sql.'<br />';
$res = mysql_query($sql);
if(!$res) {
echo mysql_error().' Fehler bei der Update Abfrage';
} else {
//echo 'Ok, Update Buchungen'.$nrfli.'<br />';
}
}
このクエリを for ループで機能させるにはどうすればよいですか? これは悪い習慣であり、PDOレイヤーを使用してクエリを準備しようとしましたが、それもうまくいきませんでした。
ここでも、for ループのエコーからコピーされたクエリが phpmyadmin で機能しています。なぜ私のforループではないのですか?