Pdo unquote – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Pdo unquote – PHP – Fórum – Programujte.comPdo unquote – PHP – Fórum – Programujte.com

 

peter
~ Anonymní uživatel
3982 příspěvků
1. 7. 2015   #1
-
0
-

Je nejaka inverzi funkce v pdo pro quote?
Potreboval bych procekovat dotaz, jestli tam nejsou parazitni znaky. mam treba import soubor, tabulku firem
'1','1','Firma A'
'2','1','Firma B'
Samozrejme uplne idealni je ted to explodovat(','), kazdou polozku ceknout zpusobem
$pol == quote(unquote($pol))
Tim se zaruci, ze tam nebude parazitni znak nebo funkce (treba exec->base64decode('zakodovane DROP tabulka')), Aspon mi to prijde na pohled bezpecne. Mate jiny nazor? Proc jinak a ne takto?

V manualu je zas velke kulove. Jako u vsech tech novych class, co vymysleli :)
http://php.net/…do.quote.php

See Also

PDO::prepare()
PDOStatement::execute()

Jo, tohle see also mi tak pomohlo... (ironie)

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:c429:f2...–
Kit+15
Guru
1. 7. 2015   #2
-
0
-

#1 peter
unquote() sice není, ale můžeš zkusit fgetcsv() nebo str_getcsv()

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3982 příspěvků
2. 7. 2015   #3
-
0
-

:)
Tvuj problem je mozna v tom, ze sis nikdy nenechal vypsat string po zaquotovani. Tam bys zjistil, ze to dela uplne neco jineho nez prevod do csv. Nejvic tomu asi odpovida php quote. nechtelo se mi psat ten reg. vyraz, tak jsem doufal, ze existuje zpetna (reverzni funkce). Ale kdyz ji neznas ani ty, tak se obavam, ze to bude znamenat dalsi vyrazne minusko na stranu pdo, kdykoliv nekdo prohlasi, jak je skvele a uzasne proti mysql :)

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:f110:4a...–
peter
~ Anonymní uživatel
3982 příspěvků
2. 7. 2015   #4
-
0
-

Takhle, abys mne nepochopil spatne. csv netransformuje zalomeni radku, kdezto to quote z toho dela \n a tez slashuje vsechny apostrofy bez rozdilu. A mozna nejake dalsi veci. Jdu se pokusit najit k tomu nejakou dokumentaci.

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:f110:4a...–
Kit+15
Guru
2. 7. 2015   #5
-
0
-

#3 peter
Můj problém je v tom, že jsem metodu quote() nikdy nepoužil, neboť ji považuji za zbytečnou...

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3982 příspěvků
2. 7. 2015   #6
-
0
-

Dobre. A jak kontrolujes sql dotaz proti parazitnim udajum? Mam txt soubor casti sql dotazu INSERT INTO
'1','1','Firma A'
'2','1','Firma B'
A ted, jak to mam zkontrolovat, zda tam neni preruseni uvozovkou, ktere nekdo dopsal? Podle meho, nejjednodussi cesta je ta, co jsem napsal, proste to zkusim unquotovat a zaquotovat a jestli se to shoduje.
 

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:f110:4a...–
peter
~ Anonymní uživatel
3982 příspěvků
2. 7. 2015   #7
-
0
-

Ten soubor vygeneroval program, ktery to quotoval. Tam neni problem, ten to vyrobi ok. Ale, kdyz si to uzivatel uploadne, tak si tam muze pridat editeci parazitni kod. Coz je nezadouci.

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:f110:4a...–
peter
~ Anonymní uživatel
3982 příspěvků
2. 7. 2015   #8
-
0
-

prepsanim na csv nic neresis. take musis zkontrolovat proti parazitnimu kodu.

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:f110:4a...–
Kit+15
Guru
2. 7. 2015   #9
-
+1
-
Zajímavé

#6 peter
Nekontroluji. Používám metody prepare() a execute().

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:ac41:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Kit+15
Guru
2. 7. 2015   #10
-
0
-

#7 peter
SQL se pro předávání dat nehodí. Použij jiný formát, třeba XML.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3982 příspěvků
2. 7. 2015   #11
-
0
-

Zvazim jeste to csv. Tam bych se nemusel drbat s parsovanim. Xml zavrhuji jako neusporny format.
Rozhodne se mi nechce spolehat na vlastni unquote, kdyz quote neni radne zdokumentovane :)
Chtel jsem, aby to bylo co nejjednodussi. Nacist soubor. Nejak to checknout a hned sql dotaz pro import do db.

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:f110:4a...–
Kit+15
Guru
2. 7. 2015   #12
-
0
-

#11 peter
Pro jednoduchou strukturu se CSV dá použít velmi dobře a PHP je na to i dobře vybaveno. Navíc je proti SQL úspornější a bezpečnější. Co kdyby ti do něj někdo vpašoval DROP DATABASE?

PHP má i funkci fputcsv(). Sama quotuje dle potřeby.

XML je dobré na strukturovaná data a na komunikaci vzájemně cizích aplikací.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3982 příspěvků
2. 7. 2015   #13
-
0
-

CSV ma jeden zasadni problem. ma put/get  do souboru, ale opet schazi implementace put/get string :) Coz je naprosto zasadni, pac ja to chci zipovat. Takze, opet si napsat vlastni funkci pro konverzi na csv a doufat, ze to nezvrtam :) (nekde bych ji mel snad mit, minule jsem to uz googloval)

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:f110:4a...–
Kit+15
Guru
2. 7. 2015   #14
-
0
-

#13 peter
A to je takový problém si otevřít stdin/stdout?

str_getcsv() ti nepomůže?

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:e857:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3982 příspěvků
2. 7. 2015   #15
-
0
-

   

function csvRead($csv_data,$callback,$table,$where)
{
$rows = str_getcsv($csv_data, "\n");
array_shift($rows);	// odstran hlavicku	// unset($rows[0]);	
array_pop($rows);	// odstran prazdny radek na konci
foreach($rows as $row)
	{
	$callback(str_getcsv($row,";"),$table,$where);
	}
}

function csvWrite( array  &$fields, $delimiter = ';', $enclosure = '"', $encloseAll = false )
{
$delimiter_esc = preg_quote($delimiter, '/');
$enclosure_esc = preg_quote($enclosure, '/');
$output = array();
foreach ( $fields as $field )
	{
        if ( $encloseAll || preg_match( "/(?:${delimiter_esc}|${enclosure_esc}|\s)/", $field ) )
		{
		$output[] = $enclosure . str_replace($enclosure, $enclosure . $enclosure, $field) . $enclosure;
		}
	else	{
		$output[] = $field;
		}
	}
return implode( $delimiter, $output );
}
// mazal jsem komenty, snad je to cele
Nahlásit jako SPAM
IP: 2001:718:2601:1f7:f110:4a...–
Kit+15
Guru
2. 7. 2015   #16
-
0
-

#15 peter
Proč máš $csv_data ve strigu? Zbytečně se to tím komplikuje.

Odstraňovat první a poslední řádek bez kontroly mi připadá jako velmi nebezpečné.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3982 příspěvků
2. 7. 2015   #17
-
0
-

Jak uz jsem rikal, zalohu db hned zipuji. Neukladam si mezi-soubory. 

function backupToFile($path,$tables,$id)
{
$date = date("Ymd-H_i_s",time());
$filename = 'zaldb'.$id.'_'.$date.'.zip';
$to = $path.$filename;
$zip  = new ZipArchive;
if ($zip->open($to, ZipArchive::CREATE) === true)
	{
//	$zip->addFromString('info.txt', implode(', ',$tables));
	foreach($tables as $table)
		{
		$zip->addFromString($table.'.txt', backupTbl($table));
		}
	$zip->close();
	chmod ($to, 0777);
	return true;
	}
return false;
}
Nahlásit jako SPAM
IP: 2001:718:2601:1f7:f110:4a...–
peter
~ Anonymní uživatel
3982 příspěvků
2. 7. 2015   #18
-
0
-

Ha, problem, mi to rozseka podle \n, ale ignoruje to apostrofy. Chapu, ze ta funkce k tomu nebyla urcena, ale. takze jine reseni najit :)

$rows = str_getcsv($csv_data, "\n");

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:f110:4a...–
peter
~ Anonymní uživatel
3982 příspěvků
2. 7. 2015   #19
-
0
-

S tim zipem, jakoze, kdyz to ctu, tak mi vrati string. Podobne, kdyz to zapisuji. Nechci mezisoubory.

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:f110:4a...–
peter
~ Anonymní uživatel
3982 příspěvků
2. 7. 2015   #20
-
0
-

Takze csv take neni reseni problemu :) Neumi konvertovat string na array a zpet.
Takove programovani mne tezce nebavi, kdyz maji rozdelane funkce a nedokonci je. Ted, abych vymyslel fintu, jak to osidit, treba nahradit nove radky necim jinym. Coz nesmirne zbrzdi cely script. Nebo nejak carovat se souborem jako se stringem. Nebo ukladat mezisoubory, coz je uplne nejhorsi varianta.

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:f110:4a...–
peter
~ Anonymní uživatel
3982 příspěvků
2. 7. 2015   #21
-
0
-

Pripadne si budu muset napsat vlastni parser pro csv. To mozna bylo lepcejsi resit to unquote :)

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:f110:4a...–
Kit+15
Guru
2. 7. 2015   #22
-
0
-

#21 peter
Jestli jsem to správně pochopil, tak řešíš zálohování a obnovu databáze. Proč nepoužiješ mysqladmin?

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:3d05:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3982 příspěvků
2. 7. 2015   #23
-
0
-

Aby si to mohl kazdy zakaznik delat sam.

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:f110:4a...–
Kit+15
Guru
2. 7. 2015   #24
-
0
-

#23 peter
A to je takový problém spustit mysqladmin z PHP?

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3982 příspěvků
2. 7. 2015   #25
-
0
-

mnooo, je :) Nevim, zaatim jsem nic takoveho nedelal. Zakaznici nemaji ftp ucet, aby se mohli samostatne logovat, ani sql ucet.

Resim to ted pres soubor s pameti. Nevim, jak moc je to schudne vuci verzim php, vlastnik domeny tam ma nejake stare phpko. A jake velikosti mi dovoli nez zarve hlasky s pameti. Cteni zatim vypada ok.

$size_file = 5 * 1024 * 1024;
$size_row  = 30 * 1024;
$del = ';';
$fp = fopen("php://temp/maxmemory:$size_file", 'r+');    // memory_

...

function csvWrite($fp, $row, $del=';')
{
fputcsv($fp, $row, $del);
}

function csvRead($fp, $size=1000, $del=';')
{
return fgetcsv($fp, $size, $del);
}
Nahlásit jako SPAM
IP: 2001:718:2601:1f7:f110:4a...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 13 hostů

Podobná vlákna

Pdo online - učebnice — založil tribalcz

Prepojenie 2 tabuliek PDO — založil Zelenac14

Login s pomoci pdo — založil tribalcz

PDO pripojenie do MySQL — založil zelenac1

Zapis do MySQL + PDO — založil zelenac1

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý