XTC 3.03

sam67

Aktives Mitglied
13. Juni 2007
15
0
Hallo allerseits

Ich habe vor kurzem WaWi installiert und den Connector in unseren Shop integriert (XTC 3.03).
Auslesen aus dem Shop hat auch einwandfrei geklappt. Auch wenn ich einen neuen Artikel anlege und übertrage = keine Probleme. Bei einem erneutem Abgleich bekomme ich aber immer eine Fehlermeldung bezügl. der Artikelbeschreibung.

Liegt das an 3.03 (ich habe gelesen das man 3.04 installiert haben muss/sollte) oder muss ich etwas anderes einstellen?

Muss allerdings sagen, das ich nicht soo fit in PHP usw. bin. Der Shop wurde mir vor 2 Jahren eingerichtet. Nun möchte ich mich aber selber daran versuchen. Updates auf 3.04 wollte ich erst einmal vermeiden, da der Shop etwas individuell eingerichtet ist und ich mir diese Änderungen nicht durch ein Update zerschießen möchte.

Wäre für einen Tip sehr dankbar.
 

Thomas Lisson

Administrator
Mitarbeiter
24. März 2006
15.574
299
Köln
Hi,

Poste bitte den genauen Wortlaut der Fehlermeldung.

Nachdem dieser Fehler auftritt, schau dann in die Datei C:\es. log rein - hier sollte der Fehler auch zu sehen sein.
 

sam67

Aktives Mitglied
13. Juni 2007
15
0
Sieht so aus:

<font color="#000000">1054 - Unknown column 'products_keywords' in 'field list'

update products_description set products_name="Test", products_description="\r\n

Dies ist ein Testartikel</P>", products_short_description="\r\n<P align=center>Testbeschreibung</P>", products_keywords="", products_meta_title="", products_meta_description="", products_meta_keywords="", products_url="" where products_id=394 and language_id=2

<font color="#ff0000">[XT SQL Error]</font>

</font>


Hoffe das reicht :)
 

Thomas Lisson

Administrator
Mitarbeiter
24. März 2006
15.574
299
Köln
Hallo sam67,

ja, das reicht.

Es liegt an der XTC Version. Die kennt nämlich die Tabellenspalte products_keywords nicht.

Abhilfe:
Datei dbeS/Artikel.php Zeile 86:
Code:
eS_execute_query("update products_description set products_name=\"$artikel->cName\", products_description=\"$artikel->cBeschreibung\", products_short_description=\"$artikel->cKurzBeschreibung\", products_meta_title=\"\", products_meta_description=\"\", products_meta_keywords=\"\", products_url=\"\" where products_id=".$products_id." and language_id=".$einstellungen->languages_id);
ändern in
Code:
eS_execute_query("update products_description set products_name=\"$artikel->cName\", products_description=\"$artikel->cBeschreibung\", products_short_description=\"$artikel->cKurzBeschreibung\", products_keywords=\"\", products_meta_title=\"\", products_meta_description=\"\", products_meta_keywords=\"\", products_url=\"\" where products_id=".$products_id." and language_id=".$einstellungen->languages_id);
 

sam67

Aktives Mitglied
13. Juni 2007
15
0
Danke für die prompte Rückmeldung.

Hmm, genauso steht es in der Artikel.php.

Habe auch die letzte Version vom Connector aufgespielt.

Beim ersten upload eines neu angelegten Artikeln in der WaWi sind die Daten ja auch korrekt zugeordnet. Wenn ich diesen Artikel aber verändere (in der WaWi) und ihn erneut abgleiche, kommt diese Fehlermeldung und der Artikel bleibt unverändert im Shop.

Gibt es noch eine Möglichkeit?
 

sam67

Aktives Mitglied
13. Juni 2007
15
0
Ja, leider. Ich füge mal den Inhalt der Artikel.php ein:

<?php
/**
* jtlwawi_connector/dbeS/Artikel.php
* Synchronisationsscript
*
* Es gelten die Nutzungs- und Lizenzhinweise unter http://www.jtl-software.de/jtlwawi.php
*
* @author JTL-Software <thomas@jtl-software.de>
* @copyright 2006, JTL-Software
* @link http://jtl-software.de/jtlwawi.php
* @version v1.12 / 13.03.07
*/

require_once("syncinclude.php");

$return=3;
if (auth())
{
if (intval($_POST["action"]) == 1 && intval($_POST['KeyArtikel']))
{
$return = 0;
//hole einstellungen
$cur_query = eS_execute_query("select * from eazysales_einstellungen");
$einstellungen = mysql_fetch_object($cur_query);

$artikel->kArtikel = realEscape($_POST["KeyArtikel"]);
$artikel->cArtNr = realEscape($_POST["ArtikelNo"]);
$artikel->cName = realEscape($_POST["ArtikelName"]);
$artikel->cBeschreibung = realEscape($_POST["ArtikelBeschreibung"]);
$artikel->fVKBrutto = realEscape($_POST["ArtikelVKBrutto"]);
$artikel->fVKNetto = realEscape($_POST["ArtikelVKNetto"]);
$artikel->fMwSt = realEscape($_POST["ArtikelMwSt"]);
$artikel->cAnmerkung = realEscape($_POST["ArtikelAnmerkung"]);
$artikel->nLagerbestand = max(realEscape($_POST["ArtikelLagerbestand"]),0);
$artikel->cEinheit = realEscape($_POST["ArtikelEinheit"]);
$artikel->nMindestbestellmaenge = realEscape($_POST["ArtikelMindBestell"]);
$artikel->cBarcode = realEscape($_POST["ArtikelBarcode"]);
$artikel->fVKHaendlerBrutto = realEscape($_POST["ArtikelVKHaendlerBrutto"]);
$artikel->fVKHaendlerNetto = realEscape($_POST["ArtikelVKHaendlerNetto"]);
$artikel->cTopArtikel = realEscape($_POST["TopAngebot"]);
$artikel->fGewicht = realEscape($_POST["Gewicht"]);
$artikel->cNeu = realEscape($_POST["Neu"]);
$artikel->cKurzBeschreibung = realEscape($_POST["ArtikelKurzBeschreibung"]);
$artikel->fUVP = realEscape($_POST["ArtikelUVP"]);
$artikel->cHersteller = realEscape($_POST["Hersteller"]);

$startseite=0;
if ($artikel->cTopArtikel=="Y")
$startseite=1;
$shipping_status=0;
if ($GLOBALS['einstellungen']->shipping_status_id>0)
$shipping_status=$GLOBALS['einstellungen']->shipping_status_id;

//existiert products_startpage in products?
$products_startpage_exists = false;
$result = mysql_query("SHOW COLUMNS FROM products");
if (mysql_num_rows($result) > 0) {
while ($row = mysql_fetch_object($result))
{
if ($row->Field == 'products_startpage')
$products_startpage_exists = true;
}
}

//update oder insert?
$products_id = getFremdArtikel($artikel->kArtikel);
if ($products_id>0)
{
//update

//attribute löschen
eS_execute_query("delete from products_attributes where products_id=".$products_id);
//KategorieArtikel löschen
eS_execute_query("delete from products_to_categories where products_id=".$products_id);

//evtl. andere MwSt?
$products_tax_class_id = holeSteuerId($artikel->fMwSt);
//evtl. neuer Hersteller?
$manufacturers_id = holeHerstellerId($artikel->cHersteller);
//update products
$products_statpage_piece="";
if ($products_startpage_exists)
$products_statpage_piece ="products_startpage=$startseite,";
eS_execute_query("update products set products_fsk18=0, products_shippingtime=$shipping_status, ".$products_statpage_piece." products_model=\"$artikel->cArtNr\", products_price=\"".$artikel->fVKNetto."\", products_tax_class_id=\"$products_tax_class_id\", products_quantity=\"$artikel->nLagerbestand\", products_ean=\"$artikel->cBarcode\", products_weight=\"$artikel->fGewicht\", manufacturers_id=\"$manufacturers_id\", products_status=1, products_last_modified=now(), product_template=\"".$einstellungen->prod_product_template."\", options_template=\"".$einstellungen->prod_options_template."\" where products_id=".$products_id);
//update products_description
eS_execute_query("update products_description set products_name=\"$artikel->cName\", products_description=\"$artikel->cBeschreibung\", products_short_description=\"$artikel->cKurzBeschreibung\", products_keywords=\"\", products_meta_title=\"\", products_meta_description=\"\", products_meta_keywords=\"\", products_url=\"\" where products_id=".$products_id." and language_id=".$einstellungen->languages_id);
//kundengrp preise
insertPreise($products_id);
}
else
{
//insert
//hole Mwst classId
$products_tax_class_id = holeSteuerId($artikel->fMwSt);
//setze Hersteller, falls es ihn noch nicht gibt
$manufacturers_id = holeHerstellerId($artikel->cHersteller);

$products_statpage_piece="";
$products_statpage_piece_value="";
if ($products_startpage_exists)
{
$products_statpage_piece ="products_startpage,";
$products_statpage_piece_value=$startseite.",";
}

eS_execute_query("insert into products (products_shippingtime, $products_statpage_piece products_model, products_price, products_tax_class_id, products_quantity, products_ean, products_weight, manufacturers_id, product_template, options_template, products_status, products_date_added) values ($shipping_status,".$products_statpage_piece_value."\"".$artikel->cArtNr."\",".$artikel->fVKNetto.",$products_tax_class_id,$artikel->nLagerbestand,\"".$artikel->cBarcode."\",$artikel->fGewicht,$manufacturers_id,\"".$einstellungen->prod_product_template."\",\"".$einstellungen->prod_options_template."\",1,now())");
//hole id
$query = eS_execute_query("select LAST_INSERT_ID()");
$products_id_arr = mysql_fetch_row($query);
if ($products_id_arr[0]>0)
{
//müssen Preise in spezielle tabellen?
$products_id=$products_id_arr[0];
insertPreise($products_id_arr[0]);
eS_execute_query("insert into products_description (products_id, products_name, products_description, products_short_description, language_id) values (".$products_id_arr[0].",\"".$artikel->cName."\", \"".$artikel->cBeschreibung."\", \"".$artikel->cKurzBeschreibung."\", $einstellungen->languages_id)");
setMappingArtikel($artikel->kArtikel,$products_id_arr[0]);

//erstelle leere description für alle anderen Sprachen
$sonstigeSprachen = getSonstigeSprachen($einstellungen->languages_id);
if (is_array($sonstigeSprachen))
{
foreach ($sonstigeSprachen as $sonstigeSprache)
{
//eS_execute_query("insert into products_description (products_id, products_name, language_id) values (".$products_id_arr[0].",\"".$artikel->cName."\", $sonstigeSprache)");
eS_execute_query("insert into products_description (products_id, products_name, products_description, products_short_description, language_id) values (".$products_id_arr[0].",\"".$artikel->cName."\", \"".$artikel->cBeschreibung."\", \"".$artikel->cKurzBeschreibung."\", $sonstigeSprache)");
}
}
}
else
{
//Fehler aufgetreten
$return=1;
}
}

if ($products_id>0)
{
//setze Kundengruppenerlaubnis für alle gruppen
//Attribute.php bearbeitet Ausnahmen der Kundengruppenerlaubnis
setzeKundengruppenerlaubnis("", $products_id);

//VPE
$products_vpe_id=0;
//gibt es schon so einen products_vpe?
$cur_query = eS_execute_query("select products_vpe_id from products_vpe where language_id=".$einstellungen->languages_id." and products_vpe_name=\"".$artikel->cEinheit."\"");
$products_vpe_id_arr = mysql_fetch_row($cur_query);
if ($products_vpe_id_arr[0]>0)
{
$products_vpe_id=$products_vpe_id_arr[0];
}
else
{
//füge neuen Shippingstatus ein
$cur_query = eS_execute_query("select max(products_vpe_id) from products_vpe");
$max_shipping_products_vpe_arr = mysql_fetch_row($cur_query);
$products_vpe_id = $max_shipping_products_vpe_arr[0]+1;
eS_execute_query("insert into products_vpe (products_vpe_id, language_id, products_vpe_name) values ($products_vpe_id, $einstellungen->languages_id, \"$artikel->cEinheit\")");
}
eS_execute_query("update products set products_vpe=".$products_vpe_id." where products_id=".$products_id);

//erstelle Dummy für Sonderpreise, falls es keinen Sonderpreis für diesen Artikel gibt
$spe_query = eS_execute_query("select specials_id from specials where products_id=".$products_id);
$special_obj = mysql_fetch_object($spe_query);
if (!$special_obj->specials_id)
{
eS_execute_query("insert into specials (products_id, status) values ($products_id,0)");
}
}
}
else
$return=5;

if (intval($_POST["action"]) == 3 && intval($_POST['KeyArtikel']))
{
$products_id = getFremdArtikel(intval($_POST['KeyArtikel']));
if ($products_id>0)
eS_execute_query("update products set products_status=0 where products_id=".$products_id);
$return = 0;
}
}

mysql_close();
echo($return);
logge($return);

function insertPreise($products_id)
{
$personalOfferTable = "personal_offers_by_customers_status_";
$endKunden_arr = explode(";",$GLOBALS['einstellungen']->mappingEndkunde);
foreach ($endKunden_arr as $customers_status_id)
{
if ($customers_status_id>=0 && strlen($customers_status_id)>0)
{
$table = $personalOfferTable.$customers_status_id;
eS_execute_query("delete from $table where products_id=".$products_id);
eS_execute_query("insert into $table (products_id, quantity, personal_offer) values ($products_id,1,".floatval($_POST["ArtikelVKNetto"]).")");
if (intval($_POST["PAnz1"])>0)
eS_execute_query("insert into $table (products_id, quantity, personal_offer) values ($products_id,".intval($_POST["PAnz1"]).",".floatval($_POST["PPreis1"]).")");
if (intval($_POST["PAnz2"])>0)
eS_execute_query("insert into $table (products_id, quantity, personal_offer) values ($products_id,".intval($_POST["PAnz2"]).",".floatval($_POST["PPreis2"]).")");
if (intval($_POST["PAnz3"])>0)
eS_execute_query("insert into $table (products_id, quantity, personal_offer) values ($products_id,".intval($_POST["PAnz3"]).",".floatval($_POST["PPreis3"]).")");
if (intval($_POST["PAnz4"])>0)
eS_execute_query("insert into $table (products_id, quantity, personal_offer) values ($products_id,".intval($_POST["PAnz4"]).",".floatval($_POST["PPreis4"]).")");
if (intval($_POST["PAnz5"])>0)
eS_execute_query("insert into $table (products_id, quantity, personal_offer) values ($products_id,".intval($_POST["PAnz5"]).",".floatval($_POST["PPreis5"]).")");
}
}
$haendlerKunden_arr = explode(";",$GLOBALS['einstellungen']->mappingHaendlerkunde);
foreach ($haendlerKunden_arr as $customers_status_id)
{
if ($customers_status_id>=0 && strlen($customers_status_id)>0)
{
$table = $personalOfferTable.$customers_status_id;
eS_execute_query("delete from $table where products_id=".$products_id);
eS_execute_query("insert into $table (products_id, quantity, personal_offer) values ($products_id,1,".floatval($_POST["ArtikelVKHaendlerNetto"]).")");
if (intval($_POST["HAnz1"])>0)
eS_execute_query("insert into $table (products_id, quantity, personal_offer) values ($products_id,".intval($_POST["HAnz1"]).",".floatval($_POST["HPreis1"]).")");
if (intval($_POST["HAnz2"])>0)
eS_execute_query("insert into $table (products_id, quantity, personal_offer) values ($products_id,".intval($_POST["HAnz2"]).",".floatval($_POST["HPreis2"]).")");
if (intval($_POST["HAnz3"])>0)
eS_execute_query("insert into $table (products_id, quantity, personal_offer) values ($products_id,".intval($_POST["HAnz3"]).",".floatval($_POST["HPreis3"]).")");
if (intval($_POST["HAnz4"])>0)
eS_execute_query("insert into $table (products_id, quantity, personal_offer) values ($products_id,".intval($_POST["HAnz4"]).",".floatval($_POST["HPreis4"]).")");
if (intval($_POST["HAnz5"])>0)
eS_execute_query("insert into $table (products_id, quantity, personal_offer) values ($products_id,".intval($_POST["HAnz5"]).",".floatval($_POST["HPreis5"]).")");
}
}
}

function holeHerstellerId($cHersteller)
{
if (strlen($cHersteller)>0)
{
//ex. dieser Hersteller?
$cur_query = eS_execute_query("select manufacturers_id from manufacturers where manufacturers_name=\"".$cHersteller."\"");
$manu = mysql_fetch_object($cur_query);
if ($manu->manufacturers_id>0)
return $manu->manufacturers_id;
else
{
//erstelle diesen Hersteller
eS_execute_query("insert into manufacturers (manufacturers_name, date_added) values (\"".$cHersteller."\", now())");
$query = eS_execute_query("select LAST_INSERT_ID()");
$manu_id_arr = mysql_fetch_row($query);
eS_execute_query("insert into manufacturers_info (manufacturers_id, languages_id) values (".$manu_id_arr[0].", ".$GLOBALS['einstellungen']->languages_id.")");
return $manu_id_arr[0];
}
}
return 0;
}

function holeSteuerId($MwSt)
{
//existiert so ein Steuersatz ?
$cur_query = eS_execute_query("select tax_class_id from tax_rates where tax_zone_id=".$GLOBALS['einstellungen']->tax_zone_id." and tax_rate=".$MwSt);
$tax = mysql_fetch_object($cur_query);
if ($tax->tax_class_id>0)
return $tax->tax_class_id;
else
{
//erstelle klasse
eS_execute_query("insert into tax_class (tax_class_title, date_added) values (\" JTL-Wawi Steuerklasse ".$MwSt."%\", now())");
$query = eS_execute_query("select LAST_INSERT_ID()");
$tax_class_id_arr = mysql_fetch_row($query);
//füge diesen Steuersatz ein
eS_execute_query("insert into tax_rates (tax_zone_id, tax_class_id, tax_priority, tax_rate, date_added) values (".$GLOBALS['einstellungen']->tax_zone_id.",".$tax_class_id_arr[0].", ".$GLOBALS['einstellungen']->tax_priority.", ".$MwSt.", now())");
return $tax_class_id_arr[0];
}
}


?>



Weiterhin die letzte Fehlermeldung:

<font color="#000000">1054 - Unknown column 'products_keywords' in 'field list'

update products_description set products_name="Test", products_description="\r\n

Dies ist ein Testartikel - NEU - </P>", products_short_description="\r\n<P align=center>Testbeschreibung</P>", products_keywords="", products_meta_title="", products_meta_description="", products_meta_keywords="", products_url="" where products_id=394 and language_id=2

<font color="#ff0000">[XT SQL Error]</font>

</font>

Ist immer noch die gleiche wie vorher. ?????????
 

sam67

Aktives Mitglied
13. Juni 2007
15
0
Moment mal. Muss mal eben überprüfen ob ich hier auch im richtigen Verzeichnis korrigiert habe. .....

Nee, war schon im richtigen.

Also immer noch das große Fragezeichen
 

Thomas Lisson

Administrator
Mitarbeiter
24. März 2006
15.574
299
Köln
Hi,

jo, die Datei, die Du hier gepostet hast, ist nicht bearbeitet worden.

Folgende Stelle:
Code:
 //update products_description
eS_execute_query("update products_description set products_name=\"$artikel->cName\", products_description=\"$artikel->cBeschreibung\", products_short_description=\"$artikel->cKurzBeschreibung\", products_keywords=\"\", products_meta_title=\"\", products_meta_description=\"\", products_meta_keywords=\"\", products_url=\"\" where products_id=".$products_id." and language_id=".$einstellungen->languages_id);

genau
Code:
products_meta_keywords=\"\",
muss dort entfernt werden, dh, so muss es ausschauen:
Code:
 //update products_description
eS_execute_query("update products_description set products_name=\"$artikel->cName\", products_description=\"$artikel->cBeschreibung\", products_short_description=\"$artikel->cKurzBeschreibung\", products_meta_title=\"\", products_meta_description=\"\", products_meta_keywords=\"\", products_url=\"\" where products_id=".$products_id." and language_id=".$einstellungen->languages_id);
 

sam67

Aktives Mitglied
13. Juni 2007
15
0
products_meta_keywords=\"\",

soll entfernt werden??

Ist doch in dem geänderten Code noch vorhanden??
 

sam67

Aktives Mitglied
13. Juni 2007
15
0
Alles klar.

Sorry, die Änderung habe ich unwissender Weise nicht richtig abgespeichert.

Jetzt geht´s. Besten Dank

Aber!!! Es funktioniert nur mit neu angelegten Artikeln. Diese kann ich verändern und Übertragung funzt.

Bei den alten, aus dem Shop ausgelesenen Artikeln, kommt weiterhin bei Veränderungen diese Fehlermeldung:

<font color="#000000">1054 - Unknown column 'products_keywords' in 'field list'

update products_description set products_keywords="" where language_id=2 and products_id=321

<font color="#ff0000">[XT SQL Error]</font>

</font>

Kommt das, weil diese mit der alten Artikel.php ausgelesen sind? Sorry, aber bin wie o.a. Newbi
 

sam67

Aktives Mitglied
13. Juni 2007
15
0
Stillstand, komme nicht weiter

Kann ich durch Neuanlage des Mandanten den Shop noch einmal komplett auslesen?
 

sam67

Aktives Mitglied
13. Juni 2007
15
0
Tja, wie bereits beschrieben kann ich die alten ausgelesenen Artikel (welche mit ihren Datensätzen in der WaWi korrekt zugeordnet sind) nicht geändert übertragen (siehe letzte Fehlermeldung)
Lege ich einen Artikel neu an, kann ich ihn verändern und ohne Fehlermeldung einwandfrei im Shop aktualisieren.
Da ich natürlich ungern alle 300 alten Artikel neu anlegen möchte, suche ich ja den jetzt noch vorhandenen Fehler.
Ich habe jetzt ja die geänderte Artikel.php eingepflegt (deshalb klappt es jetzt ja auch mit den neuen Artikeln). Warum die Fehlermeldung immer noch products_keywords enthält ist mir natürlich auch ein Rätsel wenn Du sagst das diese nur in der Artikel.php vorkommt.
Deswegen war ja mein Verdacht, das nach der Integration des Connectors und dem ersten auslesen der Shopartikel (war ja mit der alten Artikel.php) irgendetwas sich in die Artikel gesetzt hat, was wieder eine Zuordnung mit products_keywords verlangt.
Anders kann ich mir einfach nicht erklären, warum neu geht, alte aber nicht übertragen werden.

Ich möchte nur den Umstand der DB Neuanlage vermeiden, Updates für XTC wenn möglich nach hinten schieben (muss erst klären ob dies meine individuelle Konfiguration verändert) aber trotzdem kurzfristig den Shop über die WaWi laufen lassen. Bin gerade dabei mich neu zu organisieren und möchte mir ein Komplettsystem aus XTC-WaWi- eazyAuction zusammenstellen. Aufbauend natürlich auf den vorhandenen Datenbestand des Shops.

Was man möchte ist leider nie ohne Hindernisse gleich umsetzbar :lol:

Ach ja, ich habe XTC 3.03
 

Thomas Lisson

Administrator
Mitarbeiter
24. März 2006
15.574
299
Köln
Hi,

Lege ich einen Artikel neu an, kann ich ihn verändern und ohne Fehlermeldung einwandfrei im Shop aktualisieren.
Da ich natürlich ungern alle 300 alten Artikel neu anlegen möchte, suche ich ja den jetzt noch vorhandenen Fehler.
Auch neue, über Wawi angelegte, Artikel wirst Du nicht aktualisieren können ohne Fehlermeldung.

Anders kann ich mir einfach nicht erklären, warum neu geht, alte aber nicht übertragen werden.
hier sind verschiedene Codeabschnitte verantwortlich.

Ich möchte nur den Umstand der DB Neuanlage vermeiden, Updates für XTC wenn möglich nach hinten schieben
Darin sehe ich auch keine Notwendigkeit. Die Daten in der Wawi DB sind 100% OK, was Probleme bereitet, ist die Aktualisierung der Beschreibung der Artikel per Connector.

Ich vermute sehr stark, dass die Datei dbeS/Artikel.php des Connectors auf dem Server nicht korrekt geändert oder gespeichert wurde. Schick sie mir per email oder alternativ kannst Du mir die FTP - Zugangsdaten zushcicken, dann schaue ich es mir an.