• 30-04-2017, 00:10:09
    #1
    Merhaba Arkadaşlar

    Basit bir log sistemi yapmaya çalışıyorum. Verileri ekrana yazdırıp ardından db'ye kaydetmek istiyorum. Yazdırma olayında problem yok fakat yazdırılan verileri db'ye kayıt etmede problem yaşıyorum.

    Kod :

    <html>
    
        <title>LOG-V.0.1</title>
    
    </html>
    <?php
    .
    .
    .
    function ipAdresiAl($ip = null){
     
        if($ip == null){
            if(getenv("HTTP_CLIENT_IP")) {
                $ip = getenv("HTTP_CLIENT_IP");
            } elseif(getenv("HTTP_X_FORWARDED_FOR")) {
                $ip = getenv("HTTP_X_FORWARDED_FOR");
                if (strstr($ip, ',')) {
                    $tmp = explode (',', $ip);
                    $ip = trim($tmp[0]);
                }
            } else {
                $ip = getenv("REMOTE_ADDR");
            }
        }
     
        $json = file_get_contents("http://site.com/{$ip}");
        $detaylar = json_decode($json);
        return $detaylar;
    }
     
    $ip = ipAdresiAl('');
     
    echo '
        <strong>Ip Adresi :</strong> '. $ip->ip . '<br/>
        <strong>Hostname :</strong> '. $ip->hostname . '<br/>
        <strong>City :</strong> '. $ip->city . '<br/>
        <strong>Region :</strong> '. $ip->region . '<br/>
        <strong>Country :</strong> '. $ip->country . '<br/>
        <strong>Location :</strong> '. $ip->loc . '<br/>
        <strong>Organization :</strong> '. $ip->org . '<br/>
        <strong>Postal :</strong> '. $ip->postal . '<br/>
    ';
     
    .
    .
    .
    
    
    ?>
    Bu php dosyasını çalıştırdığımda error_log içerisinde aşağıdaki satır oluşmaktadır.

    ---
    [29-Apr-2017 21:08:21 UTC] PHP Catchable fatal error:  Object of class stdClass could not be converted to string in /home/test/public_html/test/test.php on line 54
    ---
    Yukarıdaki kod'un örnek çıktısı aşağıdaki gibidir

    Ip Adresi : 8.8.8.8
    Hostname : No Hostname
    City : Istanbul
    Region : Istanbul
    Country : TR
    Location : 11.0214,21.9684
    Organization : AS47524 Turksat Uydu Haberlesme ve Kablo TV Isletme A.S.
    Postal :
    Host : google.com
    User-Agent : Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0
    Accept : text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language : tr-TR,tr;q=0.8,en-US;q=0.5,en;q=0.3
    Accept-Encoding : gzip, deflate
    Cookie : PHPSESSID=n8rl8d7gnt0hu52nlkvaeffh94
    Connection : keep-alive
    Upgrade-Insecure-Requests : 1
    Cache-Control : max-age=0
    Kısaca yukarıdaki çıktıda bulunan sonuçları db'ye yazdırmak istiyorum naptıysam bir türlü hatayı çözemedim.

    Şimdiden Yarımcı Olan Arkadaşlara Teşekkürler.
    İyi Forumlar.
  • 30-04-2017, 00:34:13
    #2
    Üyeliği durduruldu
    Merhaba
    Benim tavsiyem ekrana yazdırdığı tarda bir dizi oluştur ve bu diziyi serialize ile tek satıra çevir sonra bu veriyi kaydet tekrat çektiğinde unserialize ile tekrar diziye çevir dilediğiniz yerde kullanın.
  • 30-04-2017, 00:48:01
    #3
    bayraktar adlı üyeden alıntı: mesajı görüntüle
    Merhaba
    Benim tavsiyem ekrana yazdırdığı tarda bir dizi oluştur ve bu diziyi serialize ile tek satıra çevir sonra bu veriyi kaydet tekrat çektiğinde unserialize ile tekrar diziye çevir dilediğiniz yerde kullanın.
    Cevabınız için teşekkürler.

    Rica etsem uygulamalı olarak yardımcı olabilirmisiniz veya herhangi bir kaynak varsa daha önce yapılmış örneklerden atabilirmisiniz ?

    İyi Forumlar.
  • 30-04-2017, 13:47:00
    #4
    Sorgunun "VALUES" kısmındaki değişkenlerin etrafındaki tek tırnaklardan kaynaklanıyor olabilir.

    '$ip', '$hostname', '$city', '$region', '$country'
    Daha da tuhaf olan bu değişkenler nerede tanımlı, yukarlarda "$ip->hostname" şeklinde kullanımlar varken.
  • 02-05-2017, 20:57:50
    #5
    Ücret ile yaptırmayı düşünürseniz pm alabilir miyim.
  • 03-05-2017, 01:57:12
    #6
    Alexis adlı üyeden alıntı: mesajı görüntüle
    Sorgunun "VALUES" kısmındaki değişkenlerin etrafındaki tek tırnaklardan kaynaklanıyor olabilir.

    '$ip', '$hostname', '$city', '$region', '$country'
    Daha da tuhaf olan bu değişkenler nerede tanımlı, yukarlarda "$ip->hostname" şeklinde kullanımlar varken.
    Cevap için teşekkürler. Tırnaklardan dolayı değil problem test ettim. Yukarıda verdiğim kodlardan başka kod yoktur yani ne çekip yapıyosa o kodlarda yapıyor.

    Blackhatx86 adlı üyeden alıntı: mesajı görüntüle
    Ücret ile yaptırmayı düşünürseniz pm alabilir miyim.
    Malesef bunu sorma amacım kendimi geliştirmek yukarıdaki gibi basit bir sistem yapmak istiyorum ama çok fazla tecrübem olmadığı için takıldım.
    ilginiz ve cevabınız için teşekkürler.

    Problem hala devam etmekte.
  • 03-05-2017, 09:25:21
    #7
    Merhaba

    Sorun tek tırnak v.s değil. İşlem yapılan kod bu kadar ise veri tabanına kayıt edilmesini istediğiniz değişkenlerde sorun var bakın yazmış zaten

    "PHP Catchable fatal error: Object of class stdClass could not be converted to string"

    $ip değişkenini direkt gönderemezsiniz.

    $ip->ip olarak dener misiniz diğer tüm değerleri de.
  • 03-05-2017, 15:33:52
    #8
    Ambassador adlı üyeden alıntı: mesajı görüntüle
    Merhaba

    Sorun tek tırnak v.s değil. İşlem yapılan kod bu kadar ise veri tabanına kayıt edilmesini istediğiniz değişkenlerde sorun var bakın yazmış zaten

    "PHP Catchable fatal error: Object of class stdClass could not be converted to string"

    $ip değişkenini direkt gönderemezsiniz.

    $ip->ip olarak dener misiniz diğer tüm değerleri de.
    Cevap için teşekkürler dediğiniz gibi yaptım ip ile ilgili kayıt işlemleri sorunuz fakat header'ı kayıt ederken problem yaşıyorum.

    Header için kullandığım kod satırları aşağıdaki gibidir.

    $headers = apache_request_headers();        
    foreach ($headers as $header => $value) {
     echo "<div>";
     $topluheader = "<b>$header</b> : $value";
     echo $topluheader;
     echo "</div>";
    }
    Headerları tek tek çekip db'ye kaydetmek için yol bulamadığım için çektiği tüm header bilgilerini db'de tek bir sutuna kaydetsin diye topluheader diye birşey oluşturdum.

    Problem şu header'ı eklerken aşağıdaki gibi db'ye eksik ve rastgele headerlar ekliyor.

    <b>Cache-Control</b> : max-age=0
    Olması gereken aşağıdaki gibidir

    Host : denemesite.com
    User-Agent : Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0
    Accept : text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language : tr-TR,tr;q=0.8,en-US;q=0.5,en;q=0.3
    Accept-Encoding : gzip, deflate
    Connection : keep-alive
    Upgrade-Insecure-Requests : 1
    Cache-Control : max-age=0
    Burdaki amaç kullanıcı'nın siteye girişte kullandığı headerları çekip göstermek ve veritabanına kayıt etmek.
  • 03-05-2017, 15:59:43
    #9
    Merhaba,

    Bakın dikkat ettiyseniz foreach döngünüz her seferinde topluheader in değerini değiştiriyor ve son değer olarak Cache-Control : max-age=0 i alıyor. Bundan dolayıda tek bir değeri kaydediyor. Sizin yapmanız gereken her seferinde topluheader değişkeninin değerini saklamanız yani silmemeniz gerekiyor. Kısacası;

    Sizin yapmanız gereken kod bloğu şu şekilde;

    foreach ($headers as $header => $value) { 
     echo "<div>"; 
     $topluheader = $topluheader . "<b>$header</b> : $value<br />"; 
     echo "<b>$header</b> : $value"; 
     echo "</div>"; 
    }