限制用户对数据库

时间:2017-01-21 14:17:02

标签: php

我一直致力于代码,用户可以访问数据库中的promocode以及随附的折扣。现在,当用户必须支付并获得一个促销代码时,他输入相同的内容,并在他的工资中获得一些折扣。 现在如何限制promocode访问一次?

我的代码为::

<?php include('db.php'); ?>
<?php

$promocode = $_POST['promocode'];
$payamount = $_POST['payamount'];
$mobile = $_SESSION['mobile'];


if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
$sql3 = "SELECT * FROM apromocode WHERE code = '$promocode' ";
$result3 = $conn->query($sql3);
if ($result3->num_rows > 0) {                               
while($row3 = $result3->fetch_assoc()) {

$discount = $row3['discount'];  

$total1 = $discount;
$total2 = $pay - $total1;

$sql = "UPDATE userpaytoget SET payamount = '$total2' 
WHERE mobile = '$mobile'";

if ($conn->query($sql) === TRUE) {
echo '<script language="javascript">';
echo 'alert("PromoCode Applied")';
echo '</script>';
echo '<a href="user-profile.php"></a>';
}
else {
    echo "ERROR" . $sql . "<br>" . $conn->error;
}
}
}
else {
    echo "ERROR" . $sql3 . "<br>" . $conn->error;
}
$conn->close();
?>

在这里,我获得了payamount和promocode表单用户,而我将使用db检查promocode并相应地获得折扣...

现在,我对用户没有任何限制,他只能使用一次.. 任何帮助表示赞赏...

1 个答案:

答案 0 :(得分:0)

这可能更像是设计问题,而不是代码问题。您必须考虑规则“promocode只能由用户使用一次”是否适用于每个promocode和每个用户。如果是,那么:

  • 我认为在apromocode表中定义的promocode已经是UNIQUE KEY,如果不是PRIMARY KEY,并且mobile等同于某个user_id就识别a而言独特的用户关注。
  • userpaytoget表格中,制作UNIQUE KEYmobile复合code 。这样可以确保promocode只能使用mobile一次。

现在,这不一定能确保用户收到错误消息(因为INSERTUPDATE操作只会因抛出DUPLICATE KEY错误而失败。因此,为了能够将其转发给用户,您可以:

  • 在插入或更新记录之前,请检查mobilecode的计数。如果它大于0,请向用户提供自定义错误消息。


<小时/>

如果您决定某些promocodes可以多次使用,则需要稍微不同的逻辑和错误处理机制。在那种情况下,

  • 您可以在max_usage_count中添加新列,例如apromocode
  • 这也意味着必须删除UNIQUE KEY中定义的复合userpaytoget 。不过,您仍然可以在COUNT / mobile之前检查promocodeINSERT的{​​{1}},并将其与UPDATE进行比较,然后相应地决定是否max_usage_count或不允许操作。

希望有所帮助。