2017-05-10 43 views
0

這段代碼現在給我一些問題。出於某種原因,當您使用複選框進行提交時,它將跳過UPDATE並直接進入INSERT,在應該更新時創建另一個條目。如果更新失敗,我應該如何處理INSERT

有沒有更好的方法來處理這種情況下,如果你想INSERT,如果條目不存在?

if(isset($_POST['R_domain'])){ 
    $_reseller="20217"; 
    $_DOMAIN=$_POST['R_domain']; 
    $_COMPANY_NAME=$_POST['company_name']; 
    $_COMPANY_EMAILS=$_POST['company_email']; 
    $_PHONE_NUMBER=$_POST['phone_number']; 
    $_ADDRESS=$_POST['street_address']; 
    $_CITY=$_POST['city']; 
    $_STATE=$_POST['state']; 
    $_ZIPCODE=$_POST['zipcode']; 
    if(isset($_POST['hmbill'])) { 
     $_HMBill = "1"; 
    } 
    else if(!isset($_POST['hmbill'])) { 
     $_HMBill = "0"; 
    } 
    $_DEPT="NA"; 

    $conn = mysqli_connect("", "", "", ""); 
    $_sql_update="UPDATE company SET DOMAIN='$_DOMAIN', COMPANY_NAME='$_COMPANY_NAME', COMPANY_EMAILS='$_COMPANY_EMAILS', PHONE_NUMBER='$_PHONE_NUMBER', ADDRESS='$_ADDRESS', CITY='$_CITY', ZIPCODE='$_ZIPCODE',STATE='$_STATE',DEPT='$_DEPT',HMBILL='$_HMBill' WHERE `DOMAIN` = '$_DOMAIN'"; 
    mysqli_query($conn, $_sql_update); 
    if(mysqli_affected_rows($conn)>0){} 
    else { 
     $_sql_insert = "INSERT INTO `company` (ID,RID,DOMAIN,COMPANY_NAME,COMPANY_EMAILS,PHONE_NUMBER,ADDRESS,CITY,ZIPCODE,STATE,DEPT,HMBILL) VALUES('','$_reseller','$_DOMAIN','$_COMPANY_NAME','$_COMPANY_EMAILS','$_PHONE_NUMBER','$_ADDRESS','$_CITY','$_ZIPCODE','$_STATE','$_DEPT','$_HMBill')"; 
     mysqli_query($conn, $_sql_insert); 
    } 
+0

你在哪裏檢查複選框的條件? –

+0

您的腳本處於[SQL注入攻擊]風險中(http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) 甚至 [如果您正在轉義輸入,它不安全!](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string) 使用[編寫參數化語句](http:// php .net/manual/en/mysqli.quickstart.prepared-statements.php) – RiggsFolly

+0

任何人都知道IF IFSE屬於哪個IF?外部中頻或內部中頻? – RiggsFolly

回答

1

我想發生了什麼事情,你檢查你的更新查詢後,如果任何行已經更新。如果更新後列中的所有數據都保持不變,則mysqli_affected_rows函數將返回0,從而將您的代碼移至插入查詢。

你應該做的是做一個Select查詢來檢查是否存在記錄WHERE DOMAIN = '$_DOMAIN'。如果是,請進行更新,否則請進行插入。修改你當前的if else這個。 例如:

1

如果要更新信息(如果記錄存在),則可以在SQL中使用「ON DUPLICATE」關鍵字。以下是一個示例:

INSERT INTO 
    `company` 
(ID, RID, DOMAIN, COMPANY_NAME, COMPANY_EMAILS, PHONE_NUMBER, ADDRESS, CITY, ZIPCODE, STATE, DEPT, HMBILL) 
VALUES(
    NULL, 
    '$_reseller', 
    '$_DOMAIN', 
    '$_COMPANY_NAME', 
    '$_COMPANY_EMAILS', 
    '$_PHONE_NUMBER', 
    '$_ADDRESS', 
    '$_CITY', 
    '$_ZIPCODE', 
    '$_STATE', 
    '$_DEPT', 
    '$_HMBill' 
) 
ON DUPLICATE KEY UPDATE 
`ADDRESS` = VALUES('$_ADDRESS'), 
`CITY` = VALUES(`$_CITY`), 
`ZIPCODE` = VALUES(`$_ZIPCODE`) 

如果此插入操作重複,則此SQL將更新地址,城市,郵政編碼。您當然應該根據需要進行更改以適應SQL代碼。

我希望這會有所幫助。