Как вставить ссылки, очищенные с помощью DOM, в базу данных MySQL?(или что я делаю не так?) - PullRequest
2 голосов
/ 21 марта 2011

Я собираю php-скрипт, который извлекает html, используя curl, копирует его на новые страницы и сохраняет названия страниц. Все это работает, но я также хочу собрать URL-адреса на странице и ввести их в базу данных. Судя по моим исследованиям, DOM - лучший способ сделать это. Однако я получаю «Ошибка, вставка запроса не удалась», когда я включаю DOM в свой код. Здесь , где я получаю код DOM. Я подозреваю, что это проблема с базой данных.

DOM, PHP и MySQL являются новыми для меня, поэтому любые комментарии, указатели или предложения будут полезны и оценены.

Любые комментарии по поводу общего подхода или предложения альтернативы также приветствуются. Я не совсем уверен, что DOM лучше всего подходит для удаления URL-адресов из HTML.

<html>
<body>

<?
$urls=explode("\n", $_POST['url']);
$proxies=explode("\n", $_POST['proxy']);

for ( $counter = 0; $counter <= 6; $counter++) {
for ( $count = 0; $count <= 6; $count++) {

 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL,$urls[$counter]);
 curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 0);
 curl_setopt($ch, CURLOPT_PROXY,$proxies[$count]);
 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($ch, CURLOPT_CUSTOMREQUEST,'GET');
 curl_setopt ($ch, CURLOPT_HEADER, 1); 
curl_exec ($ch); 
$curl_scraped_page = curl_exec($ch); 

$FileName = rand(0,100000000000);
$FileHandle = fopen($FileName, 'w') or die("can't open file");
fwrite($FileHandle, $curl_scraped_page);


$dom = new DOMDocument();
@$dom->loadHTML($curl_scraped_page);
$xpath = new DOMXPath($dom);
$hrefs = $xpath->evaluate("/html/body//a");

$hostname="****";
$username="****";
$password="****";
$dbname="leadturtle";
$usertable="happyturtle";

$con=mysql_connect($hostname,$username, $password) or die ("<html><script language='JavaScript'>alert('Unable to connect to database! Please try again later.'),history.go(-1)</script></html>");
mysql_select_db($dbname ,$con);



function storeLink($url) {
    $query = "INSERT INTO happyturtle (time, ad1, ad2) VALUES ('$FileName','$url', '$gathered_from')";
    mysql_query($query) or die('Error, insert query failed');
}
for ($i = 0; $i < $hrefs->length; $i++) {
    $href = $hrefs->item($i);
    $url = $href->getAttribute('href');
    storeLink($url,$target_url);

}


mysql_close($con);

fclose($FileHandle);

curl_close($ch);

echo $FileName; 

echo "<br/>";

}
}

?>

</body>
</html>

1 Ответ

2 голосов
/ 21 марта 2011

Вы не экранируете значения в вашем запросе SQL.

Если ваши строковые параметры содержат ', это приведет к синтаксической ошибке (в лучшем случае). Но это также может привести к внедрению источника и большой дыре в безопасности (http://xkcd.com/327/:)!

Сначала проверьте ваш ввод.

Пожалуйста, добавьте сообщение об ошибке в вашем вопросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...