2017-05-10 9 views
0

このコードは今、私にいくつかの問題を与えています。何らかの理由で、チェックボックスをオンにしてサブミットすると、UPDATEをスキップしてINSERTにまっすぐ進んで、ただ更新する必要があるときに別のエントリを作成します。UPDATEが失敗した場合に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インジェクション攻撃]の危険にさらされています。(0120-18753) 、その安全ではありません!](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 ELSEが属しているIFを知っていますか? OUTER IFまたはINNER IF? – RiggsFolly

答えて

1

何が起こっているかは、更新クエリが更新されたかどうかを確認することです。更新後も列内のすべてのデータが同じままであれば、mysqli_affected_rows関数は0を返し、コードを挿入クエリに移動します。

WHERE DOMAIN = '$_DOMAIN'が存在するかどうかを確認するには、Selectクエリを実行する必要があります。そうであれば、更新を行い、そうでなければ挿入を行います。現在の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コードに合わせて変更する必要があります。

こちらがお役に立てば幸いです。

関連する問題