That update
query look very wrong. Try the following below,
Your old update
,
$update = $dbc->prepare("UPDATE table SET field = 'valued' WHERE(field1 = ? AND field2 = ?)LIMIT 1");
mysqli_stmt_bind_param($update, "ss", $value1, $value2);
mysqli_stmt_execute($update);
Your new $update
,
$update = mysqli_prepare($dbc, "UPDATE `yourTableName` SET `field` = 'valued' WHERE field1 = ? AND field2 = ?");
LIMIT can be used with UPDATE but with the row count only.
Edit 1
You seem to be mixing OO
MySQLi
with procedural
, please read this page.
Edit 2
You had quite a few issues with your code.
You were trying to access $email
and $key
when they were out of the scope of the if
so I added the new variables.
You kept on (as said above) mixing your OO
with procedural
.
I added some debugging when trying to execute $update
.
<?php
$email;
$key;
if (isset($_GET['email']) && preg_match('/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/', $_GET['email'])) {
$email = $_GET['email'];
}
if (isset($_GET['key']) && (strlen($_GET['key']) == 32)) //The Activation key will always be 32 since it is MD5 Hash
{
$key = $_GET['key'];
}
if (isset($email) && isset($key)) {
$check_code = mysqli_prepare($dbc, "SELECT Activation FROM members WHERE Email = ?");
mysqli_stmt_bind_param($check_code, "s", $email);
mysqli_stmt_execute($check_code);
mysqli_stmt_bind_result($check_code, $activation);
mysqli_stmt_fetch($check_code);
if ($activation == $key) {
// Update the database to set the "activation" field to null
$update = mysqli_prepare($dbc, "UPDATE `members` SET `Activation` = 'Activated' WHERE `Email` = ? AND `Activation` = ?");
mysqli_stmt_bind_param($update, "ss", $email, $key);
mysqli_stmt_execute($update);
if (!mysqli_stmt_execute($update) ) {
die("Error: " . mysqli_stmt_error($update));
}
// Print a customized message:
if (mysqli_affected_rows($dbc) == 1) { //if update query was successfull
echo '<div class="success">Your account is now active. You may now <a href="login.php">Log in</a></div>';
} else {
echo '<div class="errormsgbox">Oops !Your account could not be activated. Please recheck the link or contact the system administrator.</div>';
echo '<br/> ' . $dbc->error;
}
mysqli_close($dbc);
} else {
echo "Parameters wrong, wrong link?";
}
} else {
echo '<div class="errormsgbox">Error Occured .</div>';
}
?>