2013-08-11 5 views
-2

Как написать cron для подтвержденных сообщений о действиях & потерянный таймер паролей?Как написать скрипт задания cron для проверенных сообщений электронной почты и таймера с потерянными паролями?

Я использую apache на сервере Linux с базой данных mysql и php-кодом. В базе данных, помимо обычных полей для учетной записи, я проверил (логическое значение, равное 1 для да и 0 для нет), act_key (varchar (50) для отправки электронной почты пользователям со ссылкой на специальные страницы для проверки их электронной почты или если они забыли свой пароль), time (datetime) и temp (boolean - 1 для забытого пароля или 0 для нет).

Когда пользователь создает учетную запись, я устанавливаю в новом действии значение 0, время = текущую дату & время, temp = 0 и генерировать act_key, который я отправляю по электронной почте им. Если они попытаются войти в систему и действия не подтверждены, то они не могут войти. Если они нажмут на ссылку и перейдут на определенную страницу в течение часа, я установил подтверждение на один, и они смогут войти в систему. Если они звонят по ссылке после одного часа, я скажу им, что ключ недействителен, и учетная запись была удалена и создана новая.

Если пользователь забыл свой пароль, он перешел на эту страницу, где они ввели свой адрес электронной почты, и если сообщение соответствует записи в базе данных, я установил temp = 1 и time = текущую дату & раз. Я говорю пользователю , что я отправил сообщение независимо от него. Если они щелкнут по этой новой ссылке, она перейдет на страницу, и если ее меньше часа, я заставляю их перезагружать там пароль, а temp возвращается к нулю. Если они нажмут на ссылку после часа, я скажу им, что ключ недействителен. Через один час темп возвращается к нулю.

Процесс проверки работал нормально, пока я не добавил переменную времени в уравнение. I никогда не получил забыли пароль.

Я знаю, что нужно настроить хрон, чтобы сделать две вещи каждый час:

  1. удалять учетные записи были проверены = 0, и это было больше, чем на час, так как созданный, которые действуют.
  2. обновление учетных записей, где температура = 1, и это было больше, чем на час, так как разослан забыли пароль электронной почты

Мои основные вопросы:

  1. я использую правильный тип данных в моей базе данных для поле времени? А если нет, то какой я должен использовать?

  2. Как установить временную переменную? $ time = getdate(); возможно, значение по умолчанию равно null? $ time - это переменная, которую я использую для вставки в запись дБ для поля времени.

  3. Как создать скрипт cron? Я использую godaddy, я просто указываю элемент управления cron на этот файл php, и если это так, мне нужен код?

    //connect to cron 
    
    /web/cgi-bin/php5 -f "$HOME/html/hourly.php"; 
    
    //connect to dB 
    
    include 'db_connect.php'; 
    
    //delete any unverified email act records that are more than 1 hour old 
    
    DELETE from members WHERE verified == 0 & time + 1 > NOW() 
    
    //make temp=0 on any record where temp is 1 for more than an hour 
    
    UPDATE members SET temp=0 WHERE temp == 1 & time + 1 > NOW() 
    
    mysqli_close($mysqli); 
    
  4. Есть ли какой-либо из моих общих методов звука в корне ошибочных?

Заранее благодарю вас.

+1

Это очень много требований с минимальными усилиями с вашей стороны –

+0

Вы говорите, что я ленивый lol. Мне просто нужно указывать в правильном направлении, я не прошу кого-либо написать все мои страницы для меня. Я создал страницу проверки и забыл пароль самостоятельно. –

ответ

0

Насколько я могу судить, temp бесполезен. Это означает то же самое, что и непроверенный.

Это SQL сломана:

DELETE from members WHERE verified == 0 & time + 1 > NOW(); 
  • & является оператором побитовое. Вы хотите AND
  • SQL использовать один = не ==
  • Вы удалять учетные записи меньше часа назад, не более часа назад

Try:

DELETE FROM members WHERE verified = 0 AND time + 1 < NOW(); 

Datetime является правильный тип поля для времени, но я бы назвал поле creation_time или что-то, чтобы вы поняли, что это значит. Вы можете установить его значение, передав NOW() в SQL, например. INSERT INTO members SET time=NOW(), ....

+0

проверяется, есть ли подтверждение по электронной почте для учетной записи или нет. temp (возможно, возможно, сделал лучшее имя) используется, чтобы сказать мне, если пользователь для этой учетной записи забыл там имя пользователя и/или пароль и был отправлен по электронной почте тот факт, что это так. Только проверенные пользователи могут получать это электронное письмо и только один раз в час. Но, спасибо за исправление строки в моем скрипте Cron. :) –

+0

Спасибо, rjmunro, он работает! И да, я изменил поле времени на creation_time, хорошая идея. :) –