Arama butonu
Bu konudaki kullanıcılar: 1 misafir
1
Cevap
952
Tıklama
0
Öne Çıkarma
PHP Bot Döngü Sorunu
Y
9 yıl (32 mesaj)
Onbaşı
Konu Sahibi

Merhaba arkadaşlar. Baska bir siteden verileri parçalayarak alıyorum. Ancak sadece ilk veriyi alıyorum. Ben alttaki verileri de alıp veritabanına kaydetmesini istiyorum. Bu haliyle sadece ilk karşısına çıkanı kaydediyor. Yardımcı olabilir misiniz?




<?php
$dbhost = "localhost";
$dbuser = "root";
$dbpass = "";
$dbname = "bot";
[MENTION=382]MYSQL[/MENTION]_connect ($host,$dbuser,$dbpass,$dbname) or die ("Veritabanına bağlanılamadı... Veritabanı bilgilerini kontrol edin"); [MENTION=382]MYSQL[/MENTION]_select_db ($dbname) or die ("Veritabanına Bağlanılamadı...");
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET COLLATION_CONNECTION = 'utf8_general_ci'");
//cekilecek site

$link = "****Ilan_Menu.aspx?ID=0&lb=%27T%C3%BCm%20%C4%B0lanlar%27";
//parcalama

$parcala = '@<li style=\'clear:left;\'><img class=\'limg2\' src=\'./(.*?)\'/>@si';
//$parcala = '@<a href=\'yeni_PDF.aspx(.*?)\' target=\'_blank\'>(.*?)</a>@si';
//$parcala = '@<a href=\'yeni_PDF.aspx(.*?)\' target=\'_blank\'>(.*?)</a>@si';
$botara = file_get_contents($link);

preg_match_all($parcala,$botara,$resim);
//preg_match_all($parcala,$botara,$link);
//preg_match_all($parcala,$botara,$baslik);

$resim = $resim[1][0];
$link = $link[1][0];
$baslik = $baslik[2][0];



echo "
<br>$resim</br>
<br>$baslik</br>
<br>$link</br>";

$save = mysql_query("insert into dpb(baslik,resim,link) values
('$baslik', '$resim','$link')");

if($save){
echo "<p style='color: red'> $baslik Eklendi</p>";
}else{
echo "<p style='color: yellow'> $baslik Eklenmedi</p>";
}

}

?>

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



V
9 yıl (133 mesaj)
Çavuş

Kim bilir hangi siteden ne çekip kaydedeceksiniz? Neyse, örnek kodları da yazarak soruyu doğru sormuşsunuz, bu yüzden cevabı hak ediyor.

Bilgileri çekip parçaladığınız bölümün doğru olduğunu varsayıyorum;

burası değişecek, çünkü burada [0] indeksindeki tek bir bilgi değil bilgilerin olduğu arrayı almak istiyoruz:


$resim = $resim[1][0];
$link = $link[1][0];
$baslik = $baslik[2][0];


şöyle olacak:


$resim_array = $resim[1];
$link_array = $link[1];
$baslik_array = $baslik[2];


Doğru yaptıysak $baslik_array'da sırasıyla başlıklar, $link_array'da sırasıyla linkler bulunmalı.

Bu arraylar ile bir foreach döngüsü kuracağız ki tüm çekilen malzemeyi kaydetsin.
Yine bilgi çekme işi yolunda gitmiş ve arrauy'larda eşit sayıda malzeme bulunuyor varsayacağız.


foreach ($baslik_array as $key=>$baslik){
$resim=$resim_array[$key];
$link=$link_array[$key];
$save = mysql_query("insert into dpb(baslik,resim,link) values ('$baslik', '$resim','$link')");
}



Her şey yolunda gittiyse malzemeyi kaydetmiş olmalı.

Not: Sadece sizin yazdığınızdan giderek düzeltmeye çalıştım. Bazı bilgiler eksikse daha doğrusu array içerikleri aynı sayıda değilse (mesela bir tanesinde resim yoksa resim arrayı bir adet az metin içeriyorsa) yukarıdaki kod cortlayacaktır elbette. Oradan itibaren bilgileri yanlış kaydedecektir. (Sınavda kaydırma yapmış gibi)





< Bu mesaj bu kişi tarafından değiştirildi voenetto -- 14 Haziran 2017; 13:56:12 >

DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.