Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
限制插入DB、PHP/AJAX的实体数_Php_Mysql_Ajax - Fatal编程技术网

限制插入DB、PHP/AJAX的实体数

限制插入DB、PHP/AJAX的实体数,php,mysql,ajax,Php,Mysql,Ajax,我目前正在尝试建立一个功能,在我的网站上的用户可以取消3个不同的兴趣。我的兴趣使用AJAX插入数据库,我的脚本如下 表格: PHP: 我想问的是,是否有可能我的数据库中每个用户只能有3条记录?那么一旦用户输入了3行,他就不能再输入更多了?如果是这样,最好的选择是什么 谢谢 为了回应@Daniel的建议,我尝试了以下方法,但现在没有插入 $res = mysql_query("select count(*) as cnt from user_interests where user_id=$use

我目前正在尝试建立一个功能,在我的网站上的用户可以取消3个不同的兴趣。我的兴趣使用AJAX插入数据库,我的脚本如下

表格:

PHP:

我想问的是,是否有可能我的数据库中每个用户只能有3条记录?那么一旦用户输入了3行,他就不能再输入更多了?如果是这样,最好的选择是什么

谢谢

为了回应@Daniel的建议,我尝试了以下方法,但现在没有插入

$res = mysql_query("select count(*) as cnt from user_interests where user_id=$useridint")
while($r=mysql_fetch_array($res))
{
if($r["cnt"] < 3)
{
if(isset($_GET['useridint']) && isset($_GET['interest'])){

$url= $_GET['useridint'];
$sitename= $_GET['interest'];

$insertSite_sql = "INSERT INTO user_interests (user_id, interest) VALUES('{$url}' , '{$sitename}')";
$insertSite= mysql_query($insertSite_sql) or die(mysql_error());

echo $sitename;
} else { 
echo 'Error! Please fill all fileds!';
}
}
  else
{
 echo "you have 3 ";
}
}   

快跑。另外,避开用户输入也是个好主意。以防用户决定他最喜欢的网站是;删除数据库-

$res = mysql_query("select count(*) as cnt from user_interests where user_id=$useridint")
while($r=mysql_fetch_array($res))
{
  if($r["cnt"] < 3)
  {
     insert
  }
  else
  {
     error
  }
}

快跑。另外,避开用户输入也是个好主意。以防用户决定他最喜欢的网站是;删除数据库-

$res = mysql_query("select count(*) as cnt from user_interests where user_id=$useridint")
while($r=mysql_fetch_array($res))
{
  if($r["cnt"] < 3)
  {
     insert
  }
  else
  {
     error
  }
}

您应该在触发器上使用存储过程,它将比任何PHP控件更快,无需额外的查询和获取,也不会因为错误而被绕过。请尝试以下代码:

CREATE TRIGGER myTrigger ON user_interests
BEFORE INSERT AS

    DECLARE @rowcount tinyint
    SELECT @rowcount = (SELECT COUNT(*) FROM user_interests, inserted
                                                        WHERE user_id=:new.user_id

    IF @rowcount > 3
    BEGIN
         RAISERROR ('The maximum number of interests has been reached')
    END;

GO

我没有尝试代码,但这应该非常适合您的需要。

您应该在触发器上使用存储过程,它将比任何PHP控件更快,无需额外的查询和获取,也不会因为错误而被绕过。请尝试以下代码:

CREATE TRIGGER myTrigger ON user_interests
BEFORE INSERT AS

    DECLARE @rowcount tinyint
    SELECT @rowcount = (SELECT COUNT(*) FROM user_interests, inserted
                                                        WHERE user_id=:new.user_id

    IF @rowcount > 3
    BEGIN
         RAISERROR ('The maximum number of interests has been reached')
    END;

GO
$insertSite_sql = "
    INSERT INTO user_interests (user_id, interest)
    SELECT '{$url}' , '{$sitename}'
    FROM (SELECT 1) AS dummy
    WHERE ( SELECT COUNT(*)
            FROM user_interests
            WHERE user_id = '{$url}'
          ) < 3
";
我没有尝试代码,但这应该非常适合您的需要

$insertSite_sql = "
    INSERT INTO user_interests (user_id, interest)
    SELECT '{$url}' , '{$sitename}'
    FROM (SELECT 1) AS dummy
    WHERE ( SELECT COUNT(*)
            FROM user_interests
            WHERE user_id = '{$url}'
          ) < 3
";
这很容易修改,因此用户对允许保存的兴趣有不同的限制


这很容易修改,因此用户对允许保存的兴趣有不同的限制。

谢谢@caffein,我不太明白上面的工作原理。这是一条必须在数据库中运行的SQL指令。它产生了一个触发器。。。在命名表上的每次插入之前,Well都会触发自身。然后它将count*查询的结果存储在@rowncount变量中,如果超过3,它将阻止插入并返回错误。由于我不知道您使用的是哪种数据库MySQL,SQLserver。。。我无法将任何文档链接到您,但您可以在网上找到很多文档。HTHThanks@caffein,我不太明白上面的内容是如何工作的,但它是一条必须在数据库中运行的SQL指令。它产生了一个触发器。。。在命名表上的每次插入之前,Well都会触发自身。然后它将count*查询的结果存储在@rowncount变量中,如果超过3,它将阻止插入并返回错误。由于我不知道您使用的是哪种数据库MySQL,SQLserver。。。我无法将任何文档链接到您,但您可以在网上找到很多文档。嗯