【问题标题】:how to make a limit 20 users maximum to choose one package如何限制最多 20 个用户选择一个包
【发布时间】:2022-01-10 17:36:59
【问题描述】:

这是我的代码,负责将选择的每个包名称分配给 特定的用户名我的想法是添加另一个查询,例如 query = 从 userName = 'package_name' 的用户中选择用户名; 并且在执行此查询之后,如果受影响的行 => 20 用户不应该能够 选择这个套餐 否则 userName 将被分配给那个包名

<?php
include("session.php");
include("connection.php");

$Pname= filter_input(INPUT_GET,'Pname');
$user_select = $_SESSION['login_user'];

$query='update users set package_name=? where userName=?';
  
$stmt=mysqli_stmt_init($conn);

mysqli_stmt_prepare($stmt,$query) or exit('Query Error.'. mysqli_stmt_errno($stmt));

@mysqli_stmt_bind_param($stmt,'ss',$Pname,$user_select) or exit('Bind Param Error.'); 

mysqli_stmt_execute($stmt) or exit('Query Execution failed.'. mysqli_stmt_errno($stmt));


if (mysqli_stmt_affected_rows($stmt)>0) echo "package chose successfully.";

mysqli_stmt_close($stmt);


mysqli_close($conn);
?>

【问题讨论】:

    标签: php html mysql mysqli


    【解决方案1】:

    使用触发器:

    CREATE TRIGGER tr_bi_users
    BEFORE INSERT ON users
    FOR EACH ROW
    BEGIN 
        IF 20 <= (SELECT COUNT(*)
                  FROM users
                  WHERE package_name = NEW.package_name
                    AND userName <> NEW.userName) THEN
            SIGNAL SQLSTATE = '45000'
                SET MESSAGE_TEXT = 'The limit for this package reached.';
        END IF;
    END
    

    和更新前的相同触发器。

    【讨论】:

      猜你喜欢
      • 2017-09-17
      • 2012-08-05
      • 2015-06-09
      • 1970-01-01
      • 2023-03-31
      • 2010-10-05
      • 1970-01-01
      • 2017-01-22
      • 2021-02-22
      相关资源
      最近更新 更多