Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 20. Juni 2018 11:28

Janl
Server-Pate
Ort: Freistadt, Österreich
Registriert: 13. Dezember 2010
Beiträge: 1.081
Webseite

Problem mit Mysql in Script zur Füllung CGCalender mit CSV

Hallo,

ich hab einige Scripts gebaut um Daten aus das Planungsprogram Booked
in CGCalendar zu holen.

Jetzt suche ich schon Tagen lang warum eine Zeile nicht funktioniert.

Ich lese ein vorher produzierte CSV und will die in der DB von CMSMS einlesen.

[== php ==]
$fileData = fopen("transferfile.csv", "r");
while($row=fgetcsv($fileData)){ 
$query = mysqli_query($conn, "
insert into cmspe_module_cgcalendar_events_to_categories
(category_id, event_id)
VALUES ('1', $newid);
");
$query = mysqli_query($conn, "
insert into cmspe_module_cgcalendar_events 
(event_id, event_title, event_summary, event_details, event_date_start, event_date_end, event_parent_id, event_recur_period, event_date_recur_end, event_created_by,
event_create_date, event_modified_date, event_recur_nevents, event_recur_interval, event_allows_overlap, event_all_day)
VALUES ('$newid', '$row[2]', '$row[3]', '$row[4]', '$row[0]', '$row[1]','-1', 'none', $nichts, '1', '$row[5]', '$row[5]', '-1', '1', '1', '0');
");
$newid = $newid + 1;
}

$newid = $newid - 1;
$query = mysqli_query($conn, "
UPDATE cmspe_module_cgcalendar_events_seq
SET id = '$newid';
");

fclose($fileData);

Die Schleife wird durchlaufen, denn events-to-categories wird gefüllt.
Auch events-seq wird geupdated.

Wenn ich nur mit "echo" daten abrufe wird alles schön gelistet.
Wenn ich alle Variabelen in PHP eine Wert gebe schreibt er die Daten (1 Zeile) braf in der Datenbank.
nur in der "while-Schleife" geht es nicht.

Ich muss da wohl etwas falsches machen in "insert into cmspe_module_cgcalendar_events . . . .".

MfG
Jan


Ubuntu 16.04 mit KDE - LAMP

Offline

#2 20. Juni 2018 16:28

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.155

Re: Problem mit Mysql in Script zur Füllung CGCalender mit CSV

Lass Dir doch einfach mal die SQL-Fehlermeldung bzw. den Query im Script ausgeben. Dann siehst Du das Problem. Da steht dann nämlich wortwörtlich sowas wie

... VALUES ('1', 'Array[2]', 'Array[3]', ' ...

Es wird versucht, die Variable "$row" auszugeben. Und die Ausgabe von "$row" ergibt in PHP nunmal "Array", weil "$row" ein Array ist, das man nicht einfach so ausgeben kann. D.h. die eckigen Klammern werden von PHP nicht als Teil der Variablen "$row" interpretiert. Übliches Problem, wenn man mit Variablen in Text arbeitet. Woher soll PHP wissen, was Variable und was Text ist?

Mit Syntaxhiglighter sieht man das recht deutlich:

... VALUES ('$newid', '$row[2]', '$row[3]', ' ...

Alles was hell rot ist, ist Text, der 1:1 an die DB übergeben wird.
Alles was blau ist, sind Variablen, die von PHP zur Laufzeit in Werte übersetzt werden.

Lösung:

Setz die Variablen mal in geschweifte Klammern:

... VALUES ('$newid', '{$row[2]}', ...

Sieht bei mir im Editor dann so aus:

... VALUES ('$newid', '{$row[2]}', '{$row[3]}', ' ...

Durch die geschweiften Klammen weiß PHP, was Variable ist, und was Text.


Oder setze den Query so zusammen:

... VALUES ('$newid', '" . $row[2] . "', ...

... VALUES ('$newid', ' " . $row[2] . " ', ...

Offline

#3 20. Juni 2018 17:14

Janl
Server-Pate
Ort: Freistadt, Österreich
Registriert: 13. Dezember 2010
Beiträge: 1.081
Webseite

Re: Problem mit Mysql in Script zur Füllung CGCalender mit CSV

Danke Nan,

versuche, ich versuche es etwas später.
Was ist das für Syntax-Highlighter?

MfG
Jan


Ubuntu 16.04 mit KDE - LAMP

Offline

#4 21. Juni 2018 08:09

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.155

Re: Problem mit Mysql in Script zur Füllung CGCalender mit CSV

Hab da nichts besonderes. Ich verwende jEdit. Aber im Prinzip ginge da bestimmt auch jeder andere Editor (Dreamweaver, Sublime, Eclipse, Notepad++ ...).

Offline

#5 21. Juni 2018 08:38

Janl
Server-Pate
Ort: Freistadt, Österreich
Registriert: 13. Dezember 2010
Beiträge: 1.081
Webseite

Re: Problem mit Mysql in Script zur Füllung CGCalender mit CSV

Ich habe alle Kombinationen versucht aber innerhalb der Schleife will nichts funktionieren.
So wie ich es sehe muss ich eine neue CSV produzieren und die ausserhalb mit load infile in mysql trichtern.

MfG
Jan


Ubuntu 16.04 mit KDE - LAMP

Offline

#6 21. Juni 2018 09:09

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.155

Re: Problem mit Mysql in Script zur Füllung CGCalender mit CSV

Wie sieht denn der Query am Ende aus, den Du an die Datenbank schicken willst?
Wie lautet denn die Fehlermeldung der Datenbank?

load infile ist zwar ganz nett, aber das funktioniert nicht bei jedem Provider.

Offline

#7 21. Juni 2018 15:20

Janl
Server-Pate
Ort: Freistadt, Österreich
Registriert: 13. Dezember 2010
Beiträge: 1.081
Webseite

Re: Problem mit Mysql in Script zur Füllung CGCalender mit CSV

Hallo NaN,

es gab zwar Fehler aber nichts das mich weiter bringt, nur das eine Datei sich nicht umbenennen lies wegen Berechtigungsfehler, das hat weiter kein Einfluss auf diesen Problem.

Ich werde erst mal ein ganz kleines Beispiel machen und sehen ob ich aus dem Array etwas in einer Tabelle kriege.

Mit echo kann ich jeden Wert auslesen, nur bei schreiben geht es schief, und nur bei dem Array.

MfG
Jan


Ubuntu 16.04 mit KDE - LAMP

Offline

#8 21. Juni 2018 16:14

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.155

Re: Problem mit Mysql in Script zur Füllung CGCalender mit CSV

es gab zwar Fehler aber nichts das mich weiter bringt, nur das eine Datei sich nicht umbenennen lies wegen Berechtigungsfehler, das hat weiter kein Einfluss auf diesen Problem.

Ich rede von MYSQL Fehlern.
Die musst Du Dir mit mysqli_error()   im PHP-Script selber ausgeben lassen.

Offline

#9 22. Juni 2018 20:30

Janl
Server-Pate
Ort: Freistadt, Österreich
Registriert: 13. Dezember 2010
Beiträge: 1.081
Webseite

Re: Problem mit Mysql in Script zur Füllung CGCalender mit CSV

Hallo NaN,

offensichtlich ist es nicht möglich innerhalb eine While-Schleife Mysql-inserts zu tun mit Arrays, das ist in Internet auf mehrere Stellen beschrieben, es wird ausdrücklich gewarnt für so eine Konstruktion.

Ich habe es anders gelöst.

[== PHP ==]
$string="";

$fileData = fopen("transferfile.csv", "r");

while($row=fgetcsv($fileData)){
$string = $string."('".$newid."','".$row[1]."','".$row[5]."'),";
$newid = $newid + 1;
}

$string = substr($string, 0, -1); //entfernen letzte Komma

$query = mysqli_query($conn, "INSERT INTO testen (id, text, textmehr)
VALUES $string");

Damit kann ist mein Problem gelöst.
Danke für Deine Hilfe, es hat mich auf die richtige Spur gelenkt.

MfG
Jan


Ubuntu 16.04 mit KDE - LAMP

Offline

#10 18. Juli 2018 22:07

Janl
Server-Pate
Ort: Freistadt, Österreich
Registriert: 13. Dezember 2010
Beiträge: 1.081
Webseite

Re: Problem mit Mysql in Script zur Füllung CGCalender mit CSV

Jetzt habe ich alle Fehler beseitigt . . . .  auf eine.

Aus Booked hole ich mit richtige Zeitzone, richtige Characterset und auf die richtige Mysql-art alle Daten die ich dann in eine CSV-Datei stecke die van Server1 nach Server2 kopiert wird.

Bei Einlesen funktioniert alles wenn ich bei mir auf localhost das Script starte da habe ich PHP 7.0 und Mysql 5.7. In der Life-situation habe ich PHP 5.6 und Mysql 5.6.

Ob es daran liegt bezweifele ich, vielleicht an Berechtigungen obwohl 2 von 3 Insert-Scripts funktionieren.

Es betrifft code:

[== PHP ==]
$stringev=$stringev."('".$newid."','".$row[2]."','".$row[3]."','".$row[4]."','".$row[0]."','".$row[1]."','-1','none',NULL,'1','".$row[5]."','".$row[5]."','-1','1','1','0'),";

insert into cmspe_module_cgcalendar_events 
(event_id, event_title, event_summary, event_details, event_date_start, event_date_end, event_parent_id, event_recur_period, event_date_recur_end, event_created_by,
event_create_date, event_modified_date, event_recur_nevents, event_recur_interval, event_allows_overlap, event_all_day)
VALUES ($string);

Weil es ein Webpack betrifft habe ich nur beschränkt Zugang zu Logfiles.

Hat jemandem ein Hint wo ich suchen soll?

MfG
Jan

Beitrag geändert von Janl (18. Juli 2018 22:09)


Ubuntu 16.04 mit KDE - LAMP

Offline