Come chiudere il loop PHP che inserisce da DOM in MySQL

Questa domanda potrebbe essere un po 'specifica per StackOverflow, ma eccola qui. Ho un file php che sta prendendo html, lo scrive in un nuovo file, inserisce il nome del file in un database … tutto ciò che funziona bene.

Ora voglio estrarre i collegamenti in html, usando DOM. Ho ricevuto il codice da qui e ho ricevuto il seguente errore:

Errore di analisi: errore di syntax, fine $ inatteso … nella row 72

Sembrerebbe che mi sia dimenticato di chiudere qualcosa o di chiudere qualcosa in modo non sospetto. Tuttavia l'unico nuovo codice è dal link sopra e sembra essere in ordine. Comunque sono nuovo a DOM e PHP, quindi forse puoi aiutare. Qualsiasi suggerimento è apprezzato. Ecco cosa ho aggiunto:

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

Per completezza, ecco l'integer codice con i nuovi bit inclusi:

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

Prova a rientrare correttamente il tuo codice.

Vedrai quindi il seguente ciclo for :

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

non è chiuso: non c'è fine } che corrisponde alla sua apertura {

(Beh, in realtà, il messaggio indica che c'è un missing } da qualche parte, e questo viene mostrato quando indentate il codice – potrebbe essere questo ciclo chiuso che non è chiuso, o uno dei vostri altri { ; fino a voi per scoprire cosa dovrebbe essere chiuso, a seconda della logica del tuo codice)

O forse il problema è che hai due loops for loop che sembrano uguali:

 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 

Quindi, entrambi:

  • chiudi l'esterno for -loop,
  • o rimuoverlo, se non è utile.

Non devi averlo chiuso per loop qui

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