2017-10-26 5 views
0

Ich versuche, Daten von einer externen Quelle zu bekommen, aber ich kann nicht die Daten erhalten, und ich bin mit diesem Fehler konfrontiert.Mitglied Funktion Fehler in der Datenextraktion

Notice: Trying to get property of non-object in E:\xampp\htdocs\test\merit-list.php on line 38 Fatal error: Call to a member function find() on null in E:\xampp\htdocs\test\merit-list.php on line 39

Hier ist mein Code

<?php 
      require('resources/inc/simple_html_dom.php'); 
      $linksrc = 'http://58.65.172.36/Portal/WebSiteUpdates/Achievements.aspx'; 
      $curl = curl_init(); 
      curl_setopt_array($curl, array(
      CURLOPT_URL => $linksrc, 
      CURLOPT_RETURNTRANSFER => 1, 
      CURLOPT_FOLLOWLOCATION => 1, 
      CURLOPT_ENCODING => "", 
      CURLOPT_MAXREDIRS => 10, 
      CURLOPT_TIMEOUT => 3000, 
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, 
      CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36', 
      )); 
      $file = curl_exec($curl); 
      $error = curl_error($curl); 
      curl_close($curl); 
      $dom = new simple_html_dom(); 
      $dom->load($file); 
      $doctorDivs = $dom->find("table#Farooq", 0)->children(); 
      $doctors = array(); 
      foreach($doctorDivs as $div){ 
       $doctor = array(); 

       // line 38 
       $image = $doctor["image"] = $div->find('img', 0)->src; 
       $details = $div->find('tr', 0)->find("td"); 
       $name = $doctor["name"] = trim($details[1]->plaintext); 
       $spec = $doctor["desc"] = trim($details[2]->plaintext); 

       $doctors[] = $doctor; 
       echo $image; 
       echo $name; 
       echo $spec; 
      }  

     ?> 
+0

Ist die Steuerung innerhalb der foreach-Schleife gehen? –

+0

Ja, ich möchte die Daten von der externen Verbindung bekommen ich meine alle Bilder Text usw. in der Tabelle # Farooq aber ich verstehe nicht, was das Hauptproblem ist. –

+2

Der Versuch, die Eigenschaft Nicht-Objekt zu erhalten, ist Ihr Problem, das zu null führt. Was genau ist Linie 38? Machen Sie einen Kommentar zu dieser Zeile, damit wir sehen können, welche Zeile es ist –

Antwort

1

Das Problem ist, dass die erste Zeile der Tabelle keine <img> hat, weil es die Reihe der Positionen ist, so $div->find("img", 0) kehrt null. Sie erhalten den ersten Fehler, wenn Sie versuchen, auf null->src zuzugreifen.

Der zweite Fehler ist, weil $div das <tr> Element ist. $div->find("tr") sucht die Kinder von $div, es enthält nicht $div selbst, so dass es immer null zurückgibt. Dieser Code funktioniert auch nicht in der Überschriftenzeile, da er <th> statt <tr> Elemente enthält.

Sie könnten nur die Kopfzeile überspringen, indem sie:

array_shift($doctorDivs); 

vor dem foreach Schleife. Dies wird das erste Element des Arrays entfernen.

Und ändern $details zu:

$details = $div->find("td"); 
+0

Ich habe den Code verwendet, wie Sie sagten , aber ich bin mit diesem Fehler jetzt konfrontiert Warnung: array_unshift() erwartet mindestens 2 Parameter, 1 in E gegeben: \ xampp \ htdocs \ Skansfinal \ Merit-Liste.php on line 35 Hinweis: Der Versuch, Eigentum von Nicht-Objekt in E zu erhalten: \ xampp \ htdocs \ Skansfinal \ Verdienst-list.php on line 39 Hinweis: Undefined offset: 1 in E: \ xampp \ htdocs \ Skansfinal \ Merit-List.php in Zeile 41 –

+0

Hoppla, bedeutete 'array_shift' – Barmar