} // W. Kaiser Check address validity if ($IsEditOrUpdate) { $entry_country_id = $customers['entry_country_id']; if ($entry_country_id == 81) { if ($_GET['validate'] != EMPTY_STRING) { $entry_name = $customers['customers_lastname']; $entry_firstname = $customers['customers_firstname']; $entry_postcode = $customers['entry_postcode']; $entry_city = $customers['entry_city']; $entry_street_address = $customers['entry_street_address']; $entry_fon = $customers['customers_telephone']; $entry_fax = $customers['customers_fax']; $IsUserMode = false; IsValidAddress($entry_country_id, $entry_postcode, $entry_city, $entry_street_address, $entry_name, $entry_firstname, $entry_fon, $entry_fax, $entry_message); $entry_street_address_error = check_input_error(true, $entry_message); $entry_post_code_error = true; $entry_city_error = true; if ($messageStack->size > 0) { $message_text = $messageStack->output(); echo $message_text; } } } } // W. Kaiser Check address validity require_once DIR_WS_INCLUDES . 'header.php'; ?> <table border="0" width="100%" cellspacing="2" cellpadding="2"> <tr> <?php
function IsValidAddress($country_id, &$postcode, $city, $street, $name, $vorname, $fon, $fax, &$message, $not_search_all = false) { /* ----------------------------------------------------------------------------------------- $not_search_all=false) $Id: address_validation.php,v 1.0 2005/07/02 OL-Commerce Version 5.x/AJAX http://www.ol-commerce.com, http://www.seifenparadies.de Copyright (c) 2004 OL-Commerce , 2006 Dipl.-Ing.(TH) Winfried Kaiser (w.kaiser@fortune.de, info@seifenparadies.de) ----------------------------------------------------------------------------------------- based on: (c) 2000-2001 The Exchange Project (earlier name of osCommerce) (c) 2002-2003 osCommerce(create_account.php,v 1.63 2003/05/28); www.oscommerce.com (c) 2003 nextcommerce (create_account.php,v 1.27 2003/08/24); www.nextcommerce.org (c) 2004 XT - Commerce; www.xt-commerce.com Released under the GNU General Public License ----------------------------------------------------------------------------------------- Third Party contribution: Copyright (c) W. Kaiser {w.kaiser@fortune.de) Released under the GNU General Public License This contribution tries to validate customer adress-data by inquiring the postal offices online postcode-check. It submits the city and street-adress to that page, and then check, if the proper postcode ist returned. It will also try to resolve the address using the official phonebook. If a phone- and/or fax-number is provided, it will try to resolve these numbers by backword-search in th phonebook. Multi-page results and changed postcodes/city-names are supported. ---------------------------------------------------------------------------------------*/ global $data, $this_postcode, $message, $pos_s, $pos_e, $Len_HTML_COL_END, $messageStack; switch ($country_id) { case '81' or 'D': //Germany define('BLANK', ' '); define('DOT', '.'); define('SLASH', '/'); define('DASH', '-'); define('LPAREN', ' ('); define('RPAREN', ')'); define('AREA_CODE_GERMANY', '49'); define('EREG_ALL', '.*'); define('VALIDATE_TELEKOM_INVERSE_URL', 'http://www.dasoertliche.de/DB4Web/es/oetb2suche/home.htm?main=Antwort&AKTION=START_INVERS_SUCHE&' . 'SEITE=INVERSSUCHE_V&s=2&rg=1&SKN=0&SEITE=INVERSSUCHE_V&AKTION=START_SUCHE&kw_invers='); if ($not_search_all) { $this_postcode = $postcode; CheckReverse($fon, FON, false); } else { define('CHECK_TELEKOM', true); //Also check TELEKOM directory if POST-search was OK //define('CHECK_TELEKOM', false); //Do not check TELEKOM directory if POST-search was OK define('VALIDATE_POST_URL', 'http://plz1.postdirekt.de/plzserver/PlzSearchServlet?id=streetsearch&lang=de&' . 'street=#2&no=#3&city=#1&plz=#4&' . SB_START); define('VALIDATE_TELEKOM_URL', 'http://www.4call.dastelefonbuch.de/?sp=55&aktion=23&ao=0&' . 's=a20000&stype=S&la=de&cmd=search&sim_kw=1&sim_st=1&' . 'ci=#1&st=#2&hn=#3&kw=#4&fn=#5&pc=#6&ok=#7'); /* http://www.4call.dastelefonbuch.de/?sp=55&aktion=23&kw=24975&s=a20000&stype=S&la=de&taoid=00001010000016606042713081600000016601&cmd=search&ort_ok=0&vert_ok=0&sim_kw=1&fn=&ci=Husby&pc=24975&st=Schleswiger+Str&hn=22&sim_st=1&ok=04634&ao=0&x=43&y=5 */ /* Parameter: #1 -- Ort #2 -- Strasse #3 -- Hausnummer #4 -- Name #5 -- Vorname #6 -- Plz #7 -- Vorwahl */ define('PARAM_1', '#1'); define('PARAM_2', '#2'); define('PARAM_3', '#3'); define('PARAM_4', '#4'); define('PARAM_5', '#5'); define('PARAM_6', '#6'); define('PARAM_7', '#7'); define('COMMA_BLANK', ',' . BLANK); define('COLON_BLANK', ':' . BLANK); define('HTML_BLANK', '%20'); define('APOS', APOS); define('APOS_BLANK', APOS . BLANK); define('BLANK_APOS', BLANK . APOS); //define('EMPTY_STRING', ''); define('LEFT_MARGIN', '<br/> '); define('FONT_END', '</b></font>'); define('SUCCESSFUL0', 'erfolgreich' . FONT_END . BLANK . LPAREN); define('SUCCESSFUL', SUCCESSFUL0 . 'Dauer '); define('VALIDATION', LEFT_MARGIN . 'Die <b>Online-Validierung</b> '); define('RESULT_START', '<font color="blue"><b>'); define('BACKWARD_SEARCH', LEFT_MARGIN . 'Die <b>Rückwärtssuche</b> der ' . RESULT_START); define('PHONE_NUMBER', '-Nummer' . FONT_END . ' im Telefonbuch der Telekom war '); define('RESULT_NOT', ' <font color="red"><u>nicht</u></font> '); define('SECONDS', ' Sekunde(n)'); //define('SB_START', 'sb_start='); define('SB_START', 'pagenumber='); define('FON', 'Fon'); define('FAX', 'Fax'); define('HTML_COL_START', '<td'); define('HTML_COL_END', '</td>'); define('HTML_ROW_START', '<tr'); define('HTML_ROW_END', '</tr>'); define('HTML_NEW_LINE', NEW_LINE); $pos = strrpos($street, DOT); if ($pos > 0) { if ($pos != strlen($street)) { $s = substr($street, $pos + 1, 1); if ($s != BLANK) { } if (is_numeric($s)) { $street = substr($street, 0, $pos) . BLANK . substr($street, $pos + 1); } } } $i = strpos($city, BLANK); if ($i > 0) { $city = substr($city, 0, $i); } $message = $name . COMMA_BLANK . $street . COMMA_BLANK . $postcode . BLANK . $city; if ($fon != EMPTY_STRING) { $message .= COMMA_BLANK . FON . COLON_BLANK . $fon; } if ($fax != EMPTY_STRING) { $message .= COMMA_BLANK . FAX . COLON_BLANK . $fax; } $pos = strrpos($street, BLANK); if ($pos != 0) { $street_len = strlen($street); if ($pos == $street_len - 2) { $s = substr($street_number, $pos, 1); if (!is_numeric($s)) { $pos = strrpos(substr($street, 0, $pos - 1), BLANK); } } $street_number = substr($street, $pos + 1); $s = EMPTY_STRING; for ($i = strlen($street_number) - 1; $i >= 0; $i--) { $s = substr($street_number, $i, 1); if (is_numeric($s)) { $street_number = substr($street_number, 0, $i + 1); break; } } if (is_numeric($street_number)) { $street = substr($street, 0, $pos); //$street_number=str_replace(BLANK,'',$street_number); } else { $street_number = EMPTY_STRING; } } $url0 = str_replace(PARAM_1, $city, VALIDATE_POST_URL); $url0 = str_replace(PARAM_2, $street, $url0); $url0 = str_replace(PARAM_3, $street_number, $url0); $url0 = str_replace(PARAM_4, $postcode, $url0); $url0 = str_replace(BLANK, HTML_BLANK, $url0); $loop = 0; $time_start = microtime_float(); while (true) { $loop++; //$url = $url0 . ($loop - 1) * 20; $url = $url0 . $loop; $data = get_html_page($url); //$data = file_get_contents($url); $pos_s = strpos($data, 'Ortsname'); if ($pos_s == 0) { //return false; $message = $message . HTML_NEW_LINE . "Die Suche mit '" . $url0 . "' lieferte kein Ergebnis"; break; } else { //if ( more pages are available, then the text "sb_start=nn" is included in page //$all_done = strpos($data, SB_START . ($loop * 20)) == 0; $all_done = strpos($data, SB_START . ($loop + 1)) == 0; $no_postcode = strpos($data, $postcode) === false; $entry_found = false; //Find first entry end (head line) $pos_s = 0; $pos_e = strpos($data, HTML_ROW_START, $pos_s); if ($pos_e > 0) { $value_start = array(HTML_ROW_START); $entries = sizeof($value_start) - 1; for ($entry = 0; $entry <= $entries; $entry++) { $entry_start = $value_start[$entry]; $len_HTML_COL_END = strlen(HTML_COL_END); while (true) { //Find entry start (postcode) $pos_e = strpos($data, $entry_start, $pos_e); if ($pos_e > 0) { $this_postcode = get_next_col(); if ($this_postcode != EMPTY_STRING) { if ($this_postcode == "---") { //PLZ/Ort hat sich geändert! for ($i = 1; $i <= 3; $i++) { $this_postcode = get_next_col(); $pos = strpos($this_postcode, $postcode); if ($pos > 0) { $pos = strpos($this_postcode, BLANK); if ($pos > 0) { $city = substr($this_postcode, $pos + 1); $this_postcode = substr($this_postcode, $pos - 1); } } break; } } } if (substr($this_postcode, 0, 5) == $postcode) { $entry_found = true; $all_done = true; break; } else { if ($no_postcode) { $this_postcode_save = $this_postcode; //Get city; $this_city = get_next_col(); $i = strpos($this_city, BLANK); if ($i > 0) { $this_city = substr($this_city, 0, $i); } if ($this_city == $city) { //Get street $this_street = get_next_col(); $i = InStr($this_street, BLANK); if ($i > 0) { $this_street = substr($this_street, 0, $i); } $i = InStr($street, BLANK); if ($i > 0) { $street = substr($street, 0, $i); } if ($this_street == $street) { $message = $message . LEFT_MARGIN . "Die Postleitzahl wurde von" . BLANK_APOS . $postcode . APOS_BLANK . "zu" . BLANK_APOS . $this_postcode_save . APOS_BLANK . "geändert"; $postcode = $this_postcode_save; $entry_found = true; $all_done = true; break; } } } //Find end-of_row $pos_e = strpos($data, HTML_ROW_END, $pos_e); if ($pos_e == 0) { break; } } } else { break; } } if ($entry_found) { break; } } if ($entry_found || $all_done) { break; } } } if ($all_done) { break; } } $time_end = microtime_float(); $time = round($time_end - $time_start); $result = RESULT_START; if (!$entry_found) { $result .= RESULT_NOT; } $message = VALIDATION . 'von PLZ, ORT und STRASSE über die PLZ-Suche der Post war ' . $result . SUCCESSFUL0 . $loop . ' Ergebnisseite(n) in ' . $time . SECONDS . ' untersucht).'; if (CHECK_TELEKOM) { if (true || $entry_found) { $url = str_replace(PARAM_1, $city, VALIDATE_TELEKOM_URL); $url = str_replace(PARAM_2, $street, $url); $url = str_replace(PARAM_3, $street_number, $url); //$url = str_replace(PARAM_4, $postcode, $url); $pos = strrpos($name, BLANK); if ($pos > 0) { $name = substr($name, $pos + 1); } $url = str_replace(PARAM_4, $name, $url); //$url = str_replace(PARAM_5, $vorname, $url); $url = str_replace(PARAM_5, "", $url); $url = str_replace(PARAM_6, $postcode, $url); if (strlen($fon) > 0) { $pos = strpos($fon, "/"); if ($pos === false) { $pos = strpos($fon, "-"); if ($pos === false) { $pos = strpos($fon, BLANK); } } if (!($pos === false)) { $url = str_replace(PARAM_7, substr($fon, 0, $pos), $url); } } $url = str_replace(BLANK, HTML_BLANK, $url); $time_start = microtime_float(); $data = get_html_page($url); $time_end = microtime_float(); $time = round($time_end - $time_start); $entry_found = strpos($data, 'Systemfehler') == 0; if ($entry_found) { $entry_found = eregi('<strong> ' . EREG_ALL . $name, $data) != 0; } $result = RESULT_START; if ($entry_found) { $error_state = "success"; } else { $result .= RESULT_NOT; $error_state = "error"; } $message .= VALIDATION . ' im Telefonbuch der Telekom war ' . $result . SUCCESSFUL . $time . SECONDS . RPAREN; $this_postcode = $postcode; CheckReverse($fon, FON); CheckReverse($fax, FAX); $message .= ' <p align="center"> <b><a href="" onclick="javascript:document.getElementById(\'messageStack_messageBox\').style.display=\'none\';return false">Meldung ausblenden</a></b> </p> '; check_input_error(true, $message); } } } return $entry_found; case 'A': return true; break; case 'CH': return true; break; default: return true; } }
$postcode = $order->billing['postcode']; $city = $order->billing['city']; $street_address0 = $order->billing['street_address']; $street_address = $street_address0; while (!is_numeric(substr($street_address0, -1))) { //Remove trailing characters from house number $street_address0 = substr($street_address0, 0, -1); } if ($street_address0 != EMPTY_STRING) { $street_address = $street_address0; } $fon = $order->billing['telephone']; $fax = $order->billing['fax']; $IsUserMode = false; IsValidAddress($country_id, $postcode, $city, $street_address, $name, $firstname, $fon, $fax, $message); $street_address_error = check_input_error(true, $message); $post_code_error = true; $city_error = true; } } } ?> <table border="0" width="100%" cellspacing="2" cellpadding="2"> <tr> <?php require_once DIR_WS_INCLUDES . 'column_left.php'; ?> <!-- body_text //--> <td width="100%" valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="2"> <?php if ($action == 'edit' && $order_exists) {
$error = true; $entry_state_error = true; } } } else { if (!$entry_state) { $error = true; $entry_state_error = true; } } } } if ($not_IsCheckout) { $entry_telephone_error = check_input_error(strlen($customers_telephone) < ENTRY_TELEPHONE_MIN_LENGTH, ENTRY_TELEPHONE_NUMBER_ERROR); if ($customers_fax != EMPTY_STRING) { $entry_fax_error = check_input_error(strlen($customers_fax) < ENTRY_TELEPHONE_MIN_LENGTH, ENTRY_FAX_NUMBER_ERROR); } } if ($error) { if (!class_exists('objectInfo')) { // entry/item info classes require_once DIR_WS_CLASSES . 'object_info.php'; } $cInfo = new objectInfo($_POST); $processed = true; } else { if ($IsCheckout) { $sql_data_array = array('customers_id' => CUSTOMER_ID, 'entry_firstname' => $customers_firstname, 'entry_lastname' => $customers_lastname, 'entry_street_address' => $entry_street_address, 'entry_postcode' => $entry_postcode, 'entry_city' => $entry_city, 'entry_country_id' => $entry_country_id, 'entry_gender' => $customers_gender, 'entry_company' => $entry_company, 'entry_suburb' => $entry_suburb, 'entry_zone_id' => $entry_zone_id, 'entry_state' => $entry_state); if ($IsAccount && $is_update) { $db_action = 'update'; $db_parameter = $update_parameter;