I have this class, named SubManager:
using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MyNotSoSecretAPP
{
public class SubManager
{
private string connectionString = "SERVER=188.212.***.**;PORT=****6;DATABASE=in**********;UID=*******in;PASSWORD=***********OJ";
public bool ExtendTrial(string username, DateTime newStartDate, int daysToAdd)
{
using (var connection = new MySqlConnection(connectionString))
{
connection.Open();
var updateQuery = $"UPDATE users SET start_date = '{newStartDate:yyyy-MM-dd}', last_update_date = '{DateTime.Today:yyyy-MM-dd}', remaining_days = remaining_days + {daysToAdd} WHERE username = '{username}'";
var updateCommand = new MySqlCommand(updateQuery, connection);
int rowsAffected = updateCommand.ExecuteNonQuery();
return rowsAffected > 0;
}
}
public bool CheckAndUpdateTrialStatus(string username)
{
using (var connection = new MySqlConnection(connectionString))
{
connection.Open();
var query = $"SELECT start_date, last_update_date, remaining_days FROM users WHERE username = '{username}'";
var command = new MySqlCommand(query, connection);
using (var reader = command.ExecuteReader())
{
if (reader.Read())
{
DateTime startDate = reader.GetDateTime("start_date");
DateTime lastUpdateDate = reader.GetDateTime("last_update_date");
int remainingDays = reader.GetInt32("remaining_days");
DateTime today = DateTime.Today;
// Update last_update_date if necessary
if (today > lastUpdateDate)
{
TimeSpan elapsed = today - lastUpdateDate;
int daysElapsed = elapsed.Days;
remainingDays -= daysElapsed;
if (remainingDays < 0)
{
remainingDays = 0;
}
var updateQuery = $"UPDATE users SET remaining_days = {remainingDays}, last_update_date = '{today:yyyy-MM-dd}' WHERE username = '{username}'";
var updateCommand = new MySqlCommand(updateQuery, connection);
updateCommand.ExecuteNonQuery();
// Update lastUpdateDate to today
lastUpdateDate = today;
}
// Check if last_update_date is before start_date
if (lastUpdateDate < startDate)
{
// Display message box or handle the condition as needed
MessageBox.Show("Last update date is before the start date.");
return false;
}
return remainingDays > 0;
}
return false;
}
}
}
public bool UpdateLastUpdateDate(string username)
{
using (var connection = new MySqlConnection(connectionString))
{
try
{
connection.Open();
var updateQuery = $"UPDATE users SET last_update_date = '{DateTime.Today.ToString():yyyy-MM-dd}' WHERE username = '{username}'";
var updateCommand = new MySqlCommand(updateQuery, connection);
int rowsAffected = updateCommand.ExecuteNonQuery();
return rowsAffected > 0;
}
catch (Exception ex)
{
// Handle the exception, log the error, or display a message
Console.WriteLine("Error updating last_update_date: " + ex.Message);
return false;
}
}
}
public int GetRemainingDays(string username)
{
using (var connection = new MySqlConnection(connectionString))
{
connection.Open();
var query = $"SELECT remaining_days FROM users WHERE username = '{username}'";
var command = new MySqlCommand(query, connection);
var remainingDays = Convert.ToInt32(command.ExecuteScalar());
connection.Close();
return remainingDays;
}
}
}
}
And my app is supposed to be a Subscription based one, here is how i call this class:
private void Form1_Load(object sender, EventArgs e)
{
int remainingDays = subManager.GetRemainingDays(settings.Default.username);
subManager.CheckAndUpdateTrialStatus(settings.Default.username);
label5.Text = remainingDays.ToString();
remainingDaysLabel.Text = $"Remaining Days: {remainingDays}";
bool updated = subManager.UpdateLastUpdateDate(settings.Default.username);
if (updated)
{
// Last update date successfully updated, proceed with other operations
bool isTrialActive = subManager.CheckAndUpdateTrialStatus(settings.Default.username);
if (isTrialActive)
{
// Trial is active, continue with the app's normal functionality
}
else
{
// Trial expired, handle accordingly
}
}
else
{
// Failed to update the last update date, handle accordingly
}
}
And how i add more days:
String username = settings.Default.username;
DateTime newStartDate = DateTime.Today; // Set the new start date
int daysToAdd = 30; // or any other value you want to add
if (subManager.ExtendTrial(username, newStartDate, daysToAdd))
{
Console.WriteLine($"Trial extended successfully for {username} with a new start date of {newStartDate:yyyy-MM-dd}.");
}
else
{
Console.WriteLine($"Failed to extend trial for {username}.");
}
I tried everything, but the last_update_date
dosn't change, even if i changed my system date&time. I know there is a lot wrong with this code, but can anyone help me?
The most problem is when loading the app, for some reason it dosn't check last update time or something.
MySql is formed this way: username(TEXT), password(TEXT), email(TEXT), profilePicture(MEDIUMBLOB), start_date(TEXT), last_update_date(TEXT), remaining_days(INT)
To explain better, current date is 8/4/2023 and i changed my PC Settings for date to be 8/1/2023 but nothing changes.
I really don't know how to fix this, if i need to provide the code for the signup or something else, comment.
If you need more details or other stuff, you can say here or ask for my discord.