
Originally Posted by
scd1982
I'm sure there's a better way - especially since there seems to be 3 separate queries going on. Is there a way to simplify the query/some other way to do this?
If you're open to refactoring your database schema, then yeah, there's a better way.
You should have a product table that holds only product data—nothing about redemption codes. And you should have a promotion table (since "redeem" is a verb) that holds all redemption codes and details about the redeemer, plus a foreign key to the product it will redeem.
If you do that, then your code could look like this:
PHP Code:
function get_promotion_by_redeem_code($redeem_code)
{
$result = mysql_query("SELECT * FROM promotion WHERE redeem_code = '".mysql_real_escape_string($redeem_code)."'");
$row = mysql_fetch_assoc($result);
return $row;
}
function redeem_promotion($promotion, $redeemer_email, $redeemer_first_name = '', $redeemer_last_name = '')
{
mysql_query("
UPDATE promotion
SET redeemer_email = '".mysql_real_escape_string($redeemer_email)."',
SET redeemer_first_name = '".mysql_real_escape_string($redeemer_first_name)."',
SET redeemer_last_name = '".mysql_real_escape_string($redeemer_last_name)."'
WHERE redeem_code = '".mysql_real_escape_string($promotion['redeem_code'])."'
");
}
$first_name = $_POST['f_name'];
$last_name = $_POST['l_name'];
$email = $_POST['e_mail'];
$verification = $_POST['v_code'];
$connection = mysql_connect('localhost', 'db', 'pw');
mysql_select_db('blog_db', $connection);
$promotion = get_promotion_by_redeem_code($verification);
if ($promotion) {
if (!$promotion['redeemer_email']) {
redeem_promotion($promotion, $email, $first_name, $last_name);
} 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);
Bookmarks