簡體   English   中英

如果只有兩個輸入不存在,我如何才能插入數據庫?

[英]How can i only insert into a database if two inputs doesn't already exist?

我想向完成某些任務(例如達到50級)的用戶提供“獎勵”。我還想記錄所有內容,以防萬一出問題並且管理員必須手動將其插入。

獎勵php鏈接在每個頁面上,並檢查“用戶”表中的用戶是否已達到50級。一旦用戶達到50級,它將在表格中插入用戶名,獎勵,時間,原因以及授予獎勵的人“獎項”。

但是,如果用戶為50級,則每次用戶重新加載或進入新頁面時,它將繼續插入“獎勵”表中。 如果用戶尚未獲得特定獎勵,我該如何更新?

if(empty($_SESSION['user'])){

}else{
    $member_id = htmlentities($_SESSION['user']['id'], ENT_QUOTES, 'UTF-8');

    $db_conn = mysqli_connect("localhost", "root", "password", "a276") or die ("Could not connect to database");
    $set_award_query = mysqli_query ($db_conn, "SELECT * FROM users WHERE id='$member_id'");

    while($row = mysqli_fetch_array($set_award_query, MYSQLI_ASSOC)){
        $member_id = htmlentities($_SESSION['user']['id'], ENT_QUOTES, 'UTF-8');
        $member_username = htmlentities($_SESSION['user']['username'], ENT_QUOTES, 'UTF-8');
        $member_level = $row['level'];
    }

//Award level50
if($member_level == '50'){
    $award_sql = "INSERT INTO `awards` (`awardusername`, `awardby`, `award`, `awardmessage`) VALUES ('$member_username', 'System', 'level50', 'Congratulations on reaching level 50!')";
    $db_conn->query($award_sql);
}else{}

您可以在awardusernameaward列上創建UNIQUE INDEX

ALTER TABLE `awards` ADD UNIQUE INDEX awards_key (awardusername, award);

這將防止同一用戶和同一級別的第二次INSERT插入,並且會引發1062錯誤,您相信我可以輕松處理該錯誤。

在獎賞表中創建一個user_id列

檢查$ member_id是否與獎賞表中的user_id相匹配。

如果沒有匹配項,請將user_id($ member_id)存儲在獎勵表中。

// Get the user_id from the award table (Example, this code won't work)

$user_id = "SELECT user_id FROM awards WHERE user_id = $member_id";

// Check if they match

if( $member_id !== $user_id ):
    // Insert into awards table
endif;

我自己找到了解決此問題的方法。 這可能是一種愚蠢的方式(或其他)(我不知道),但它確實有效

    $member_id = htmlentities($_SESSION['user']['id'], ENT_QUOTES, 'UTF-8');

    $db_conn = mysqli_connect("localhost", "root", "password", "a276") or die ("Could not connect to database");
    $set_award_query = mysqli_query ($db_conn, "SELECT * FROM users WHERE id='$member_id'");
    while($row = mysqli_fetch_array($set_award_query, MYSQLI_ASSOC)){
        $member_id = htmlentities($_SESSION['user']['id'], ENT_QUOTES, 'UTF-8');
        $member_username = htmlentities($_SESSION['user']['username'], ENT_QUOTES, 'UTF-8');
        $member_level = $row['level'];
    }

    $check_award_exist_query = mysqli_query ($db_conn, "SELECT * FROM awards WHERE awardusername='$member_username'");
    while($row = mysqli_fetch_array($check_award_exist_query, MYSQLI_ASSOC)){
        $award_username = $row['awardusername'];
        $selected_award = $row['award'];
    }

//Award level50
if($member_username){
    if($member_level == '50'){
        if($selected_award == 'level50'){

        }else{
            $award_sql = "INSERT INTO `awards` (`awardusername`, `awardby`, `award`, `awardmessage`) VALUES ('$member_username', 'System', 'level50', 'Congratulations on reaching level 50!')";
            $db_conn->query($award_sql);
        }
    }else{}
}else{}

感謝所有花時間嘗試幫助我的人! :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM