incom Posted June 13, 2005 Report Share Posted June 13, 2005 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: $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)); } Hier kurz eine Erkl?rung: 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 Link to comment Share on other sites More sharing options...
Hubi Posted June 13, 2005 Report Share Posted June 13, 2005 Nur mal so beim ?berfliegen: das fetch_array muss da wieder rein. In der if abfrage muss dann timestamp['password_timestamp'] rein. Link to comment Share on other sites More sharing options...
incom Posted June 13, 2005 Author Report Share Posted June 13, 2005 Aktueller 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)); } Link to comment Share on other sites More sharing options...
Hubi Posted June 13, 2005 Report Share Posted June 13, 2005 Und? Funktionierts? Link to comment Share on other sites More sharing options...
gswkaiser Posted June 13, 2005 Report Share Posted June 13, 2005 Originally posted by incom@Jun 13 2005, 08:56 AM 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: $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)); } Hier kurz eine Erkl?rung: 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 Quoted post In welchem Modul soll dieser Code denn ablaufen? Link to comment Share on other sites More sharing options...
Hubi Posted June 13, 2005 Report Share Posted June 13, 2005 w?rde in die login.php passen. Link to comment Share on other sites More sharing options...
incom Posted June 14, 2005 Author Report Share Posted June 14, 2005 @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. Link to comment Share on other sites More sharing options...
Hubi Posted June 14, 2005 Report Share Posted June 14, 2005 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. Link to comment Share on other sites More sharing options...
incom Posted June 14, 2005 Author Report Share Posted June 14, 2005 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. <?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); [url]www.oscommerce.com[/url] (c) 2003 nextcommerce (login.php,v 1.13 2003/08/17); [url]www.nextcommerce.org[/url] Released under the GNU General Public License ----------------------------------------------------------------------------------------- Third Party contribution: guest account idea by Ingo T. <[email protected]> ---------------------------------------------------------------------------------------*/ 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 [email][email protected][/email] wegen login fehler xtc_php_mail(EMAIL_SUPPORT_ADDRESS,EMAIL_SUPPORT_NAME,EMAIL_SUPPORT_ADDRESS,EMAIL_SUPPORT_NAME, '' , '[email protected]' , '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'); ?> Link to comment Share on other sites More sharing options...
gswkaiser Posted June 15, 2005 Report Share Posted June 15, 2005 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)).....) Link to comment Share on other sites More sharing options...
gswkaiser Posted June 15, 2005 Report Share Posted June 15, 2005 Halt, da gibt es doch ein Problem! $seconds_30days = '2592000'; Du hast $seconds_30days als String definiert, da muss der Vergleich fehlschlagen. ?ndern in $seconds_30days = 2592000; Link to comment Share on other sites More sharing options...
incom Posted June 17, 2005 Author Report Share Posted June 17, 2005 Hi, also ich habe mal den Rat befolgt und das ganze in die Abfrage von davor geschrieben. Aber es besteht immer noch folgendes Problem: Wenn ich mich anmelde, kann ich mich vollkommen normal einloggen, ohne das eine Meldung kommt das ich mein Passwort ?ndern muss. Dabei wird jedem User beim registrieren ein Timestamp zugeordnet und dieser wird auch abgefragt. Ich bin im Moment etwas ?berfragt was das sein k?nnte. K?nnte es die Reinfolge sein in der Abgefragt wird? oder wodran k?nnte es eurer Meinung nach vllt. liegen? Gr??e aus Bonn // Check if email exists $check_customer_query = xtc_db_query("select password_timestamp, 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; if ((time() - $check_customer['password_timestamp']) > 2592000) { xtc_redirect(xtc_href_link(FILENAME_NEW_PASSWORD)); } else { xtc_redirect(xtc_href_link(FILENAME_DEFAULT)); } /* $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)); } */ //email an [email][email protected][/email] wegen login fehler xtc_php_mail(EMAIL_SUPPORT_ADDRESS,EMAIL_SUPPORT_NAME,EMAIL_SUPPORT_ADDRESS,EMAIL_SUPPORT_NAME, '' , '[email protected]' , 'Webmaster' , '' , '' , 'Fehlerhafte Benutzeranmeldung' , '' ,$mailtext); } else { if (SESSION_RECREATE == 'True') { xtc_session_recreate(); } Link to comment Share on other sites More sharing options...
incom Posted June 21, 2005 Author Report Share Posted June 21, 2005 Habe weiter gebastelt, aber is nicht wirklich was bei raus gekommen, hab wieder alles auf alten zustand zur?ck gesetzt Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.