[ask] ON DUPLICATE KEY UPDATE


Status
Not open for further replies.

xpreborn

Apprentice 1.0
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.
 

PusatHosting

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

Apprentice 1.0
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
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:

PusatHosting

Hosting Guru
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 ?

Yap rasanya seperti itu.
 

xpreborn

Apprentice 1.0
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.
 

xpreborn

Apprentice 1.0
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");
 

masiqbal

Hosting Guru
Verified Provider
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.
gak ada bedanya antara mysql atau mysqli untuk perintah SQL nya.
 

xpreborn

Apprentice 1.0
gak ada bedanya antara mysql atau mysqli untuk perintah SQL nya.
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");
 
Status
Not open for further replies.

Top