2016-08-04 5 views
0

Ich versuche, den Text (UTF-8 codiert) aus einer Excel-Datei, die 48 Zeilen in eine MySQL-Tabelle hat. Nur 38 der Zeilen werden eingefügt. Einige Zeilen haben Sonderzeichen wie "/", "?", ":", ",", ".", "()", "'", "", "!".PHPExcel Einfügen 38 von 48 Zeilen in MySQL aus Xlsx-Datei

foreach ($ret as $rec) { 
    if($count == 0) { 
     $count++; 
     continue; 
    } 

    $insert = "INSERT INTO chall (description, time, coin, mode, kids, teens, adults, theme_id, type_id) VALUES ('{$rec['A']}', '{$rec['B']}', '{$rec['C']}', '{$rec['D']}', '{$rec['E']}', '{$rec['F']}', '{$rec['G']}', '{$_REQUEST['theme_id']}', 1)"; 
    $ins_query = mysql_query($insert) or mysql_error(); 
    if(0) 
    { 
     die("Error! Can Not Upload Data..."); 
    } 
} 

nun unten ein Beispiel für Text, die succesfuly in die db eingefügt hat:. Pretend zu für E-Nachrichten Dies ist ein Beispiel fragen zwei Personen, die Ihnen eine schnelle Antwort auf diese Frage zu geben. „Welche diese sind nicht Farben -BLACK, braun, Gummi, blau, Jim, blau oder grün „

im Folgenden finden Sie ein Beispiel, das nicht in den db eingefügt bekommt:?! Zig-a-Zick-ah Get eine Gruppe von Knospen, um diesen Test und Rema nachzustellen ke ein Video von den Spice Girls in einer öffentlichen Umgebung. Holen Sie sich Fremde, um mitzumachen!

Ich habe so viel recherchiert wie ich konnte und habe keine Antworten gefunden. 10 der Zeilen werden nicht in die db-Tabelle eingefügt. Gibt es etwas, das ich vermisse? Vielen Dank für die Hilfe.

+0

PHPExcel wird die Daten in einer Zelle für Ihre Datenbankanweisung nicht automatisch entkommen lassen; Es gibt einen Ausgangspunkt –

Antwort

0

Dies ist falsch:

$ins_query= mysql_query($insert) or mysql_error(); 
            ^^^^^^^^^^^^^^ 

mysql_error() einen String zurückgibt. Das heißt, wenn mysql_query() fehlschlägt (und gibt einen booleschen false, die Fehlerzeichenfolge $ins_query zuweisen. Das bedeutet $ins_string jemals kein boolean falsch sein, das ist, was Sie sollten testen einen Fehler zu erkennen.

Und dann

if(0) 

wird immer falsch bewerten und führen nicht die die sowieso, also gibt es keine Möglichkeit für Sie zu erkennen, wenn ein Fehler auf. aufgetreten

Sie

haben sollte 10
$result = mysql_query(...); 
if($result === false) { 
    die(mysql_error()); 
} 

Und beachten Sie, dass Sie anfällig für sql injection attacks sind.

+0

Vielen Dank für die Hilfe. Anscheinend ist das Problem der Charakter. Ich denke, ich muss diesem Charakter entkommen, aber ich bin mir nicht sicher, wie ich diesen Fix implementieren soll. Kannst du mir dabei helfen? –

+0

lesen Sie die SQL-Injection-Link. –

0

Sie sollten Ihre mysql_error beheben, wie @Marc

empfohlen

Auch sollten Sie die fgetcsv Funktion benutzen, um Ihre Datei zu analysieren und überprüfen, ob Sie die richtige Anzahl von Feldern in jeder Zeile haben.

Aufgrund dieser

$ _REQUEST [ 'theme_id']

ein böswilliger Benutzer kann injizieren, was er in der Abfrage will (SQL-Injection).

Vertraue niemals dem, was der Benutzer sendet

+0

spielt keine Rolle, wenn die Daten nicht von "draußen" kommen. OP stopft direkt Text in eine Abfrage. Sie können sich selbst trivial injizieren. –

+0

'fgetcsv()' ist nur geeignet, wenn die Datei eine CSV-Datei ist, OP hat gesagt, es ist eine xlsx (OfficeOpenXML-Format) Excel-Datei, so dass fgetcsv() ist nicht viel zu verwenden –

+0

Die meisten Leute reden über xlsx, während es ist einfach CSV. – Sylwit

Verwandte Themen