PHP更新MySQL数据库表

PHP更新MySQL数据库表,php,mysql,sql,sql-update,Php,Mysql,Sql,Sql Update,首先,我想说的是,我是这类编码的新手,尽管我希望通过一些指导,我最终能够理解这一切 我有一个MySQL数据库表(促销),其中存储了各种产品的一系列赎回代码(用于赠品竞赛)。想法是,第一个输入兑换代码的人将赢得产品,他们的信息应存储在“促销”表中 该表的列包括:兑换id(自动递增字段)、兑换代码、兑换人电子邮件、兑换人姓名、兑换人姓氏和兑换日期时间 最初,只有“兑换”id和“兑换”代码字段包含任何数据。我希望当用户输入他们的信息(姓名、电子邮件等)并提交赎回代码时,他们的信息将填充该特定代码行的其

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

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

该表的列包括:兑换id(自动递增字段)、兑换代码、兑换人电子邮件、兑换人姓名、兑换人姓氏和兑换日期时间

最初,只有“兑换”id和“兑换”代码字段包含任何数据。我希望当用户输入他们的信息(姓名、电子邮件等)并提交赎回代码时,他们的信息将填充该特定代码行的其余部分。如果其他任何人试图提交一个已经兑换的代码,他们将收到一条错误消息-同样,对于无效代码(即表中不存在的代码)

到目前为止,我的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);  
?>

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


我很确定错误在receide_promotion()函数中,但我不知道在哪里。

您在
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;
}

我去掉了逗号,但是当输入正确的代码时,表仍然没有更新。当调用
函数时,没有名为
$redemble\u date\u time
的变量。有什么问题吗?另一件事,你可以尝试
反转
单引号和双引号。好的,我将函数稍微更改为:
$query='UPDATE promotion SET…reduce_date_time=“.mysql_real_escape_string($reduce_date_time)。“WHERE reduce_code=“.mysql_real_escape_escape_string($reduce_code)。”
然后将变量命名为$redeme\u date\u time
$redeme\u date\u time='NOW()
仍会产生相同的结果。更改为:
$query=“更新促销集赎回人电子邮件=”.mysql\u real\u escape\u string($email)。“,赎回人姓名=”.mysql\u real\u escape\u string($first\u name)。“,赎回人姓名=”.mysql\u real\u escape\u string($last\u name)。“,赎回日期时间=现在(),其中赎回代码=”.mysql\u real\u escape\u string($reduce\u code)。“””“
当mysql操作不起作用时可以尝试的简单方法:1)在查询之后立即回显mysql\u error(),看看是否有错误。2) 回显查询的文本,查看其外观是否正确,以及是否设置了所有变量。3) 直接在mysql中运行查询,看看它是否符合您的要求。