【问题标题】:PHP to Update MySQL Database TablePHP 更新 MySQL 数据库表
【发布时间】:2012-05-10 01:25:32
【问题描述】:

首先,我只是想说我是这种编码的新手,尽管我希望通过一些指导最终能理解这一切。

我有一个 MySQL 数据库表(促销),其中存储了各种产品的兑换代码(用于赠品比赛)。这个想法是,第一个输入兑换码的人将赢得产品,他们的信息应该存储在“促销”表中。

表格的列是:redeem_id(自动增量字段)、redeem_code、redeemer_email、redeeder_first_name、redeemer_last_name 和redeem_date_time。

最初,redeem_id 和redeem_code 字段是唯一包含任何数据的字段。我希望发生的是,当用户输入他们的信息(姓名、电子邮件等)并提交兑换代码时,他们的信息将填充该特定代码的其余行。如果其他人尝试提交已兑换的代码,他们应该会收到一条错误消息 - 同样是无效代码(即表格中不存在的代码)。

我目前的PHP代码是:

<?php
function get_promotion_by_redeem_code($redeem_code)
{
$sql = "SELECT * FROM promotion WHERE redeem_code= '".mysql_real_escape_string($redeem_code)."'";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);

return $row;
}

function redeem_promotion($email,$first_name,$last_name,$redeem_date_time,$redeem_code)
{
    $query = 'UPDATE promotion
    SET redeemer_email=".mysql_real_escape_string($email).", redeemer_first_name=".mysql_real_escape_string($first_name).", redeemer_last_name=".mysql_real_escape_string($last_name).", redeem_date_time=NOW(), WHERE redeem_code=".mysql_real_escape_string($redeem_code)."';
    $insert = mysql_query($query);
    return $insert;
}

$email=$_POST['e_mail'];
$first_name=$_POST['f_name'];
$last_name=$_POST['l_name'];
$redeem_code=$_POST['v_code'];

$connection = mysql_connect('localhost', 'db', 'pw');
mysql_select_db('db', $connection);

$promotion = get_promotion_by_redeem_code($redeem_code);

if ($promotion) {
    if (!$promotion['redeemer_email']) {
        redeem_promotion($email,$first_name,$last_name,$redeem_date_time,$redeem_code);
        echo 'Congratulations, you have successfully claimed this item!';
    } else {
        echo 'Sorry, this item has already been redeemed.';
    }
} else {
    echo 'Sorry, you have entered an incorrect claim code. Please use your browser\'s back button to try again.';
}

mysql_close($connection);  
?>

当我输入无效的索赔代码或之前已填充代码行时,它会按预期工作。 当它不起作用时,就是有人第一次去兑换物品。本质上,它将显示“恭喜”消息,但是表格不会针对提交的信息进行更新。因此,无论输入多少次正确的代码,用户都会收到“恭喜”消息。

我相当肯定错误出在redeem_promotion() 函数中,但我不知道在哪里。

【问题讨论】:

  • 当 mysql 操作不起作用时可以尝试的简单操作:1) 在查询后立即回显 mysql_error() 并查看是否有错误。 2)回显查询的文本,看看它是否看起来正确并且所有的变量都被设置了。 3)直接在mysql中运行查询,看看它是否符合你的要求。

标签: php mysql sql sql-update


【解决方案1】:

您在WHERE 子句之前添加了一个额外的逗号(,)。我认为那是错误。

function redeem_promotion($email,$first_name,$last_name,$redeem_date_time,$redeem_code)
{
    $query = 'UPDATE promotion
    SET redeemer_email=".mysql_real_escape_string($email).", 
        redeemer_first_name=".mysql_real_escape_string($first_name).", 
        redeemer_last_name=".mysql_real_escape_string($last_name).", 
        redeem_date_time=NOW() 
    WHERE redeem_code=".mysql_real_escape_string($redeem_code)."';

    **OR**

    $query = "UPDATE promotion
    SET redeemer_email='".mysql_real_escape_string($email)."', 
        redeemer_first_name='".mysql_real_escape_string($first_name)."', 
        redeemer_last_name='".mysql_real_escape_string($last_name)."', 
        redeem_date_time=NOW() 
    WHERE redeem_code='".mysql_real_escape_string($redeem_code)."'";

    $insert = mysql_query($query);
    return $insert;
}

【讨论】:

  • 我把逗号去掉了,但是输入正确的代码时表格仍然没有更新。
  • 当您调用function 时,没有名为$redeem_date_time 的变量。有什么问题吗?
  • 另外,可以试试reversing单引号双引号。
  • OK 我把函数稍微改成:$query = 'UPDATE promotion SET...redeem_date_time=".mysql_real_escape_string($redeem_date_time)." WHERE redeem_code=".mysql_real_escape_string($redeem_code)."'; 然后将变量命名为 $redeem_date_time $redeem_date_time='NOW()'; 仍然产生相同的结果。
  • 更改为:$query = "UPDATE promotion SET redeemer_email='".mysql_real_escape_string($email)."', redeemer_first_name='".mysql_real_escape_string($first_name)."', redeemer_last_name='".mysql_real_escape_string($last_name)."', redeem_date_time=NOW() WHERE redeem_code='".mysql_real_escape_string($redeem_code)."'"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-24
  • 1970-01-01
  • 1970-01-01
  • 2014-04-04
  • 2014-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多