【问题标题】:Validate Promo Code for one time use PHP/My SQLi验证促销代码一次使用 PHP/Mysqli
【发布时间】:2014-11-12 02:05:52
【问题描述】:

我对整个 MySQLi 很陌生。我对PHP有基本的了解。无论如何,我已经在这里搜索过,但无法得到可靠的答案。

基本上,我有一个表格,人们可以在其中输入姓名、电子邮件和促销代码。该表单会验证姓名和电子邮件,但当涉及到促销代码时,这就是我卡住的地方。

我有一个包含两列的数据库。一个用于代码,另一个用于“已使用”列——最终,当使用了唯一代码时,我需要能够在该列中写入“1”,这样它就不能再次使用了。我正在尝试使用我在这里找到的一些代码,仅供参考。

这里是PHP(连接后)到数据库:

if(isset($_POST['sponsorcode']) && !empty($_POST["sponsorcode"])){
   $sponsorcode = mysqli_real_escape_string($link,$_POST['sponsorcode']);
   $query = "SELECT 'sponsorcode' FROM 'teachercodes' WHERE sponsorcode = '$sponsorcode'";
   $result = mysqli_query($link, $query) or die(mysqli_error($link));
   $option = "";
   if(mysqli_num_rows($result)>0){
       while($row=mysqli_fetch_array($result)) {
       $option = "<option value='{$row['codes']}'>{$row['codes']}</option>";
}

任何提示将不胜感激!谢谢。

【问题讨论】:

  • 您将表和列视为值;删除引号。
  • 嗯...我认为这有助于处理事情,但现在我不知道下一步该做什么?再次,对基本问题感到抱歉,但对此我很陌生。它仍然没有验证?

标签: php forms mysqli


【解决方案1】:

没有理由将您的任务作为两个单独的步骤来执行。只需将赞助商代码标记为teachercodes 表中使用的代码。如果更新影响了任何行(即mysqli_affected_rows 返回 1 或更多),那么它之前没有被使用过并且是有效的赞助商代码。像这样的:

// Make sure a sponsor code was provided
if (isset($_POST['sponsorcode']) && !empty($_POST['sponsorcode'])) {

    // Escape the sponsor code to prevent SQL injection
    $code = mysqli_real_escape_string($link, $_POST['sponsorcode']);

    // Mark sponsor code as used if possible 
    $sql = 'UPDATE teachercodes SET used=1 WHERE sponsorcode="' . $code . '"';
    mysqli_query($link, $sql) or die(mysqli_error($link));

    if (mysqli_affected_rows($link)) {
        // Sponsor code hasn't been used before and is valid
    }
}

【讨论】:

  • 太棒了!谢谢你:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-13
  • 1970-01-01
  • 2013-11-13
  • 2018-02-15
  • 1970-01-01
相关资源
最近更新 更多