1

最初に、私はこのタイプのコーディングの初心者であると言いたかったのですが、最終的には少しのガイダンスですべてを理解できるようになることを願っています.

さまざまな製品の引き換えコードの束を保存するMySQLデータベーステーブル(プロモーション)があります(プレゼントコンテスト用)。アイデアは、引き換えコードを最初に入力した人が製品を獲得し、その情報を「プロモーション」テーブルに保存する必要があるというものです。

テーブルの列は次のとおりです。redee_id (自動インクリメント フィールド)、redee_code、redemer_email、redemer_first_name、redemer_last_name、recome_date_time。

最初は、redee_id フィールドとredee_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);  
?>

無効な請求コードを入力した場合、またはコードの行が以前に入力されていた場合、期待どおりに機能します。それが機能しないときは、誰かが初めてアイテムを引き換えに行ったときです。基本的に、「おめでとうございます」というメッセージが表示されますが、送信された情報に対してテーブルは更新されません。したがって、正しいコードを何度入力しても、ユーザーは「おめでとうございます」というメッセージを受け取ります。

エラーがredee_promotion()関数にあることは確かですが、どこにあるのかわかりません。

4

1 に答える 1

2

節の前に余分なコンマ (,)を追加しました。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;
}
于 2012-05-09T17:11:33.223 に答える