Как закрыть цикл PHP, который вставляет из DOM в MySQL - PullRequest
0 голосов
/ 21 марта 2011

Этот вопрос может быть немного специфичным для stackoverflow, но здесь он есть.У меня есть php-файл, который принимает html, записывает его в новый файл, вставляет имя файла в базу данных ... все это прекрасно работает.

Теперь я хочу извлечь ссылки в html, используяDOM.Я получил код от здесь и получил следующую ошибку:

Ошибка разбора: синтаксическая ошибка, неожиданный конец $ ... в строке 72

Казалось бы, я забылзакрывать что-то или закрывать что-то ничего не подозревая.Тем не менее, единственный новый код взят по приведенной выше ссылке, и, похоже, он в порядке.Однако я новичок в DOM и PHP, так что, возможно, вы можете помочь.Любые указатели приветствуются.Вот что я добавил:

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

//the above works fine, but when I add the loop bellow it fails


for ($i = 0; $i < $hrefs->length; $i++) {
    $href = $hrefs->item($i);
    $url = $href->getAttribute('href');
    storeLink($url,$target_url);

function storeLink($url) {
    $query = "INSERT INTO happyturtle (ad2, ad3) VALUES ('$url', '$gathered_from')";
    mysql_query($query) or die('Error, insert query failed');

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
echo "1 record added";
}

Для полноты, вот весь код с новыми битами:

<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="****";
$usertable="****";

$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);


for ($i = 0; $i < $hrefs->length; $i++) {
    $href = $hrefs->item($i);
    $url = $href->getAttribute('href');
    storeLink($url,$target_url);

function storeLink($url) {
    $query = "INSERT INTO happyturtle (ad2, ad3) VALUES ('$url', '$gathered_from')";
    mysql_query($query) or die('Error, insert query failed');
$sql="INSERT INTO happyturtle (time, ad1)
VALUES
('$FileName','$domains')";

}

mysql_close($con);

fclose($FileHandle);

curl_close($ch);

echo $FileName; 

echo "<br/>";

}
}

?>

</body>
</html>

Ответы [ 2 ]

1 голос
/ 21 марта 2011

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

Затем вы увидите, что следующий цикл for:

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

не закрыт: нет конца }, соответствующегодо его открытия {

(Ну, на самом деле, сообщение указывает, что где-то пропущен }, и это показано при отступе кода - это может быть этот цикл for, которыйне закрытый или другой ваш {; вам решать, что должно быть закрыто, в зависимости от логики вашего кода)


Или, возможно, проблема в том, что у вас есть дваfor петли, которые выглядят примерно одинаково:

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

        // Some code

    } // closing of the inner for-loop
// Here, the first for-loop is not closed

Итак, либо:

  • закройте внешний for -loop,
  • или удалитеэто, если это не полезно.
0 голосов
/ 21 марта 2011

Вы не должны закрывать цикл здесь

for ($i = 0; $i < $hrefs->length; $i++) {
    $href = $hrefs->item($i);
    $url = $href->getAttribute('href');
    storeLink($url,$target_url);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...