[ask] ON DUPLICATE KEY UPDATE

Discussion in 'Desain Web dan Programming' started by xpreborn, 29 Sep 2015.

Thread Status:
Not open for further replies.
  1. xpreborn

    xpreborn Poster 2.0

    Messages:
    183
    Likes Received:
    4
    Trophy Points:
    18
    Case dari sini : http://www.diskusiwebhosting.com/threads/ask-notice-undefined-variable.17629/#post-153415
    Jadi saya buat thread khusus saja,
    Tujuannya :
    1. Saya punya satu script php yaitu test.php yang mana akan dijalankan setiap 30 menit dgn fungsi yaitu script tersebut akan melakukan ping ke beberapa IP Address sesuai dgn yg sdh didaftarkan didatabase,
    2. Jika ada IP address yang bisa diping, maka akan dinsert ke database, misal IP 192.168.1.3 reply maka akan diinsert ke database IP Address : 192.168.1.3 status : ALIVE tglalive : tgl/jam saat dicek,
    3. Lalu ketika dicek kembali dan tiba2 IP 192.168.1.3 ini ga bisa diping/RTO maka akan diupdate hasilnya pada nomor "2" di atas yaitu : IP address 192.168.1.3 status : DOWN tgldown : tgl/jam saat dicek,,
    Dan begitu juga untuk IP Address yang lainnya,
    4. Tujuannya untuk memantau IP Address yang down dan sejak kapan downnya dan sudah berapa lama
    5. Berikut yang sudah saya coba buat dgn menggunakan satu IP dulu, namun hasilnya belum sesuai [dia buat baru terus seperti SS hasil record didatabase berikut]
    6. Kira2 apa yang perlu ditambahkan lagi yach Om?
    Code:
    <?php
    function pingAddress($ip) {
    $date = date("Y-m-d H:i:s");
    include("koneksi.php");
    
        $pingresult = exec("ping -c3 $ip", $outcome, $status);
        if (0 == $status) {
            mysqli_query($con,"INSERT INTO coba (ipaddress,status,tglalive)
            VALUES ('$ip','ALIVE','$date') ON DUPLICATE KEY UPDATE tglalive=IF(status='DOWN','$date',tglalive),status='ALIVE'");
            mysqli_close($con);
        } else {
            mysqli_query($con,"INSERT INTO coba (ipaddress,status,tgldown)
            VALUES ('$ip','DOWN','$date') ON DUPLICATE KEY UPDATE status='ALIVE',tglalive='$date'");
            mysqli_close($con);
        }
    }
    
    pingAddress("192.168.1.3");
    SS hasil record di database : http://postimg.org/image/vhkimsxod/

    Sebelumnya terimakasih banyak atas bantuannya.
     
  2. PusatHosting

    PusatHosting Hosting Guru Web Hosting

    Messages:
    3,336
    Likes Received:
    326
    Trophy Points:
    83
    Nah itu kondisinya kalau tidak if ya else jadi tentu datanya akan insert terus.
    Harusnya dibuat kondisi tertentu via selec, misalnya select data dengan ip = "xxxx" jika sebelumnya alive then tidak usah di insert
     
    xpreborn likes this.
  3. xpreborn

    xpreborn Poster 2.0

    Messages:
    183
    Likes Received:
    4
    Trophy Points:
    18
    Berarti maksudnya sebelum proses insert dia akan melakukan pengecekan IPnya terlebih dahulu yach Om apakah sudah atau tidak , jika sudah ada maka akan diproses dgn update status jika belum ada maka akan diproses insert, gitu bukan Om ?

    karena kondisi if else di atas itu pengkondisian hasil pingnya, jadi jika reply maka stausnya ALIVE dan dicatat didatabase, jika tidak bisa diping maka statusnya DOWN dan akan dicatat didatabase juga,
    Berarti maksudnya Om dibuat dua pengkondisian lagi yach ? satu untuk pengkondisian jika reply dan apakah sdh ada atau blm IP tersebut dan satu lagi jika down lalu dicek apakah sdh ada IP tersebut atau blm ?
     
    Last edited: 29 Sep 2015
  4. masiqbal

    masiqbal Expert 2.0

    Messages:
    863
    Likes Received:
    249
    Trophy Points:
    43
    kalau pakai MYSQL ada perintah REPLACE (INSERT jika belum ada, UPDATE jika sudah ada)
     
    xpreborn likes this.
  5. PusatHosting

    PusatHosting Hosting Guru Web Hosting

    Messages:
    3,336
    Likes Received:
    326
    Trophy Points:
    83
    Yap rasanya seperti itu.
     
    xpreborn likes this.
  6. xpreborn

    xpreborn Poster 2.0

    Messages:
    183
    Likes Received:
    4
    Trophy Points:
    18
    @Om @masiqbal dan Om @PusatHosting ,
    Baik Om terimakasih banyak masukannya, saya coba dulu akan diupdate infonya
     
  7. xpreborn

    xpreborn Poster 2.0

    Messages:
    183
    Likes Received:
    4
    Trophy Points:
    18
    Om @PusatHosting saya coba buat gini tapi hasilnya masih sama yach, kira2 kurangnya dmn yach Om ?
    Code:
    <?php
    function pingAddress($ip) {
    $date = date("Y-m-d H:i:s");
    include("koneksi.php");
    
        $pingresult = exec("ping -c3 $ip", $outcome, $status);
        if (0 == $status) {
            mysqli_query($con,"SELECT * FROM coba WHERE ipaddress = '$ip' AND status = 'DOWN'");
            $result=mysqli_query($con,$mysqli_query);
            if(empty($result)){
                    mysqli_query($con,"INSERT INTO coba (ipaddress,status,tglalive) VALUES ('$ip','ALIVE','$date')");
                    mysqli_close($con);
                    }
                     else{
                    $query = "UPDATE coba SET ipaddress='$ip', status='ALIVE', tglalive='$date' WHERE ipaddress='$ip'";
                    mysqli_close($con);
                    }
            }else{
            mysqli_query($con,"SELECT * FROM coba WHERE ipaddress = '$ip' AND status = 'ALIVE'");
            $result=mysqli_query($con,$mysqli_query);
            if(empty($result)){
            mysqli_query($con,"INSERT INTO coba (ipaddress,status,tgldown) VALUES ('$ip','DOWN','$date')");
            mysqli_close($con);
                    }
                     else{
                    $query = "UPDATE coba SET ipaddress='$ip', status='ALIVE', tglalive='$date' WHERE ipaddress='$ip'";
                    mysqli_close($con);
                    }
            }
    }
    pingAddress("192.168.1.3");
    Om @masiqbal
    Saya coba search rata2 perintah REPLACE di mysql yach, kira2 jika mysqli bisa ga Om ? karena saya ada dapat referensi yg mysqlnya lalu saya coba ganti yg mysql ke mysqli diperintah replacenya namun hasilnya juga sama bertambah terus ga diupdte yg sdh ada.
     
  8. xpreborn

    xpreborn Poster 2.0

    Messages:
    183
    Likes Received:
    4
    Trophy Points:
    18
    Saya coba ubah seperti ini ga ada error namun tidak terecord di databasenya, kira2 dmn kurangnya yach Om?
    Code:
    <?php
    function pingAddress($ip) {
    $date = date("Y-m-d H:i:s");
    include("koneksi.php");
    
        $pingresult = exec("ping -c3 $ip", $outcome, $status);
        if (0 == $status) {
            $queryR1 = "SELECT * FROM coba WHERE ipaddress='$ip' AND status='ALIVE'";
            $result = mysqli_query($con,$queryR1);
            if(empty($result)){
                    $queryR = "INSERT INTO coba (ipaddress,status,tglalive) VALUES ('$ip','ALIVE','$date') WHERE ipaddress='$ip'";
                    mysqli_query($con, $queryR);
                    mysqli_close($con);
                    }
                     else{
                    $queryR2 = "UPDATE coba SET ipaddress='$ip', status='ALIVE', tglalive='$date' WHERE ipaddress='$ip'";
                    mysqli_query($con, $queryR2);
                    mysqli_close($con);
                    }
            }else{
            $queryR3 = "SELECT * FROM coba WHERE ipaddress='$ip' AND status='DOWN'";
            $result = mysqli_query($con,$queryR3);
            if(empty($result)){
            $queryR4 = "INSERT INTO coba (ipaddress,status,tgldown) VALUES ('$ip','DOWN','$date') WHERE ipaddress='$ip'";
            mysqli_query($con, $queryR4);
            mysqli_close($con);
                    }
                     else{
                    $queryR5 = "UPDATE coba SET ipaddress='$ip', status='DOWN', tglalive='$date' WHERE ipaddress='$ip'";
                    mysqli_query($con, $queryR5);
                    mysqli_close($con);
                    }
            }
    }
    pingAddress("192.168.1.3");
     
  9. masiqbal

    masiqbal Expert 2.0

    Messages:
    863
    Likes Received:
    249
    Trophy Points:
    43
    gak ada bedanya antara mysql atau mysqli untuk perintah SQL nya.
     
  10. xpreborn

    xpreborn Poster 2.0

    Messages:
    183
    Likes Received:
    4
    Trophy Points:
    18
    Maaf Om, apakah penggunannya seperti ini ? karena saya coba dia insert terus
    Code:
    <?php
    function pingAddress($ip) {
    $date = date("Y-m-d H:i:s");
    include("koneksi.php");
    
        $pingresult = exec("ping -c3 $ip", $outcome, $status);
        if (0 == $status) {
            mysqli_query($con,"REPLACE INTO coba (ipaddress,status,tglalive) VALUES ('$ip','ALIVE','$date')");
            mysqli_close($con);
        } else {
            mysqli_query($con,"REPLACE INTO coba (ipaddress,status,tgldown) VALUES ('$ip','DOWN','$date')");
            mysqli_close($con);
        }
    }
    
    pingAddress("192.168.1.3");
     
Loading...
Thread Status:
Not open for further replies.

Share This Page

Loading...