Jump to content
xt:Commerce Community Forum

Kunden Import


meierj

Recommended Posts

währe den jemand so freundlich aus meiner alten shop csv mit den kunden daten: anrede, name, vorname, str, plz, ort, firma, e-mail eine sql csv datei oder sowas zu machen womit ich meine kunden in xtc bekomme???

biddö biddö biddö

mail an: kontakt at blaulicht-shop.de

gruß blinky

Link to comment
Share on other sites

  • Replies 74
  • Created
  • Last Reply
  • 1 year later...
  • 4 weeks later...
  • 4 weeks later...

Da ich soetwas gerade entwickelt habe, stelle ich es euch gerne zur verfügung!

Damit habe ich gerade ca. 4900 Kunden über eine csv-datei importiert und jedem eine eMail geschickt mit einem neuen Passwort.


<?php


define('GZIP_COMPRESSION','false');


include ('includes/application_top.php');


require_once (DIR_FS_INC.'xtc_get_country_list.inc.php');

require_once (DIR_FS_INC.'xtc_validate_email.inc.php');

require_once (DIR_FS_INC.'xtc_encrypt_password.inc.php');

require_once (DIR_FS_INC.'xtc_get_geo_zone_code.inc.php');

require_once (DIR_FS_INC.'xtc_write_user_info.inc.php');


function getpass($laenge=10)

{

	$newpass = "";

    	$string="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";


    	mt_srand((double)microtime()*1000000);


    	for ($i=1; $i <= $laenge; $i++)

    	{

    		$newpass .= substr($string, mt_rand(0,strlen($string)-1), 1);

    	}

	return $newpass;

}


$lines = 0;

$lines_ok = 0;


$importfile="kunden_import.csv";


$fh = fopen($importfile, "r") or die ("Kann Datei nicht lesen.");


while(!feof($fh))

{

	// zeile einlesen & werte zuweisen

	$zeile=fgets($fh);

	list($anrede, $firstname, $lastname, $company, $geburtsdatum, $street_address, $lkz, $postcode, $city, $suburb, $telephone, $fax, $email_address, $password) = split(";", $zeile);

	$lines+=1;


	// neues zufallspasswort erstelllen.

	$password = getpass(10);


	// vorhandene Daten aufbereiten.

	switch($anrede)

	{

		case "01":

			$gender = "m";

			break;


		case "02":

			$gender = "f";

			break;


		default:

			$gender = "m";

	}


	// http://www.didihome.de/html/tab-lkz.htm

	// Problemkinder: BAL, EI


	switch(strtoupper($lkz))

	{

		case "D":

			$lkz = "DE";

			break;


		case "A":

			$lkz = "AT";

			break;


		case "F":

			$lkz = "FR";

			break;


		case "WD":

			$lkz = "DM";

			break;


		case "CDN":

			$lkz = "CA";

			break;


		case "I":

			$lkz = "IT";

			break;


		case "N":

			$lkz = "NO";

			break;


		case "U":

			$lkz = "UY";

			break;


		// ?? P = POLEN!?

		case "P":

			$lkz = "PL";

			break;


		case "J":

			$lkz = "JP";

			break;


		case "E":

			$lkz = "ES";

			break;


		case "H":

			$lkz = "HU";

			break;


		case "AUS":

			$lkz = "AU";

			break;


		case "FL":

			$lkz = "LI";

			break;


		case "S":

			$lkz = "SE";

			break;


		case "L":

			$lkz = "LU";

			break;


		case "RB":

			$lkz = "BW";

			break;


		case "FIN":

			$lkz = "FI";

			break;


		case "RI":

			$lkz = "ID";

			break;


		case "B":

			$lkz = "BE";

			break;


		case "SGP":

			$lkz = "SG";

			break;


		case "EST":

			$lkz = "EE";

			break;


		case "IRL":

			$lkz = "IE";

			break;


		case "RUS":

			$lkz = "RU";

			break;


		case "SLO":

			$lkz = "SI";

			break;


		case "USA":

			$lkz = "US";

			break;

	}	

	$country_query = xtc_db_query("SELECT * FROM `countries` WHERE `countries_iso_code_2` = '".strtoupper($lkz)."'");

	$country_data = xtc_db_fetch_array($country_query);

	$country = $country_data['countries_id'];


	if(!is_numeric($country_data['countries_id']))

	{

		echo "   <b>ERROR:</b> LKZ_CONVERT_ERROR<br>\n";

		echo "lkz=".$lkz." countries_id=".$country_data['countries_id']. " countries_name=".$country_data['countries_name']."<br>\n";

	}


	if ($geburtsdatum != ".000000000" && $geburtsdatum != "")

	{

		list($jahr, $monat, $tag) = sscanf($geburtsdatum,"%4d%2d%2d.%d");


		$dob = sprintf("%02d.%02d.%4d",$tag,$monat,$jahr);

		//echo $geburtsdatum . " = " . $dob ."<br>\n";

	}

	else

		$dob='';


	// sonnstige variablen

	$customers_status = DEFAULT_CUSTOMERS_STATUS_ID;

	$newsletter = "0";

	$do_not_report = false;


	// daten in db eintragen

	require_once(DIR_WS_CLASSES.'vat_validation.php');


	$vatID = new vat_validation($vat, '', '', $country);

	$customers_status = $vatID->vat_info['status'];

	$customers_vat_id_status = $vatID->vat_info['vat_id_status'];

	$error = $vatID->vat_info['error'];


	if($error==1)

	{


		//$messageStack->add('create_account', ENTRY_VAT_ERROR);

		echo "   <b>ERROR:</b> ENTRY_VAT_ERROR<br>\n";

		$error = true;


	}


	if(!is_numeric($country_data['countries_id']))

		$error = true;


	$email_exists = false;

	$check_email_query = xtc_db_query("select count(*) as total from ".TABLE_CUSTOMERS." where customers_email_address = '".xtc_db_input($email_address)."' and account_type = '0'");

	$check_email = xtc_db_fetch_array($check_email_query);


	if ($check_email['total'] > 0) {


		$email_exists = true;

	}


	if($email_exists == true)

	{

		$error = true;

		$do_not_report = true;


		//$messageStack->add('create_account', ENTRY_EMAIL_ADDRESS_ERROR_EXISTS);

		//echo "   <b>ERROR:</b> ENTRY_EMAIL_ADDRESS_ERROR_EXISTS<br>\n";

	}

	elseif (strlen($email_address) < ENTRY_EMAIL_ADDRESS_MIN_LENGTH)

	{


		$error = true;

		//$messageStack->add('create_account', ENTRY_EMAIL_ADDRESS_ERROR);

		echo "   <b>ERROR:</b> ENTRY_EMAIL_ADDRESS_ERROR<br>\n";


	}


	elseif (xtc_validate_email($email_address) == false)

	{


		$error = true;

		//$messageStack->add('create_account', ENTRY_EMAIL_ADDRESS_CHECK_ERROR);

		echo "   <b>ERROR:</b> ENTRY_EMAIL_ADDRESS_CHECK_ERROR<br>\n";

/*

	        $fp3 = fopen("kunden_import_mail-check-fail.csv", "a");

	        fputs($fp3, $zeile);

	        fclose ($fp3);

*/


	}


	if($dob != '')

	{

		if (checkdate(substr(xtc_date_raw($dob), 4, 2), substr(xtc_date_raw($dob), 6, 2), substr(xtc_date_raw($dob), 0, 4)) == false)

		{


			$error = true;

			echo "   <b>ERROR:</b> ENTRY_DATE_OF_BIRTH_ERROR<br>\n";


			//$messageStack->add('create_account', ENTRY_DATE_OF_BIRTH_ERROR);


		}

	}


	if($error != true)

	{

		$lines_ok += 1;


		$sql_data_array = array ('customers_vat_id' => $vat, 'customers_vat_id_status' => $customers_vat_id_status, 'customers_status' => $customers_status, 'customers_firstname' => $firstname, 'customers_lastname' => $lastname, 'customers_email_address' => $email_address, 'customers_telephone' => $telephone, 'customers_fax' => $fax, 'customers_newsletter' => $newsletter, 'customers_password' => xtc_encrypt_password($password),'customers_date_added' => 'now()','customers_last_modified' => 'now()');



		$sql_data_array['customers_gender'] = $gender;

		$sql_data_array['customers_dob'] = xtc_date_raw($dob);

		xtc_db_perform(TABLE_CUSTOMERS, $sql_data_array);

		$user_id = xtc_db_insert_id();


		//xtc_write_user_info($user_id);


		$sql_data_array = array ('customers_id' => $user_id, 'entry_firstname' => $firstname, 'entry_lastname' => $lastname, 'entry_street_address' => $street_address, 'entry_postcode' => $postcode, 'entry_city' => $city, 'entry_country_id' => $country,'address_date_added' => 'now()','address_last_modified' => 'now()');




		$sql_data_array['entry_gender'] = $gender;

		$sql_data_array['entry_company'] = $company;


		if (ACCOUNT_SUBURB == 'true')

			$sql_data_array['entry_suburb'] = $suburb;



		if (ACCOUNT_STATE == 'true')

		{


			if ($zone_id > 0)

			{


				$sql_data_array['entry_zone_id'] = $zone_id;

				$sql_data_array['entry_state'] = '';


			}

			else

			{

				$sql_data_array['entry_zone_id'] = '0';

				$sql_data_array['entry_state'] = $state;

			}

		}



		xtc_db_perform(TABLE_ADDRESS_BOOK, $sql_data_array);

		$address_id = xtc_db_insert_id();


		xtc_db_query("update ".TABLE_CUSTOMERS." set customers_default_address_id = '".$address_id."' where customers_id = '".(int) $user_id."'");


		xtc_db_query("insert into ".TABLE_CUSTOMERS_INFO." (customers_info_id, customers_info_number_of_logons, customers_info_date_account_created) values ('".(int) $user_id."', '0', now())");



		// create smarty elements


		$smarty = new Smarty;


		$smarty->assign('GENDER', $gender);

		$smarty->assign('FIRSTNAME', $firstname);


		$smarty->assign('LASTNAME', $lastname);

		$smarty->assign('EMAIL', $email_address);

		$smarty->assign('PASSWORT', $password);


		$smarty->caching = false;

		$txt_mail_customer = $smarty->fetch(DIR_FS_CATALOG.'kunden_import_mail.txt');


		$mail_subject = "Unser neuer Onlineshop";


/*

		echo "<pre>\n";

		echo $txt_mail_customer;

		echo "</pre>\n";

*/

		// mail versenden

		xtc_php_mail(STORE_OWNER_EMAIL_ADDRESS, STORE_OWNER, $email_address, $firstname.' '.$lastname, '', STORE_OWNER_EMAIL_ADDRESS, STORE_OWNER, '', '', $mail_subject, '', $txt_mail_customer);


	}

	else

	{

		if(!$do_not_report==true)

		{

			echo "<b color=\"red\">fehler beim anlegen von $firstname, $lastname, $company, $email_address</b><br>\n";

			echo "<b>------------------------------------------------------------------------------------------------------</b><br>\n";

		}

	}


	flush();


}

fclose($fh);


echo "$lines_ok von $lines Daten importiert!";


include ('includes/application_bottom.php');

?>


Und das Mail-Template:


{if $GENDER == 'f'}

Sehr geehrte Frau {$LASTNAME},

{else}

Sehr geehrter Herr {$LASTNAME},

{/if}


seit 01.02.2007 ist unser neuer Onlineshop unter [url=http://www.modellsport.de/shop/]Modellsport.de[/url] erreichbar.


Da Sie bereits Kunde bei uns sind, haben wir Ihre Daten in den neuen Shop übernommen. Sie können sich mit folgenden Login-Daten anmelden: 


Benutzer: {$EMAIL}

Passwort: {$PASSWORT}


Bitte überprüfen Sie bei Gelegenheit, ob die Angaben, wie Name, Adresse usw. noch korrekt sind und geben uns Bescheid, wenn sich irgendwelche Fehler eingeschlichen oder Daten geändert haben sollten.


Wir danken für Ihre Mithilfe und verbleiben


mit freundlichen Grüßen

MODELLSPORT VERLAG GMBH

- Vertrtiebsleitung -


Thomas Wäldele

Es ist zwar kein allround script, aber man kann es entsprechend anpassen und dient deswegen mal als grundlage.

Weiß jemand wie man dieses Script einbauen muß ???

Link to comment
Share on other sites

  • 1 month later...

man muss die kundendaten nur auf die tabellen

customers

adress_book

und customers_info verteilen

Die feldnamen in diesen Tabellen sind eigentlich selbsterklärend.

Das ist schön, wenn es so einfach ist. Ich wechsele von OSC zu XTC aus verschiedenen Gründen. Der Shop steht, nun müssen noch 2.800 Kunden incl. Bestellungen portiert werden.

Das soll nun im XTC Shop 500 Euro kosten. Ich empfinde das auf Grund obiger Aussage als Frechheit und verstehe, warum dieses Tool nicht eingebaut ist oder irgendwo eine Anleitung zum do it yourself zu finden ist.

Hat bitte jemand einen Tip, wo man dies für einen fairen Preis realisieren lassen kann?

Link to comment
Share on other sites

Danke für die schnelle Antwort, die allerdings drei Fragen bei mir aufwirft:

1.) Warum ist es ein pauschaler Preis? Ist es kein Unterschied im Aufwand, 500 oder 5000 Kunden oder Artikel zu portieren? Hieraus schliesst man doch, das es irgend eine Routine zur Portierung geben muss?

2.) "Nicht enthalten im Angebot sind Anpassungen, Programmierarbeiten...", bedeutet dies, das bei auftretenden Fehlern nochmals ein Bertag X hinzukommt oder betrifft dies nicht den Bereich der eigentlichen Portierung?

3.) Wenn es offenbar eine Routine dafür gibt oder zumindest einen Plan, welche Tabellen der Datenbank von beiden Shopsystemen hier zusammengeführt werden müssen, warum lässt man den Kunden nicht diese Handarbeit erledigen, bei der er nach eigener Sorgfalt auch Fehler wie falsche Namensschreibung, Groß-Kleinschrift etc. korrigieren kann?

Eine halbe A4 Seite Anleitung kann doch hier nicht zuviel verlangt sein, so das man sich zumindest als halbwegs veranlagter Kunde selbst versuchen kann?

Verstehen Sie mich nicht falsch Marco, es ist schon klar und korrekt das Sie mit Zusatzaufträgen Ihr Geld verdienen. Mich ärgert es nur, das ich nach den 800 Euro für eine professionelle Shoperstellung mit Zusatzmodulen noch einmal kräftig drauflegen soll. Zudem für eine Datenportierung, in der ich bei allen möglichen anstehenden Fragen vor dem Wechsel zu XTC wirklich keine Fragen erwartete da es mir selbstverständlich erschien, das dies in irgendeiner Form integriert oder zumindest nachzulesen ist.

In diesem Fall steht man als Neukunde einfach da und ärgert sich.

So als kaufe man einen Neuwagen bei dem sich herausstellt, das nachträglich die Montage des Tankstutzens beauftragt werden soll.

Link to comment
Share on other sites

1.) Warum ist es ein pauschaler Preis? Ist es kein Unterschied im Aufwand, 500 oder 5000 Kunden oder Artikel zu portieren? Hieraus schliesst man doch, das es irgend eine Routine zur Portierung geben muss?

Ja dafür haben wir scripts, eine mauelle nachbearbeitung und kontrolle ist aber erforderlich.

500 Eur sind dafür auch kein großer Preis, das sind nichtmal 7 Arbeitsstunden, welche für eine Portierung aber schnell anfallen.

2.) "Nicht enthalten im Angebot sind Anpassungen, Programmierarbeiten...", bedeutet dies, das bei auftretenden Fehlern nochmals ein Bertag X hinzukommt oder betrifft dies nicht den Bereich der eigentlichen Portierung?

Das bedeutet das die Portierung für eine Standardinstallation ist, sollte man zb eine modifizierte oscommerce version besitzen die nichtmehr über eine originale datenbankstruktur verfügt, enstehen kosten wenn dadurch ein mehraufwand seitens der portierung ensteht.

3.) Wenn es offenbar eine Routine dafür gibt oder zumindest einen Plan, welche Tabellen der Datenbank von beiden Shopsystemen hier zusammengeführt werden müssen, warum lässt man den Kunden nicht diese Handarbeit erledigen, bei der er nach eigener Sorgfalt auch Fehler wie falsche Namensschreibung, Groß-Kleinschrift etc. korrigieren kann?

Das gab es bereits, aber zuviele Kunden hatten mit der komplexen Aufgabe Probleme, genau aus diesem Grund gibt es auch eine Dienstleistung dafür.

Bitte beachten Sie das es auf dem Markt einige hundert verschiede Shopsysteme gibt, wir können nicht für jedes System fertige Portierungsscript und Anleitungen bereitstellen.

Link to comment
Share on other sites

...

Bitte beachten Sie das es auf dem Markt einige hundert verschiede Shopsysteme gibt, wir können nicht für jedes System fertige Portierungsscript und Anleitungen bereitstellen.

Ok, das ist andererseits verständlich. Dann werde ich wohl nicht umhinkommen, den Service in Anspruch zu nehmen.

Vielen Dank zunächst für die Klarstellungen.

Link to comment
Share on other sites

... das ich nach den 800 Euro für eine professionelle Shoperstellung mit Zusatzmodulen noch einmal kräftig drauflegen soll. Zudem für eine Datenportierung, in der ich bei allen möglichen anstehenden Fragen vor dem Wechsel zu XTC wirklich keine Fragen erwartete da es mir selbstverständlich erschien, das dies in irgendeiner Form integriert oder zumindest nachzulesen ist.

In diesem Fall steht man als Neukunde einfach da und ärgert sich.

So als kaufe man einen Neuwagen bei dem sich herausstellt, das nachträglich die Montage des Tankstutzens beauftragt werden soll.

also wenn jemand für die Shoperstellung 800 Euro genommen hat ( und sicher informiert war das das ein wechsel von OS auf XT ist - dann sollte das doch wohl INKL. der Daten sein.... :confused:

@stalinstadt=guck mal ins postfach - hab da nen link für ein oscommerce modul gefunden

Link to comment
Share on other sites

Hallo,

ich versuche das Script zu verwenden, bekomme aber folgenden Fehler:

ERROR: LKZ_CONVERT_ERROR

lkz= countries_id= countries_name=

ERROR: ENTRY_EMAIL_ADDRESS_ERROR

fehler beim anlegen von , , ,

------------------------------------------------------------------------------------------------------

ERROR: LKZ_CONVERT_ERROR

lkz= countries_id= countries_name=

ERROR: ENTRY_EMAIL_ADDRESS_ERROR

fehler beim anlegen von , , ,

------------------------------------------------------------------------------------------------------

ERROR: LKZ_CONVERT_ERROR

lkz= countries_id= countries_name=

ERROR: ENTRY_EMAIL_ADDRESS_ERROR

fehler beim anlegen von , , ,

------------------------------------------------------------------------------------------------------

0 von 3 Daten importiert!

Das Problem wurde schon einmal angesprochen. Gibt es dafür eine Lösung? Was mache ich falsch

Danke im Voraus

Link to comment
Share on other sites

  • 2 months later...

Schon möglich. Aber die behalten ihr Wissen offensichtlich für sich oder verkaufen es für viel Geld. Ich muss schon etwas staunen über die "Kundenfreundlichkeit" die hier an den Tag gelegt wird. Seitens der Macher von xtc wird auf Daten verwiesen die es nicht mehr gibt, oder die User werden einfach schroff abgeblockt. Wenn das die Form von Support ist, mal abgesehen von der "Friss (bezahl) - oder - stirb - Manier", dann frag ich mich, warum sich xtc nicht mal gedanken darüber macht, dass auf andere Weise mit Sicherheit mehr Kunden gehalten oder wenigstens zufrieden gestellt werden. Auf diese Weise treibt man die Leute nur weg. Wie soll man guten Gewissens zu einem Produkt raten, bei dem man einfach allein im Regen stehen gelassen wird?! Nicht zuletzt hab ich von einer Firma die dafür bezahlt wurde die Info bekommen, dass sowas wie ein funktionierender Export / Import bei xt:commerce etwas sei dass es nicht gibt und auch nie geben wird.

Danke für die Info.

Link to comment
Share on other sites

Ich habe inzwischen alle Datenbanken in ein csv file exportiert dann aufbereitet für den Insert als Textdatei in den entsprechenden Datenbankfeldern. Einfach per SQL exportieren und importieren ist nun wirklich kein Akt, ABER wehe man hat einige externe Module in den Shop eingebaut, denn dann passen die Datenbankfelder nicht mehr und mann muss halt vorher die csv files anpassen.

Und da wir ein SEO XT-Commerce Shop umziehen wollten passten einige Datenbank felder nicht mehr.

Also wie gesagt, ist euer Shop immer noch der Standartshop von XTC, dann einfach per SQL-Export in eurer Datenbank alt die entsprechenden Datenbanken exportieren und in eurer neuen Datenbank importieren.

Gruß

Zacharias

Link to comment
Share on other sites

  • 1 year later...
  • 6 months later...

Der Script von ThomasCr ist wow! Danke!

Ich habe ein paar kleine Änderungen vorgenommen, so zB. wird immer 1 Satz über das Dateiende hinausgelesen, dann kommt die Meldung mit dem Land.

Der Aufbau ist wert;wert;wert; also ohne Anführungsstriche, Semikolongetrennt, je Datensatz eine Zeile. Beispiel:

01;20123;Hans;Meier;MeineFirma; ;MeineStr. 4;D;77777;Irgendwo;Adresszusatz;0123-2342;0123-2349;[email protected];password

die PHP-Datei wie die DIV- Datei im Root ablegen und die PHP über browser aufrufen. ggf. noch die PHP auf ausführbar setzen (chmod).

Ich werde an dem Source dran bleiben, da ich so was für die Sage Classic Line brauche. Hier schon mal eine funktionierende und teildokumentierte Version.

<?php


define('GZIP_COMPRESSION','false');


include ('includes/application_top.php');


require_once (DIR_FS_INC.'xtc_get_country_list.inc.php');

require_once (DIR_FS_INC.'xtc_validate_email.inc.php');

require_once (DIR_FS_INC.'xtc_encrypt_password.inc.php');

require_once (DIR_FS_INC.'xtc_get_geo_zone_code.inc.php');

require_once (DIR_FS_INC.'xtc_write_user_info.inc.php');

//------------------------------------------------------------------------

function getpass($laenge=10)

{

	$newpass = "";

    	$string="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";


    	mt_srand((double)microtime()*1000000);


    	for ($i=1; $i <= $laenge; $i++)

    	{

    		$newpass .= substr($string, mt_rand(0,strlen($string)-1), 1);

    	}

	return $newpass;

}



//------------------------------------------------------------------------

// Programm startet hier

$lines = 0;

$lines_ok = 0;


// Importdatei mit den Kundendaten

// Das Format ist csv, d.h. Felder werden mit Semikolon getrennt, keine Anfuehrungszeichen, jeder Datensatz hat eine eigene Zeile

// z.Beispiel:  01;20123;Hans;Meier;MeineFirma; ;MeineStr. 4;D;77777;Irgendwo;Adresszusatz;0123-2342;0123-2349;[email protected];password

//                                             '- leer gelassenes Feld 


// Der Dateiname kann hier geaendert werden. Die Datei muss im Stammverzeichnis des Shops liegen.

// Aufruf über 'www.meinshop.de/kundenimport.php'

$importfile="kunden_import.csv";


// Kundendatei öffnen

$fh = fopen($importfile, "r") or die ("Kann Datei nicht lesen.");


// Erste Zeile einlesen

$zeile=fgets($fh);


// Schleife wiederholen bis alle Datensaetze abgearbeitet sind

while(!feof($fh))

{

	//  Werte zerlegen (;)und Werte zuweisen

	list($anrede, $customer, $firstname, $lastname, $company, $geburtsdatum, $street_address, $lkz, $postcode, $city, $suburb, $telephone, $fax, $email_address, $password) = split(";", $zeile);


	$lines+=1;


	// neues Zufallspasswort erstellen.

	$password = getpass(10);


	// Daten 'anrede'aufbereiten, abhaengig von den Eingangswerten für die Anrede.

	// die Varianten koennen beliebig erweitert werden, indem neue case ... eingetragen werden.

	// xtc erwartet die Anrede (gender) als (m)ale oder (f)emale

	switch($anrede)

	{

		case "01":

		case "Herr":

		case "M":

			$gender = "m";

			break;


		case "02":

		case "Frau":

		case "W":

			$gender = "f";

			break;


		//nichts passt, dann Herr

		default:

			$gender = "m";

	}


	// http://www.didihome.de/html/tab-lkz.htm

	// Problemkinder: BAL, EI



	switch($lkz)

	{

		case "D":

		case "DE":

		case "":

			$lkz = "DE";

			break;


		case "A":

			$lkz = "AT";

			break;


		case "F":

			$lkz = "FR";

			break;


		case "WD":

			$lkz = "DM";

			break;


		case "CDN":

			$lkz = "CA";

			break;


		case "I":

			$lkz = "IT";

			break;


		case "N":

			$lkz = "NO";

			break;


		case "U":

			$lkz = "UY";

			break;


		// ?? P = POLEN!?

		case "P":

			$lkz = "PL";

			break;


		case "J":

			$lkz = "JP";

			break;


		case "E":

			$lkz = "ES";

			break;


		case "H":

			$lkz = "HU";

			break;


		case "AUS":

			$lkz = "AU";

			break;


		case "FL":

			$lkz = "LI";

			break;


		case "S":

			$lkz = "SE";

			break;


		case "L":

			$lkz = "LU";

			break;


		case "RB":

			$lkz = "BW";

			break;


		case "FIN":

			$lkz = "FI";

			break;


		case "RI":

			$lkz = "ID";

			break;


		case "B":

			$lkz = "BE";

			break;


		case "SGP":

			$lkz = "SG";

			break;


		case "EST":

			$lkz = "EE";

			break;


		case "IRL":

			$lkz = "IE";

			break;


		case "RUS":

			$lkz = "RU";

			break;


		case "SLO":

			$lkz = "SI";

			break;


		case "USA":

			$lkz = "US";

			break;

		default:

			echo "Land nicht gefunden, DE gesetzt.<br>";

			$lkz = "DE";

			break;

	}


	// sql-Abfrage aufbauen mit ermitteltem Laenderkennzeichen

	$country_query = xtc_db_query("SELECT * FROM `countries` WHERE `countries_iso_code_2` = '".strtoupper($lkz)."'");

	// sql-Abfrage abfeuern

	$country_data = xtc_db_fetch_array($country_query);

	// Land-ID als Ergebnis retten, es wird in der DB nicht die Kennung sondern der Index (ID) gespeichert

	$country = $country_data['countries_id'];


	// Keine Land-ID gefunden? Fehler sollte nicht auftreten, da zuvor ja 'DE' als default gesetzt wurde, es sei denn,

	// das Land DE existiert nicht im Shop

	if(!is_numeric($country_data['countries_id']))

	{

		echo "   <b>ERROR:</b> LKZ_CONVERT_ERROR<br>\n";

		echo "lkz=".$lkz." countries_id=".$country_data['countries_id']. " countries_name=".$country_data['countries_name']."<br>\n";

	}

	else

	{

	 	echo "Land ist " .$country . " / " . $country_data['countries_name']."<br>\n";

	}


	// weiter mit Geburtstag, darf auch leer sein

	if ($geburtsdatum != ".000000000" && $geburtsdatum != "")

	// Geburtstag uebergeben

	{

		// Datum formatieren, hier koennen Anpassungen notwendig sein, je nach Eingangsdaten

		list($jahr, $monat, $tag) = sscanf($geburtsdatum,"%4d%2d%2d.%d");


		// erstellt 'tt.mm.jjjj' - Zeichenfolge

		$dob = sprintf("%02d.%02d.%4d",$tag,$monat,$jahr);

		echo $geburtsdatum . " = " . $dob ."<br>\n";

	}

	else

	// Geburtstag wurde nicht uebergeben (leer)

	{

		$dob='';

	}


	// sonstige Variablen belegen

	// Kundenstatus mit Standardwert belegen, 

	// Einstellung unter 'Konfiguration' / 'Mein Shop', hier Feld 'Kundenstatus für Neukunden''

	$customers_status = DEFAULT_CUSTOMERS_STATUS_ID;


	$newsletter = "0";


	$do_not_report = false;


	// daten in db eintragen



	require_once(DIR_WS_CLASSES.'vat_validation.php');


	$vatID = new vat_validation($vat, '', '', $country);

	$customers_status = $vatID->vat_info['status'];

	$customers_vat_id_status = $vatID->vat_info['vat_id_status'];

	$error = $vatID->vat_info['error'];


	if($error==1)

	{


		//$messageStack->add('create_account', ENTRY_VAT_ERROR);

		echo "   <b>ERROR:</b> ENTRY_VAT_ERROR<br>\n";

		$error = true;


	}


	if(!is_numeric($country_data['countries_id']))

		$error = true;



	// Pruefung der email- Adresse

	// Schalter vorbelegen	

	$email_exists = false;

	// sql- Abfrage aufbauen

	$check_email_query = xtc_db_query("select count(*) as total from ".TABLE_CUSTOMERS." where customers_email_address = '".xtc_db_input($email_address)."' and account_type = '0'");

	$check_email = xtc_db_fetch_array($check_email_query);


	if ($check_email['total'] > 0) {


		$email_exists = true;

	}


	if($email_exists == true)

	{

		$error = true;

		$do_not_report = true;


		//$messageStack->add('create_account', ENTRY_EMAIL_ADDRESS_ERROR_EXISTS);

		//echo "   <b>ERROR:</b> ENTRY_EMAIL_ADDRESS_ERROR_EXISTS<br>\n";

	}

	elseif (strlen($email_address) < ENTRY_EMAIL_ADDRESS_MIN_LENGTH)

	{


		$error = true;

		//$messageStack->add('create_account', ENTRY_EMAIL_ADDRESS_ERROR);

		echo "   <b>ERROR:</b> ENTRY_EMAIL_ADDRESS_ERROR<br>\n";


	}


	elseif (xtc_validate_email($email_address) == false)

	{


		$error = true;

		//$messageStack->add('create_account', ENTRY_EMAIL_ADDRESS_CHECK_ERROR);

		echo "   <b>ERROR:</b> ENTRY_EMAIL_ADDRESS_CHECK_ERROR<br>\n";

/*

	        $fp3 = fopen("kunden_import_mail-check-fail.csv", "a");

	        fputs($fp3, $zeile);

	        fclose ($fp3);

*/


	}


	if($dob != '')

	{

		if (checkdate(substr(xtc_date_raw($dob), 4, 2), substr(xtc_date_raw($dob), 6, 2), substr(xtc_date_raw($dob), 0, 4)) == false)

		{


			$error = true;

			echo "   <b>ERROR:</b> ENTRY_DATE_OF_BIRTH_ERROR<br>\n";


			//$messageStack->add('create_account', ENTRY_DATE_OF_BIRTH_ERROR);


		}

	}


	if($error != true)

	{

		$lines_ok += 1;


		$sql_data_array = array ('customers_vat_id' => $vat, 'customers_vat_id_status' => $customers_vat_id_status, 'customers_status' => $customers_status, 'customers_firstname' => $firstname, 'customers_lastname' => $lastname, 'customers_email_address' => $email_address, 'customers_telephone' => $telephone, 'customers_fax' => $fax, 'customers_newsletter' => $newsletter, 'customers_password' => xtc_encrypt_password($password),'customers_date_added' => 'now()','customers_last_modified' => 'now()');



		$sql_data_array['customers_gender'] = $gender;

		$sql_data_array['customers_dob'] = xtc_date_raw($dob);

		xtc_db_perform(TABLE_CUSTOMERS, $sql_data_array);

		$user_id = xtc_db_insert_id();


		xtc_write_user_info($user_id);


		$sql_data_array = array ('customers_id' => $user_id, 'entry_firstname' => $firstname, 'entry_lastname' => $lastname, 'entry_street_address' => $street_address, 'entry_postcode' => $postcode, 'entry_city' => $city, 'entry_country_id' => $country,'address_date_added' => 'now()','address_last_modified' => 'now()');




		$sql_data_array['entry_gender'] = $gender;

		$sql_data_array['entry_company'] = $company;


		if (ACCOUNT_SUBURB == 'true')

			$sql_data_array['entry_suburb'] = $suburb;



		if (ACCOUNT_STATE == 'true')

		{


			if ($zone_id > 0)

			{


				$sql_data_array['entry_zone_id'] = $zone_id;

				$sql_data_array['entry_state'] = '';


			}

			else

			{

				$sql_data_array['entry_zone_id'] = '0';

				$sql_data_array['entry_state'] = $state;

			}

		}



		xtc_db_perform(TABLE_ADDRESS_BOOK, $sql_data_array);

		$address_id = xtc_db_insert_id();


		xtc_db_query("update ".TABLE_CUSTOMERS." set customers_default_address_id = '".$address_id."' where customers_id = '".(int) $user_id."'");


		xtc_db_query("insert into ".TABLE_CUSTOMERS_INFO." (customers_info_id, customers_info_number_of_logons, customers_info_date_account_created) values ('".(int) $user_id."', '0', now())");



		// create smarty elements


		$smarty = new Smarty;


		$smarty->assign('GENDER', $gender);

		$smarty->assign('FIRSTNAME', $firstname);


		$smarty->assign('LASTNAME', $lastname);

		$smarty->assign('EMAIL', $email_address);

		$smarty->assign('PASSWORT', $password);


		$smarty->caching = false;

		$txt_mail_customer = $smarty->fetch(DIR_FS_CATALOG.'kunden_import_mail.txt');

echo DIR_FS_CATALOG;

		$mail_subject = "Unser neuer Onlineshop";


/*

		echo "<pre>\n";

		echo $txt_mail_customer;

		echo "</pre>\n";

*/

		// mail versenden

		xtc_php_mail(STORE_OWNER_EMAIL_ADDRESS, STORE_OWNER, $email_address, $firstname.' '.$lastname, '', STORE_OWNER_EMAIL_ADDRESS, STORE_OWNER, '', '', $mail_subject, '', $txt_mail_customer);


	}

	else

	{

		if(!$do_not_report==true)

		{

			echo "<b color=\"red\">fehler beim anlegen von $firstname, $lastname, $company, $email_address</b><br>\n";

			echo "<b>------------------------------------------------------------------------------------------------------</b><br>\n";

		}

	}


	flush();


	// Zeile einlesen

	$zeile=fgets($fh);

	echo "<br>";

}

fclose($fh);


echo "$lines_ok von $lines Daten importiert!";


include ('includes/application_bottom.php');

?>

Link to comment
Share on other sites

Was macht das Script genau?

Es liest jeden Satz der Importdatei, legt einen User an, verpasst diesem ein Zufalls-Passwort und schreibt dem Kunden eine eMail.

-> Leider ist diese Mail leer, habe noch nicht herausgefunden, was ich falsch mache.

Vergibt es ein zufälliges Passwort?

JA

Werden die Kunden dann informiert??

Ja, per Mail

Link to comment
Share on other sites

  • 2 weeks later...

Hi,

bin nach der Beschreibung vorgegangen...

Funktioniert auch soweit, bis auf zwei nicht unwesentliche punkte...

Das Skript importiert nur den ersten Kunden aus der CSV und beendet damit die Abfrage…:(

Wo kann ich das für X-Kunden machen?

leider teilt das script nicht die Kundennummer und auch nicht das Bundesland mit.:confused:

Ausserdem würde ich gerne die Kunden die Importiert werden automatisch mit in den Rundschreiben/Newsletter-Verteiler einsetzen, was müsst da noch hinzugeschrieben werden, diese können sich dann via Link wieder abmelden...:D

Link to comment
Share on other sites

<?php


define('GZIP_COMPRESSION','false');


include ('includes/application_top.php');


require_once (DIR_FS_INC.'xtc_get_country_list.inc.php');

require_once (DIR_FS_INC.'xtc_validate_email.inc.php');

require_once (DIR_FS_INC.'xtc_encrypt_password.inc.php');

require_once (DIR_FS_INC.'xtc_get_geo_zone_code.inc.php');

require_once (DIR_FS_INC.'xtc_write_user_info.inc.php');

//------------------------------------------------------------------------

function getpass($laenge=10)

{

	$newpass = "";

    	$string="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";


    	mt_srand((double)microtime()*1000000);


    	for ($i=1; $i <= $laenge; $i++)

    	{

    		$newpass .= substr($string, mt_rand(0,strlen($string)-1), 1);

    	}

	return $newpass;

}



//------------------------------------------------------------------------

// Programm startet hier

$lines = 0;

$lines_ok = 0;


// Importdatei mit den Kundendaten

// Das Format ist csv, d.h. Felder werden mit Semikolon getrennt, keine Anfuehrungszeichen, jeder Datensatz hat eine eigene Zeile

// z.Beispiel:  01;20123;Hans;Meier;MeineFirma; ;MeineStr. 4;D;77777;Irgendwo;Adresszusatz;0123-2342;0123-2349;[email protected];password

//                                             '- leer gelassenes Feld 


// Der Dateiname kann hier geaendert werden. Die Datei muss im Stammverzeichnis des Shops liegen.

// Aufruf über 'www.meinshop.de/kundenimport.php'

$importfile="kunden_import.csv";


// Kundendatei öffnen

$fh = fopen($importfile, "r") or die ("Kann Datei nicht lesen.");


// Schleife wiederholen bis alle Datensaetze abgearbeitet sind

while(!feof($fh))

{

	// zeile einlesen & werte zuweisen

	$zeile=fgets($fh);

	list($anrede, $customer, $firstname, $lastname, $geburtsdatum, $company, $street_address, $lkz, $postcode, $city, $suburb, $telephone, $fax, $email_address, $password) = split(";", $zeile);

	$lines+=1;

	// neues Zufallspasswort erstellen.

	$password = getpass(10);


	// Daten 'anrede'aufbereiten, abhaengig von den Eingangswerten für die Anrede.

	// die Varianten koennen beliebig erweitert werden, indem neue case ... eingetragen werden.

	// xtc erwartet die Anrede (gender) als (m)ale oder (f)emale

	switch($anrede)

	{

		case "01":

		case "Herr":

		case "M":

			$gender = "m";

			break;


		case "02":

		case "Frau":

		case "W":

			$gender = "f";

			break;


		//nichts passt, dann Herr

		default:

			$gender = "m";

	}


	// http://www.didihome.de/html/tab-lkz.htm

	// Problemkinder: BAL, EI



	switch($lkz)

	{

		case "D":

		case "DE":

		case "":

			$lkz = "DE";

			break;


		case "A":

			$lkz = "AT";

			break;


		case "F":

			$lkz = "FR";

			break;


		case "WD":

			$lkz = "DM";

			break;


		case "CDN":

			$lkz = "CA";

			break;


		case "I":

			$lkz = "IT";

			break;


		case "N":

			$lkz = "NO";

			break;


		case "U":

			$lkz = "UY";

			break;


		// ?? P = POLEN!?

		case "P":

			$lkz = "PL";

			break;


		case "J":

			$lkz = "JP";

			break;


		case "E":

			$lkz = "ES";

			break;


		case "H":

			$lkz = "HU";

			break;


		case "AUS":

			$lkz = "AU";

			break;


		case "FL":

			$lkz = "LI";

			break;


		case "S":

			$lkz = "SE";

			break;


		case "L":

			$lkz = "LU";

			break;


		case "RB":

			$lkz = "BW";

			break;


		case "FIN":

			$lkz = "FI";

			break;


		case "RI":

			$lkz = "ID";

			break;


		case "B":

			$lkz = "BE";

			break;


		case "SGP":

			$lkz = "SG";

			break;


		case "EST":

			$lkz = "EE";

			break;


		case "IRL":

			$lkz = "IE";

			break;


		case "RUS":

			$lkz = "RU";

			break;


		case "SLO":

			$lkz = "SI";

			break;


		case "USA":

			$lkz = "US";

			break;

		default:

			echo "Land nicht gefunden, DE gesetzt.<br>";

			$lkz = "DE";

			break;

	}


	// sql-Abfrage aufbauen mit ermitteltem Laenderkennzeichen

	$country_query = xtc_db_query("SELECT * FROM `countries` WHERE `countries_iso_code_2` = '".strtoupper($lkz)."'");

	// sql-Abfrage abfeuern

	$country_data = xtc_db_fetch_array($country_query);

	// Land-ID als Ergebnis retten, es wird in der DB nicht die Kennung sondern der Index (ID) gespeichert

	$country = $country_data['countries_id'];


	// Keine Land-ID gefunden? Fehler sollte nicht auftreten, da zuvor ja 'DE' als default gesetzt wurde, es sei denn,

	// das Land DE existiert nicht im Shop

	if(!is_numeric($country_data['countries_id']))

	{

		echo "   <b>ERROR:</b> LKZ_CONVERT_ERROR<br>\n";

		echo "lkz=".$lkz." countries_id=".$country_data['countries_id']. " countries_name=".$country_data['countries_name']."<br>\n";

	}

	else

	{

	 	echo "Land ist " .$country . " / " . $country_data['countries_name']."<br>\n";

	}


	// weiter mit Geburtstag, darf auch leer sein

	if ($geburtsdatum != ".000000000" && $geburtsdatum != "")

	// Geburtstag uebergeben

	{

		// Datum formatieren, hier koennen Anpassungen notwendig sein, je nach Eingangsdaten

		list($jahr, $monat, $tag) = sscanf($geburtsdatum,"%4d%2d%2d.%d");


		// erstellt 'tt.mm.jjjj' - Zeichenfolge

		$dob = sprintf("%02d.%02d.%4d",$tag,$monat,$jahr);

		echo $geburtsdatum . " = " . $dob ."<br>\n";

	}

	else

	// Geburtstag wurde nicht uebergeben (leer)

	{

		$dob='';

	}


	// sonstige Variablen belegen

	// Kundenstatus mit Standardwert belegen, 

	// Einstellung unter 'Konfiguration' / 'Mein Shop', hier Feld 'Kundenstatus für Neukunden''

	$customers_status = DEFAULT_CUSTOMERS_STATUS_ID;


	$newsletter = true;


	$do_not_report = false;


	// daten in db eintragen



	require_once(DIR_WS_CLASSES.'vat_validation.php');


	$vatID = new vat_validation($vat, '', '', $country);

	$customers_status = $vatID->vat_info['status'];

	$customers_vat_id_status = $vatID->vat_info['vat_id_status'];

	$error = $vatID->vat_info['error'];


	if($error==1)

	{


		//$messageStack->add('create_account', ENTRY_VAT_ERROR);

		echo "   <b>ERROR:</b> ENTRY_VAT_ERROR<br>\n";

		$error = true;


	}


	if(!is_numeric($country_data['countries_id']))

		$error = true;



	// Pruefung der email- Adresse

	// Schalter vorbelegen	

	$email_exists = false;

	// sql- Abfrage aufbauen

	$check_email_query = xtc_db_query("select count(*) as total from ".TABLE_CUSTOMERS." where customers_email_address = '".xtc_db_input($email_address)."' and account_type = '0'");

	$check_email = xtc_db_fetch_array($check_email_query);


	if ($check_email['total'] > 0) {


		$email_exists = true;

	}


	if($email_exists == true)

	{

		$error = true;

		$do_not_report = true;


		//$messageStack->add('create_account', ENTRY_EMAIL_ADDRESS_ERROR_EXISTS);

		//echo "   <b>ERROR:</b> ENTRY_EMAIL_ADDRESS_ERROR_EXISTS<br>\n";

	}

	elseif (strlen($email_address) < ENTRY_EMAIL_ADDRESS_MIN_LENGTH)

	{


		$error = true;

		//$messageStack->add('create_account', ENTRY_EMAIL_ADDRESS_ERROR);

		echo "   <b>ERROR:</b> ENTRY_EMAIL_ADDRESS_ERROR<br>\n";


	}


	elseif (xtc_validate_email($email_address) == false)

	{


		$error = true;

		//$messageStack->add('create_account', ENTRY_EMAIL_ADDRESS_CHECK_ERROR);

		echo "   <b>ERROR:</b> ENTRY_EMAIL_ADDRESS_CHECK_ERROR<br>\n";

/*

	        $fp3 = fopen("kunden_import_mail-check-fail.csv", "a");

	        fputs($fp3, $zeile);

	        fclose ($fp3);

*/


	}


	if($dob != '')

	{

		if (checkdate(substr(xtc_date_raw($dob), 4, 2), substr(xtc_date_raw($dob), 6, 2), substr(xtc_date_raw($dob), 0, 4)) == false)

		{


			$error = true;

			echo "   <b>ERROR:</b> ENTRY_DATE_OF_BIRTH_ERROR<br>\n";


			//$messageStack->add('create_account', ENTRY_DATE_OF_BIRTH_ERROR);


		}

	}


	if($error != true)

	{

		$lines_ok += 1;


		$sql_data_array = array ('customers_vat_id' => $vat, 'customers_vat_id_status' => $customers_vat_id_status, 'customers_status' => $customers_status, 'customers_firstname' => $firstname, 'customers_lastname' => $lastname, 'customers_email_address' => $email_address, 'customers_telephone' => $telephone, 'customers_fax' => $fax, 'customers_newsletter' => $newsletter, 'customers_password' => xtc_encrypt_password($password),'customers_date_added' => 'now()','customers_last_modified' => 'now()');



		$sql_data_array['customers_gender'] = $gender;

		$sql_data_array['customers_dob'] = xtc_date_raw($dob);

		xtc_db_perform(TABLE_CUSTOMERS, $sql_data_array);

		$user_id = xtc_db_insert_id();


		xtc_write_user_info($user_id);


		$sql_data_array = array ('customers_id' => $user_id, 'entry_firstname' => $firstname, 'entry_lastname' => $lastname, 'entry_street_address' => $street_address, 'entry_postcode' => $postcode, 'entry_city' => $city, 'entry_country_id' => $country,'address_date_added' => 'now()','address_last_modified' => 'now()');




		$sql_data_array['entry_gender'] = $gender;

		$sql_data_array['entry_company'] = $company;


		if (ACCOUNT_SUBURB == 'true')

			$sql_data_array['entry_suburb'] = $suburb;



		if (ACCOUNT_STATE == 'true')

		{


			if ($zone_id > 0)

			{


				$sql_data_array['entry_zone_id'] = $zone_id;

				$sql_data_array['entry_state'] = '';


			}

			else

			{

				$sql_data_array['entry_zone_id'] = '0';

				$sql_data_array['entry_state'] = $state;

			}

		}



		xtc_db_perform(TABLE_ADDRESS_BOOK, $sql_data_array);

		$address_id = xtc_db_insert_id();


		xtc_db_query("update ".TABLE_CUSTOMERS." set customers_default_address_id = '".$address_id."' where customers_id = '".(int) $user_id."'");


		xtc_db_query("insert into ".TABLE_CUSTOMERS_INFO." (customers_info_id, customers_info_number_of_logons, customers_info_date_account_created) values ('".(int) $user_id."', '0', now())");



		// create smarty elements


		$smarty = new Smarty;


		$smarty->assign('GENDER', $gender);

		$smarty->assign('FIRSTNAME', $firstname);


		$smarty->assign('LASTNAME', $lastname);

		$smarty->assign('EMAIL', $email_address);

		$smarty->assign('PASSWORT', $password);


		$smarty->caching = false;

		$txt_mail_customer = $smarty->fetch(DIR_FS_CATALOG.'kunden_import_mail.txt');

echo DIR_FS_CATALOG;

		$mail_subject = "Unser neuer Onlineshop";


/*

		echo "<pre>\n";

		echo $txt_mail_customer;

		echo "</pre>\n";

*/

		// mail versenden

		xtc_php_mail(STORE_OWNER_EMAIL_ADDRESS, STORE_OWNER, $email_address, $firstname.' '.$lastname, '', STORE_OWNER_EMAIL_ADDRESS, STORE_OWNER, '', '', $mail_subject, '', $txt_mail_customer);


	}

	else

	{

		if(!$do_not_report==true)

		{

			echo "<b color=\"red\">fehler beim anlegen von $firstname, $lastname, $company, $email_address</b><br>\n";

			echo "<b>------------------------------------------------------------------------------------------------------</b><br>\n";

		}

	}


	flush();


	// Zeile einlesen

	$zeile=fgets($fh);

	echo "<br>";

}

fclose($fh);


echo "$lines_ok von $lines Daten importiert!";


include ('includes/application_bottom.php');

?>
Und meine CSV dazu ist so aufgebaut:
01;20102;Mannvor;Mannnach;20000106;Firma;Irgendwostr. 45;Adresszusatz;666666;Stadtname;Deutschland;Tel;Fax;[email protected];passwort;

02;20101;Frauvor;Fraunach;20000106;Firma;Irgendwostr. 45;Adresszusatz;666666;Stadtname;Deutschland;Tel;Fax;[email protected];passwort;

Hatte ich eben vergessen, Sorry ;)

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.


×
  • Create New...