Crazy Horse
asked on
Trying to check if url is set, record in database exists, if the time in database hasn't expired and update table, all at once!
I am trying to do a lot on one page and it's getting pretty confusing. This code is meant to check if 2 GET values are set. If they are, the script has to check both those values against the database. If there is a match it needs to check that the current date has not exceeded 24 hours past the date in the database and if not, it must then update the user records. If there is no match then the user must be redirected or if the time has expired that they have to register has expired they must also be redirected. At the moment, I am getting an error with my new Carbon date and time functionality that I have just found :)
The error I am getting is:
Fatal error: Uncaught Error: Class 'Carbon' not found in.................Stack trace: #0 {main} thrown... line 35
Line 35 is:
if(!isset($_GET['activecode']) || (!isset($_GET['email']))) {
header("location:page-register.php");
}
else {
$stmt = $link->prepare("SELECT `user_hash`, `user_email`, `register_date` FROM `db_users` WHERE `user_hash` = ? AND `user_email` = ?");
$stmt->bind_param("ss", $activate_url, $activate_email);
$activate_url = urlencode($_GET['activecode']);
$activate_email = $_GET['email'];
$stmt->execute();
$result = $stmt->get_result();
$numRows = $result->num_rows;
if($numRows === 1) {
while($row = $result->fetch_assoc()) {
$db_date = $row['register_date'];
}
}
$carbon = new Carbon($db_date);
$expiry_date = $carbon->copy()->addDays(1);
$now = Carbon::now();
if($now > $expiry_date) {
header("location:expired.php");
}
else {
$stmt = $link->prepare("UPDATE `db_users` SET `user_active` = ?, `user_hash` = ? WHERE `user_hash` = '$activate_url' AND `user_email` = '$activate_email' LIMIT 1");
$stmt->bind_param("is", $user_active, $user_hash_reset);
$user_active =1;
$user_hash_reset = 0;
$stmt->execute();
$stmt->close();
set_message("<p>Your account has been activated.</p>");
}
}
The error I am getting is:
Fatal error: Uncaught Error: Class 'Carbon' not found in.................Stack trace: #0 {main} thrown... line 35
Line 35 is:
$carbon = new Carbon($db_date);
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Great! If my comments helped, you could accept it as an assisted solution.
ASKER
I managed to solve it on my own
Just curious... If you're using Carbon, does that imply that you're using Laravel? If so, the active-record design makes it mostly unnecessary to write your own queries. If you're not using Laravel, it's not clear to me how Carbon adds any value to the application, over the built-in PHP date handling algorithms.
ASKER
Hi ray,
No, not using Laravel or any other framework. I did a tutorial on PHP date and time and they used Carbon which seemed pretty simple to use compared to explanations of php date and time I had seen. But I hadn't come across your article yet so thanks for sharing that. I will certainly take a look at it.
Also, I will admit that I am not great at learning through reading, I normally need to do stuff myself in order to learn anything or watch someone do it (monkey see, monkey do :P) I absorb more through watching video tutorials (The Carbon one was a video).
No, not using Laravel or any other framework. I did a tutorial on PHP date and time and they used Carbon which seemed pretty simple to use compared to explanations of php date and time I had seen. But I hadn't come across your article yet so thanks for sharing that. I will certainly take a look at it.
Also, I will admit that I am not great at learning through reading, I normally need to do stuff myself in order to learn anything or watch someone do it (monkey see, monkey do :P) I absorb more through watching video tutorials (The Carbon one was a video).
ASKER
Open in new window
If I put in the correct email and activation code into the url it takes me to the page that says that my activation code has expired which can't be since it is set to 24 hours after I registered. I only registered this morning so the database record should be updating which it's not?