[PHP/MySQL] Verboden tekens?

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • NaliXL
  • Registratie: Maart 2002
  • Laatst online: 03-07 19:20
Goedendag,

Zit hier met een scriptje wat een CSV-bestand (comma separated value - tekstbestandje wat tabel bevat. Kolommen gescheiden door puntkomma) kan importeren in een database-tabel. Werkte tot nu toe goed, tot ik een CSV-bestand probeerde te importeren met o.a. de volgende velden probeerde te importeren :
code:
1
2
1;Bergkotte Trading B.V.;Bergkotte;;;;;;jaapjp@hetnet.nl;;
1;Beheermaatschappij Oomen B.V.;Philippe Möller;;;;;;jaapjp@hetnet.nl

De eerste van de twee word nog geïmporteerd, de tweede niet. Naar mijn idee filtert mijn code alle speciale characters uit de strings. Voor zover ik weet zijn dat voor PHP alleen de enkele en dubbele quote, en voor MySQL komen daar ook nog de backslahs, procent en underscore bij. Hier is overigens mijn code (fragment) :
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// Load the CSV file in an array
$CDFArray = file($UploadedFile);

// Haal illegale characters weg
$CDFArray = str_replace("'" , "\'"  , $CDFArray);
$CDFArray = str_replace("\"", "\\\"", $CDFArray);
$CDFArray = str_replace("\\", "\\\\", $CDFArray);
$CDFArray = str_replace("%" , "\\%" , $CDFArray);
$CDFArray = str_replace("ö" , "o"   , $CDFArray);
$CDFArray = str_replace("Ö" , "O"   , $CDFArray);

// Explode every element of CDFarray by ; and make it equal that
for ($A = 0;$A < count($CDFArray);$A++){
    $Temp001 = explode(";", $CDFArray[$A]);
    $CDFArray2[$A] = $Temp001;
}

// Make empty string
$TableCreateString = "";
// Create the beginning of our query sentence
@mysql_query("DROP TABLE $TabelTitle");
// Extend our query sencene with every detected field in the CSV file.
// The first line of the CSV should contain the names of the fields.
for ($A = 0;$A < count($CDFArray2[0]);$A++){
    $TableCreateString .= (", ". $CDFArray2[0][$A]. " blob");
}

// Create the full query with the string created above
$Query = ("CREATE TABLE auto_$TabelTitle (ID int NOT NULL auto_increment PRIMARY KEY". $TableCreateString. ")");
// printf("Query was : $Query <BR>\n");

// Carry out the query
mysql_query($Query);

// Insert all values from the CSV in the created table
for ($A = 1;$A < count($CDFArray2);$A++){
    $InsertValues = ("NULL, '". $CDFArray2[$A][0]. "'");
    for ($B = 1;$B < count($CDFArray2[$A]);$B++){
        $InsertValues .= (", '". $CDFArray2[$A][$B]. "'");
    }
    $Query = ("INSERT INTO auto_$TabelTitle VALUES($InsertValues)");
    // printf($Query. "<BR>\n");
    mysql_query($Query);
}

Kan iemand mij vertellen of ik nog een uitzonderingssitutatie vergeten ben? Of zie ik hier gewoon wat over het hoofd?

Genoeg is meer dan veel, en tart den overvloed


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

echo alle insert query eens? Komen ze wel allemaal door?

gebruik mysql_escape_string voor het escapen ipv alle str_replace. Dit kan helaas niet op een array gebeuren dus moet je voor elke regel van CSV doen. bv in de eerste forloop voor de explode ...

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 03-07 11:38

Janoz

Moderator Devschuur®

!litemod

Heb je trouwens door wat je allemaal aan het vervangen bent? Eerst maak je van ' een \', maar vervolgens vervang je \ door \\\. Daarna vervang je \\ nog door \\\\ waardoor ' uiteindelijk \\\\\' wordt. Sowieso vind ik de vervanging \ naar \\\ erg raar..

Doe gewoon wat hierboven staat en alles komt waarschijnlijk wel goed.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017

RSD

en iets van html_special_chars dan???

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Op woensdag 29 mei 2002 13:06 schreef RSD het volgende:
en iets van html_special_chars dan???
Het is geen HTML....

HTML heeft er helemaal nix mee te maken....

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • tomato
  • Registratie: November 1999
  • Niet online
Janoz: Heb je trouwens door wat je allemaal aan het vervangen bent? Eerst maak je van ' een \', maar vervolgens vervang je \ door \\\. Daarna vervang je \\ nog door \\\\ waardoor ' uiteindelijk \\\\\' wordt. Sowieso vind ik de vervanging \ naar \\\ erg raar..
Lees jij nog eens heel snel door hoe PHP omgaat met doublequotish string processing >:) ;)

Acties:
  • 0 Henk 'm!

  • sebas
  • Registratie: April 2000
  • Laatst online: 27-01 12:02
als je naar csv exporteert moet je natuurlijk ook checken of er in je velden misschien al puntkomma's staan.

Everyone complains of his memory, no one of his judgement.


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 03-07 11:38

Janoz

Moderator Devschuur®

!litemod

Op woensdag 29 mei 2002 13:15 schreef tomato het volgende:

[..]

Lees jij nog eens heel snel door hoe PHP omgaat met doublequotish string processing >:) ;)
idd |:( |:( .. Ik kijk weer eens veel te snel :)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1