[gelöst]PDOException und ich weiß nicht warum!!!
am 27.02.2012 - 16:00 Uhr in
Hallo zusammen,
aus verschiedenen Gründen muß ich ein eigenes Modul für den CSV-Import machen. Eine Variante konnte ich schon
gut lösen aber bei der zweiten Art bekomme ich folgendes angezeigt:
PDOException: in tpimport_form_submit() (Zeile 267 von C:\xampplite\htdocs\drupal7\sites\all\modules\csvimport\csvimport.module)
Die Fehlermeldung alleine ist ja doof deswegen bischl Code dazu:
function tpimport_my_form() {
return drupal_get_form('tpimport_form');
}
function tpimport_form() {
$form = array();
$form['#attributes']['enctype'] = "multipart/form-data";
$form['browser'] = array(
'#type' => 'fieldset',
'#title' => t('Browser Upload'),
'#collapsible' => TRUE,
'#description' => t("Upload a TP file."),
);
$file_size = t('Maximum file size: !size MB.', array('!size' => file_upload_max_size()));
$form['browser']['file_upload'] = array(
'#type' => 'file',
'#title' => t('CSV File'),
'#size' => 40,
'#description' => t('Select the CSV file to be imported. ') . $file_size,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
// set the form encoding type
return $form;
}
function tpimport_form_validate($form, &$form_state) {
// attempt to save the uploaded file
$validators = array('file_validate_extensions' => array());
$file = file_save_upload('file_upload', $validators);
// check file uploaded OK
if (!$file) {
form_set_error('file_upload', t('A file must be uploaded or selected from FTP updates.'));
}
else {
// set files to form_state, to process when form is submitted
$form_state['values']['file_upload'] = $file;
}
}
function datumberechnen($dat)
{
if (strlen($dat)== 8){
$tag = substr($dat,0,2);
$monat = substr($dat,2,2);
$jahr = substr($dat,4,4);
$datu = $tag .".".$monat.".".$jahr;
$kawo = date("W", mktime(0,0,0,$monat,$tag,$jahr));
Return array($datu,$kawo);
}
elseif (strlen($dat)== 7) {
$tag = substr($dat,0,1);
$monat = substr($dat,1,2);
$jahr = substr($dat,3,4);
$datu = $tag .".".$monat.".".$jahr;
$kawo = date("W", mktime(0,0,0,$monat,$tag,$jahr));
Return array($datu,$kawo);
}
}
function tpimport_form_submit($form, &$form_state) {
$line_max = variable_get('user_import_line_max', 5000);
ini_set('auto_detect_line_endings', true);
$filepath = $form_state['values']['file_upload']->uri;
$handle = @fopen($filepath, "r");
// start count of imports for this upload
$send_counter = 0;
while ($row = fgetcsv($handle, 5000, ';')) {
// $row is an array of elements in each row
// e.g. if the first column is the email address of the user, try something like
$vks_ = explode(".",$row[0]);
$vks = $vks_[0];
$vim_ = explode(".",$row[1]);
$vim = $vim_[0];
$ma = $row[2];
$dat = explode(".",$row[3]);
$datu = datumberechnen($dat[0]);
$datum = $datu[0];
$kawo = $datu[1];
$au = $row[4];
$kdnr_ = explode(".",$row[5]);
$kdnr = $kdnr_[0];
$kdname = $row[6];
$art = $row[7];
$bez1 = $row[8];
$bez2 = $row[9];
$mc1 = $row[10];
$pos = $row[11];
$h = $row[12];
$f = $row[13];
$vk = $row[14];
$ek = $row[15];
$stichwort = $row[16];
$menge_ = explode(".",$row[17]);
$menge = $menge_[0];
$spanne = $row[18];
$query = db_insert('tagesprotokolle')
->fields(array(
'vks' => $vks,
'vim' => $vim,
'ma' => $ma,
'dat' => $datum,
'au' => $au,
'kdnr' => $kdnr,
'kdname' => $kdname,
'artikel' => $art,
'bez1' => $bez1,
'bez2' => $bez2,
'mc1' => $mc1,
'pos' => $pos,
'h' => $h,
'f' => $f,
'vk' => $vk,
'ek' => $ek,
'stichwort' => $stichwort,
'menge' => $menge,
'spanne' => $spanne,
'kw' => $kawo,
))
->execute();
}
}Bitte nicht auslachen..ist eben noch bischen experimentell. Weiß aber nicht wo ich den Fehler habe.
Ati
- Anmelden oder Registrieren um Kommentare zu schreiben

nabend ati was genau passiert
am 27.02.2012 - 20:43 Uhr
nabend ati
was genau passiert in Zeile 267
(welcher code wird azsgeführt? das ist nicht ersichtlich
in deinem beitrag)
und wie sieht die komplette fehlermeldung aus?
#
gruss
stef
Im Zitat steht die komplette
am 27.02.2012 - 20:58 Uhr
Im Zitat steht die komplette Fehlermeldung!!!!
In Zeile 267 ist der execute-Befehl.
Ati
Mir ist gerade nochwas
am 28.02.2012 - 08:41 Uhr
Mir ist gerade nochwas aufgefallen....die Datei die ich zum testen importieren will hat 1032 Zeilen...nach der Fehlermeldung sind aber
146 Zeilen importiert worden!!!
Da hilft nur, den Code ein
am 28.02.2012 - 10:14 Uhr
Da hilft nur, den Code ein bißchen umbauen, damit Du Prints der Eingabezeile und der geparsten Struktur in eine Logdatei schreiben kannst. Dann siehst Du, wie weit Du gekommen bist und die Zeile, die den Fehler verursacht. Irgendetwas scheint in der Datenstruktur daneben zu gehen.
Beste Grüße
Werner
Hi wla, diesen Ansatz
am 28.02.2012 - 10:37 Uhr
Hi wla,
diesen Ansatz verfolge ich gerade auch. Die Tabelle hat jedes Feld als varchar deklariert (bzw. gerade alles als text-Feld eingestellt).
Dadurch das ja 146 Datensätze importiert wurden konnte ich ja die erste Zeile die Probleme macht lokalisieren...verstehe aber nicht
warum sich die Funktion daran verschluckt. Ich habe dann mal den db_insert bereicht in einen try-catch-Block gepackt...es werden von
1032 Zeilen 954 eingelesen. An diesem Punkt bin ich jetzt....und steh wie ein Ochs vorm Berg.
Ich glaub ich hab´s...es sind
am 28.02.2012 - 11:02 Uhr
Ich glaub ich hab´s...es sind immer Datensätze die im Kundennamen öäü´s enthalten. Wie kann ich das schnell und unkompliziert lösen??
Du mußt die CSV-Datei ins
am 28.02.2012 - 11:34 Uhr
Du mußt die CSV-Datei ins UTF-8 Format mit Unix-Zeilenenden (LF) konvertieren. Die Datenbank kommt mit UTF-8 problemlos klar. Dann sind die Probleme mit allen akzentuierten Zeichen gelöst. Auf dem Mac benutze ich Coda für diese Konvertierung, unter Windows gibt es Notepad++.
Beste Grüße
Werner
Ich habe ne gute und
am 28.02.2012 - 11:56 Uhr
Ich habe ne gute und neschlechte Nachricht...nach dem bearbeiten mit Notepad++ ging es....die schlechte Nachricht ist das diese Vorgehensweise nicht praktikabel ist. Diese Datei wird NAcht automatiscvh vom Warenwirtschaftssystem erzeugt und soll ganz einfach morgens so importiert werden. Wahrscheinlich muss ich den Kundenname vor dem Import auf Umlaute untersuchenund diese dann ersetzen...könnte zumindest ein Ansatz sein.
Ati
Das Einlesen scheint ja noch
am 28.02.2012 - 12:03 Uhr
Das Einlesen scheint ja noch zu gehen.
Da sollte Dir utf8_en/decode helfen (siehe hier), bei jedem String, der Umlautverdächtig ist.
Danke leda....jetzt
am 28.02.2012 - 12:49 Uhr
Danke leda....jetzt funktioniert es richtig!!!
Ati