如何限制输入mysql数据库的行数

时间:2015-08-05 16:06:41

标签: javascript php mysql

我有一个表单,允许用户将他们工作过的作业(信用)存储到mysql数据库中。然后,这些信用将在页面上回显,供其他用户查看。 如何将每个用户可以提交到数据库的信用的数量限制为10?这是我用javascript做的事情吗?

这是我的表格:

 <form action="process.php" form="credits" method="GET"
              enctype="multipart/form-data" name="my_form" id="">

                            <input name="production" type="text" id="production" placeholder="Production" value = "" required>

                            <input name="channel" type="text" id="channel" placeholder="Channel" value = "">

                            <input name="company" type="text" placeholder="Production Company" value = "">

                            <input type="hidden" name="username" value="<?php echo $username; ?>">


  <button name="submit" id ="submit">
                          Submit
                        </button>

</form>

这就是它存储在数据库中的方式。

<?php
//Database Connection
include_once "$conx.php";

if( isset($_GET['submit'] )){
$production = $_GET['production'];
$channel = $_GET['channel'];
$company = $_GET['company'];
$username = $_GET['username'];

//updating database
$stmt = $db_conx->prepare('INSERT INTO credits SET production =?, channel =?, company =?, username =?');

$stmt->bind_param('ssss',$production,$channel,$company,$username);
$stmt->execute();

mysqli_close($conx);

//Redirect back
    header("location:credits.php");

}
?>

3 个答案:

答案 0 :(得分:1)

执行此类操作的最佳方法是同时执行客户端和服务器端验证,这意味着您应该检查他们是否能够在前端使用javascript提交另一个信用,然后双重检查PHP的后端。

但从它的外观来看,每次用户输入新的信用时,您都会进行整页刷新。如果是这种情况,您甚至不需要javascript。你可以为你的表单做这样的事情:

<?php
if ($credits >= 10) {
  echo 'You have reached the maximum amount of credits allowed.';
}
else {
  echo [FORM GOES HERE];
}
?>

其他一些观察结果:您编写代码的方式似乎很容易被破解。例如,如果我是用户&#39; joe&#39;我可以轻松地为用户提交一些东西&innocent_jane&#39;只需在提交之前编辑页面上的隐藏字段即可。使用隐藏字段的更好方法可能是在用户登录后将用户名存储在session variable中。

答案 1 :(得分:0)

你可能想做这样的事情:

$check = $db_conx->query("SELECT COUNT(*) FROM credits WHERE username=?");
$check->bind_param("s", $username);
$check->execute();
if ($check->fetch_row()[0] >= 10) {
    // show the user an error page
} else {
    // proceed with the insert query
}

这是匆忙编写的伪代码,所以你可能不得不调整它以使其真正起作用,但希望这会传达你想要使用的一般方法。

答案 2 :(得分:0)

您可以先检查数据库中的用户名:

if($result = $db_conx->query("SELECT * FROM credits WHERE username == ".$username))
{
    if(($result->num_rows) < 10){ // Less than 10 credits for that username
    // do the database updating
    }
    $result->close();
} else { // It didn't find any entries for that username
// do the database updating