php - 如果两个输入尚不存在,我如何才能插入数据库?

标签 php mysql

我想向完成某些任务(例如达到 50 级)的用户颁发“奖励”。我还想记录所有内容,以防出现问题而管理员必须手动插入它。

奖项的 php 链接在每个页面上,并检查“users”表中的用户是否已达到 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);

这将阻止同一用户和级别的第二次插入,并会抛出 1062 错误,我相信您可以轻松处理该错误。

关于php - 如果两个输入尚不存在,我如何才能插入数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37969652/

相关文章:

php - HTML 表单 PHP 发布到自己以验证或提交到新页面

php - 无法在 PHP MYSQL 中使用 MAX() 访问 'fieldName' 的行

php - 循环遍历sql查询的结果

php - 为不同的查询创建php函数

php - Laravel 4.2 和 smtp.gmail.com

java - 为什么我会收到此 SQLException 错误,指出找不到合适的驱动程序?

Mysql查询没有按照我的意愿获取数据

php - 在 Laravel 5.3 下使用带有 mongo-php-library 2.2 驱动程序的 Gridfs

mysql - C MySQL API 准备语句限制

php - 2个日期字段之间的MySQL查询