|
|||
|
Hallo Leute,
ich habe folgendes Problem: Ich m?chte, dass die registrierten User im Shop nach 30 Tagen aufgefordert werden ihr Passwort zu ?ndern. ich hab es bisher mit folgendem Code versucht: Code:
$check_timestamp = xtc_db_query("select password_timestamp from " . TABLE_CUSTOMERS . "where customers_username = '" . xtc_db_input($username) . " ' ");
// $timestamp = xtc_db_fetch_array($check_timestamp);
$seconds_30days = 2592000;
$time = time()
if (($time - $check_timestamp) > $seconds_30days) {
// xtc_redirect(xtc_href_link(FILENAME_NEW_PASSWORT));
}
else
{
// xtc_redirect(xtc_href_link(FILENAME_DEFAULT));
}
Die Datenbankabfrage funktioniert, nur die Weiterleitung funktioniert nicht. Ich denke es h?ngt mit dem redirect zusammen, da der Header schon ?bergeben worden ist. Hab den deshalb erst mal auskommentiert. Ich w?rde mich ?ber eine Antwort und m?gliche L?sungsvorschl?ge sehr freuen. Gr??e Frederik |
|
|||
|
Aktueller Code:
Code:
$check_timestamp = xtc_db_query("select password_timestamp from " . TABLE_CUSTOMERS . "where customers_username = '" . xtc_db_input($username) . " ' ");
$timestamp = xtc_db_fetch_array($check_timestamp);
$seconds_30days = 2592000;
$time = time()
if (($time - $timestamp['password_timestamp']) > $seconds_30days) {
xtc_redirect(xtc_href_link(FILENAME_NEW_PASSWORT));
}
else
{
xtc_redirect(xtc_href_link(FILENAME_DEFAULT));
}
|
|
|||
|
Zitat:
In welchem Modul soll dieser Code denn ablaufen? |
|
|||
|
@gswkaiser
ja das ganze soll in die login.php implementiert werden. @Hubi Es funktioniert noch nicht wirklich. Ich werde immer auf die index.php weitergeleitet, egal ob die bedingung erf?llt ist oder nicht. Ich denke ich muss das ganze auch nochmal ?berarbeiten, da der User dann in den shop eingeloggt werden soll wenn das passwort noch nicht abgelaufen ist. Wobei er mich immer nur auf die Startseite weiterleitet, auf der man sich einloggen kann. |
|
|||
|
An welcher Stelle hast Du das in der login.php eingebaut? Poste einfach mal Deine ganze Datei.
Die sql stimmt nicht, da Du dich ja mit der eMail-Adresse einloggst oder hast Du das ge?ndert? Aber der User muss auch eingeloggt werden, wenn das PW abgelaufen ist, sonst kann er das ja nicht ?ndern. |
|
|||
|
Also wir haben statt der Emailadresse einen Benutzernamen eingebaut.
Eben wenn er das Passwort ?ndern will muss er vorher eingeloggt werden. Nur hab ich noch keine ahnung wo ich das ganze dann hinschieben soll. Wenn ich den code unterhalb der loginabfrage stelle, passiert ?berhaupt gar nix. er loggt sich ohne probleme ein als ob nix w?re. hier die komplette datei. Code:
<?php /* ----------------------------------------------------------------------------------------- $Id: login.php,v 1.9 2004/02/17 21:13:26 fanta2k Exp $ XT-Commerce - community made shopping http://www.xt-commerce.com Copyright (c) 2003 XT-Commerce ----------------------------------------------------------------------------------------- based on: (c) 2000-2001 The Exchange Project (earlier name of osCommerce) (c) 2002-2003 osCommerce(login.php,v 1.79 2003/05/19); www.oscommerce.com (c) 2003 nextcommerce (login.php,v 1.13 2003/08/17); www.nextcommerce.org Released under the GNU General Public License ----------------------------------------------------------------------------------------- Third Party contribution: guest account idea by Ingo T. <xIngox@web.de> ---------------------------------------------------------------------------------------*/ include( 'includes/application_top.php'); // create smarty elements $smarty = new Smarty; // include boxes require(DIR_FS_CATALOG .'templates/'.CURRENT_TEMPLATE. '/source/boxes.php'); // include needed functions require_once(DIR_FS_INC . 'xtc_draw_password_field.inc.php'); require_once(DIR_FS_INC . 'xtc_validate_password.inc.php'); require_once(DIR_FS_INC . 'xtc_array_to_string.inc.php'); require_once(DIR_FS_INC . 'xtc_image_button.inc.php'); require_once(DIR_FS_INC . 'xtc_php_mail.inc.php'); require_once(DIR_WS_CLASSES . 'class.phpmailer.php'); // redirect the customer to a friendly cookie-must-be-enabled page if cookies are disabled (or the session has not started) if ($session_started == false) { xtc_redirect(xtc_href_link(FILENAME_COOKIE_USAGE)); } if (isset($_GET['action']) && ($_GET['action'] == 'process')) { // $email_address = xtc_db_prepare_input($_POST['email_address']); $username = xtc_db_prepare_input($_POST['email_address']); $password = xtc_db_prepare_input($_POST['password']); $IP = ($_SERVER['REMOTE_ADDR']); $mailtext = $username . ' hat sich mit folgender IP' . $IP . ' falsch angemeldet.'; //timestamp abfrage $check_timestamp = xtc_db_query("select password_timestamp from " . TABLE_CUSTOMERS . " where customers_username = '" . xtc_db_input($username) . "'"); $timestamp = xtc_db_fetch_array($check_timestamp); $seconds_30days = '2592000'; $time = time(); if (($time - $timestamp['password_timestamp']) > $seconds_30days) { xtc_redirect(xtc_href_link(FILENAME_NEW_PASSWORD)); } else { xtc_redirect(xtc_href_link(FILENAME_DEFAULT)); } // Check if email exists $check_customer_query = xtc_db_query("select customers_id, customers_firstname,customers_lastname, customers_gender, customers_password, customers_email_address, customers_default_address_id, customers_username from " . TABLE_CUSTOMERS . " where customers_username = '" . xtc_db_input($username) . "'"); if (!xtc_db_num_rows($check_customer_query)) { $_GET['login'] = 'fail'; $info_message=TEXT_NO_EMAIL_ADDRESS_FOUND; } else { $check_customer = xtc_db_fetch_array($check_customer_query); // Check that password is good if (!xtc_validate_password($password, $check_customer['customers_password'])) { $_GET['login'] = 'fail'; $info_message=TEXT_LOGIN_ERROR; //email an shop@incom.de wegen login fehler xtc_php_mail(EMAIL_SUPPORT_ADDRESS,EMAIL_SUPPORT_NAME,EMAIL_SUPPORT_ADDRESS,EMAIL_SUPPORT_NAME, '' , 'shop@incom.de' , 'Webmaster' , '' , '' , 'Fehlerhafte Benutzeranmeldung' , '' ,$mailtext); } else { if (SESSION_RECREATE == 'True') { xtc_session_recreate(); } $check_country_query = xtc_db_query("select entry_country_id, entry_zone_id from " . TABLE_ADDRESS_BOOK . " where customers_id = '" . (int)$check_customer['customers_id'] . "' and address_book_id = '" . $check_customer['customers_default_address_id'] . "'"); $check_country = xtc_db_fetch_array($check_country_query); $_SESSION['customer_gender'] = $check_customer['customers_gender']; $_SESSION['customer_last_name'] = $check_customer['customers_lastname']; $_SESSION['customer_id'] = $check_customer['customers_id']; $_SESSION['customer_default_address_id'] = $check_customer['customers_default_address_id']; $_SESSION['customer_first_name'] = $check_customer['customers_firstname']; $_SESSION['customer_country_id'] = $check_country['entry_country_id']; $_SESSION['customer_zone_id'] = $check_country['entry_zone_id']; $date_now = date('Ymd'); xtc_db_query("update " . TABLE_CUSTOMERS_INFO . " set customers_info_date_of_last_logon = now(), customers_info_number_of_logons = customers_info_number_of_logons+1 where customers_info_id = '" . (int)$_SESSION['customer_id'] . "'"); // restore cart contents $_SESSION['cart']->restore_contents(); if (sizeof($_SESSION['navigation']->snapshot) > 0) { $origin_href = xtc_href_link($_SESSION['navigation']->snapshot['page'], xtc_array_to_string($_SESSION['navigation']->snapshot['get'], array(xtc_session_name())), $_SESSION['navigation']->snapshot['mode']); $_SESSION['navigation']->clear_snapshot(); xtc_redirect($origin_href); } else { xtc_redirect(xtc_href_link(FILENAME_DEFAULT)); } } } } $breadcrumb->add(NAVBAR_TITLE_LOGIN, xtc_href_link(FILENAME_LOGIN, '', 'SSL')); require(DIR_WS_INCLUDES . 'header.php'); if ($_GET['info_message']) $info_message=$_GET['info_message']; $smarty->assign('info_message',$info_message); $smarty->assign('account_option',ACCOUNT_OPTIONS); $smarty->assign('BUTTON_NEW_ACCOUNT','<a href="' . xtc_href_link(FILENAME_CREATE_ACCOUNT, '', 'SSL') . '">' . xtc_image_button('button_continue.gif', IMAGE_BUTTON_CONTINUE) . '</a>'); $smarty->assign('BUTTON_LOGIN',xtc_image_submit('button_login.gif', IMAGE_BUTTON_LOGIN)); $smarty->assign('BUTTON_GUEST','<a href="' . xtc_href_link(FILENAME_CREATE_GUEST_ACCOUNT, '', 'SSL') . '">' . xtc_image_button('button_continue.gif', IMAGE_BUTTON_CONTINUE) . '</a>'); $smarty->assign('FORM_ACTION',xtc_href_link(FILENAME_LOGIN, 'action=process', 'SSL')); $smarty->assign('INPUT_MAIL',xtc_draw_input_field('email_address')); $smarty->assign('INPUT_USERNAME',xtc_draw_input_field('username')); $smarty->assign('INPUT_PASSWORD',xtc_draw_password_field('password')); $smarty->assign('LINK_LOST_PASSWORD',xtc_href_link(FILENAME_PASSWORD_FORGOTTEN, '', 'SSL')); $smarty->assign('language', $_SESSION['language']); $smarty->caching = 0; $main_content=$smarty->fetch(CURRENT_TEMPLATE . '/module/login.html'); $smarty->assign('main_content',$main_content); $smarty->assign('language', $_SESSION['language']); $smarty->caching = 0; if (!defined(RM)) $smarty->load_filter('output', 'note'); $smarty->display(CURRENT_TEMPLATE . '/login_index.html'); ?> |
|
|||
|
Hat denn der angemeldete User eine Timestamp > 30 Tage?
Vom Code her kann ich da kein Problem erkennen. Aus Performance-Gr?nden w?rde ich die Timestamp-Abfrage aber mit in die vorhandene Kunden-Abfrage aufnehmen, das spart einen DB-Zugriff. Vor allem auch, weil Du bei Deiner L?sung auch nicht pr?fst, ob der Username legal ist! (if (!xtc_db_num_rows($check_customer_query)).....) |
![]() |
| Lesezeichen |
| Stichworte |
| ndern, passwort, tagen, weiterleitung |
| Themen-Optionen | |
| Ansicht | |
|
|