Autor | Zpráva | ||
---|---|---|---|
gardener Profil |
#1 · Zasláno: 15. 2. 2009, 19:22:08
Zdravím
Mám jeden dotaz, provádím import dat do DB pomocí LOAD DATA INFILE a absolutní cestu k souboru zadávám pomocí $soubor = dirname(__FILE__) . '\\' . $soubor_nazev; Problé je ale v tom, že dirname(__FILE__) vrací řetezec se zpětným lomítky, což se nelíbí SQL, který chce cestu s lomítky klasickými... Tuší někdo prosím, jak by se tento problém dal vyřešit? Nebo musím použít strreplace? Díky za každou radu. |
||
AM_ Profil |
#2 · Zasláno: 15. 2. 2009, 19:50:38
str_replace je tak jednoduché řešení, že nevím, co jednoduššího bys chtěl.
|
||
gardener Profil |
#3 · Zasláno: 15. 2. 2009, 19:53:14
To asi ano, ale nebude pak problém s WIN a LIN serverem?Tam je to přeci jinak..
|
||
sicario Profil |
#4 · Zasláno: 15. 2. 2009, 20:24:56
Spravny oddelovac cesty byva ulozen v preddefinovane konstante DIRECTORY_SEPARATOR. Zatim jsem na Win nemel problem s pouzivanim / oddelovace.
|
||
gardener Profil |
#5 · Zasláno: 15. 2. 2009, 20:49:01
Ja take ne, ale vem si, že pokud použiji strreplace, na \ tak dostanu /, to bude fajn na localu, ale problem nastane na hostingu, takze jedine reseni by bylo rozlisit IP a podle toho bud includovat konstantu /, nebo nikoliv.
|
||
AM_ Profil |
#6 · Zasláno: 15. 2. 2009, 20:52:26
kdyz pouzijes str_replace \ na / na retezec, ktery bude uz mit spravne /, tak se prece nic nestane, sice tam ten str_replace na hostingu pojede naprazdno, ale fungovat to bude na obojim.
|
||
gardener Profil |
#7 · Zasláno: 15. 2. 2009, 21:21:20
o.k vykousim..
|
||
Majkl578 Profil |
#8 · Zasláno: 15. 2. 2009, 21:29:20
roblé je ale v tom, že dirname(__FILE__) vrací řetezec se zpětným lomítky, což se nelíbí SQL, který chce cestu s lomítky klasickými...
neumite snad escapovat? |
||
nightfish Profil |
#9 · Zasláno: 15. 2. 2009, 21:32:59
Majkl578
„neumite snad escapovat?“ escapováním se změní zpětná lomítka na dopředná? |
||
Majkl578 Profil |
#10 · Zasláno: 15. 2. 2009, 22:02:01
nightfish
přečti si prosím znovu první příspěvek. on se neptá, jak změnit lomítka, ale jak vyřešit problém kdy sql nebere neescapovaná \. |
||
gardener Profil |
#11 · Zasláno: 15. 2. 2009, 22:03:03
To umim, ale tam pak vznika problem s temi zpetnymi lomitky
viz: $soubor = dirname(__FILE__) . '\\' . $soubor_nazev; A pokud dám escapovat dostanu v tomhle případě hlášku typu: Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\xampp\htdocs\Registrace\admin\nahraj_seznam.php on line 2 Takže nevím co s tím, zatím jsem vždy prováděl ten import přímo v PHPMyAdmin ale teď to musím vyřešit jinak. Jinak script vypadá takto: Myslím, že by to mělo být v pořádku ne? <? $soubor_nazev =(mysql_real_escape_string($_FILES['data']['name'])); if ($_REQUEST["odeslano"]==1): if (!is_file($_FILES['data']['tmp_name'])) die ("Nenahráli jste žádný soubor"); if ($_FILES['data']['size']>1000) die ("Soubor je příliš velký"); //echo($cesta); $nazev=explode(".", basename($soubor_nazev)); if ($nazev[1]!= "csv")die("Je mozne nahravat pouze soubory s priponou csv");//Vraci priponu souboru // if (is_uploaded_file($_FILES['data']['tmp_name'])) if (move_uploaded_file($_FILES['data']['tmp_name'],$soubor_nazev)) { include_once ("../db_connect.php"); //$soubor=$_SERVER["SCRIPT_FILENAME"]."/".$soubor_nazev; $soubor = dirname(__FILE__) . '\\' . $soubor_nazev; echo($soubor); //substr() $vlozeni = mysql_unbuffered_query ("LOAD DATA INFILE '".$soubor."' INTO TABLE products FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' IGNORE 1 LINES;"); if (!$vlozeni) { die("Vlozeni se nepodarilo"); } }; else: ?> |
||
Majkl578 Profil |
#12 · Zasláno: 15. 2. 2009, 22:07:17 · Upravil/a: Majkl578
no jóóó, když ona nejde funkce mysql_real_escape_string() že? jak by taky mohla před připojením k databázi.
takže: mysql_connect(...); mysql_select_db(...); $cesta = mysql_real_escape_string(dirname(__FILE__) . '\\' . $soubor_nazev); nebo: $cesta = str_replace('\', '\\', dirname(__FILE__)) . '\\\\' . $soubor_nazev; |
||
gardener Profil |
#13 · Zasláno: 15. 2. 2009, 22:15:23
Pravda, díky za radu, příště si na to dám pozor..
|
||
AM_ Profil |
#14 · Zasláno: 15. 2. 2009, 22:29:22
„$cesta = str_replace('\', '\\', dirname(__FILE__)) . '\\\\' . $soubor_nazev;“
to už je trochu předimenzované, to raději použij funkci addslashes($cesta) |
||
Časová prodleva: 15 let
|
0