Autor | Zpráva | ||
---|---|---|---|
gardener Profil |
Zdravim, chctel bych se zeptat na jednu drobnost.
drive pri vkladani do DB jsem byl zvykly si prevest vzdy hodnoty z $_POST do klasickych promennych a s temi pak pracovat. Nyni mi ale prijde lepsi pracovat primo s hodnotami z $_POST, ale problem nastava tehdy, pokud DTA takto prijata vkladam do DB. Napr> $query = "INSERT INTO devlop.tbl_pools (question,choice1,choice2,choice3) VALUES (\"Jak se mas?\",$_POST['opt_1'],$_POST['opt_2'],$_POST['opt_2'])"; Jde mi tedy o to, jak zapisovat hodnoty, napr $_POST['opt_1'] pri zapisu do DB. Pouziti apostrofu mi prijde hodne nachyne k chybam ale pri uvozovkach a oslashovani mi to MySQL oznaci jakou chybnou hodnotu. Jak se to tedy dela "spravne", diky za jakokolliv radu. |
||
blaaablaaa Profil |
#2 · Zasláno: 5. 10. 2009, 14:11:04 · Upravil/a: blaaablaaa
$query = "INSERT INTO devlop.tbl_pools (question,choice1,choice2,choice3) VALUES ('Jak se mas?','".osetri($_POST['opt_1'])."', '".osetri($_POST['opt_2'])."', '".osetri($_POST['opt_2'])."')"; function escape($string) { if(get_magic_quotes_gpc()) $string = stripslashes($string); return $mysql_real_escape_string($string); } |
||
gardener Profil |
#3 · Zasláno: 5. 10. 2009, 14:21:04 · Upravil/a: gardener
No toho jsem se zrovna cht2l vyvarovat, pouziti '".osetri($_POST['opt_1'])."' , tzn apostrofy, uvozovky a spojovani retezcu je podle me dost nachylne k chybam a snizuje prehlednost.
Escapovani provadim jiz predtim u vsech poliv $_POST, takze zde bych rad pouzil jen>$_POST["opt_1"], to mi pripada vice citelne? Treba takto by to bylo oukej? $query = "INSERT INTO devlop.tbl_pools (question,choice1,choice2,choice3) VALUES (\"Jak se mas?\",".$_POST["opt_1"].",".$_POST["opt_2"].",".$_POST["opt_3"].")"; |
||
blaaablaaa Profil |
#4 · Zasláno: 5. 10. 2009, 14:27:51
pokud chces vsude uvozovky, musis:
$query = "INSERT INTO devlop.tbl_pools (`question`,`choice1`,`choice2`,`choice3`) VALUES (\"Jak se mas?\",\"".$_POST["opt_1"]."\",\"".$_POST["opt_2"]."\",\"".$_POST["opt_3"]."\")"; Coz mi prehledne orpavdu neprijde. |
||
Majkl578 Profil |
#5 · Zasláno: 5. 10. 2009, 16:14:49
blaaablaaa
kdo najde 2 zasadni chyby, vyhral! .... nikdo? ..... tak tedy vyhraji ja, $mysql_real_escape_string by melo byt mysql_real_escape_string ne osetri($_POST[...]), ale escape($_POST[...]) |
||
Alphard Profil |
#6 · Zasláno: 5. 10. 2009, 16:45:45
gardener:
„No toho jsem se zrovna cht2l vyvarovat, pouziti '".osetri($_POST['opt_1'])."' , tzn apostrofy, uvozovky a spojovani retezc“ Ano, stojí to za houby. Zvažte použití něčeho lepšího. Např. dibi::query("INSERT INTO devlop.tbl_pools (question,choice1,choice2,choice3) VALUES (%s, %s, %s, %s)", "Jak se máš", $_POST['opt_1'], $_POST['opt_2'], $_POST['opt_3']); nebo $a = array ( 'question' => 'Jak se máš?', 'choice1' => $_POST['opt_2'] ); dibi::query("insert into devlop.tbl_pools %v", $a); |
||
Majkl578 Profil |
#7 · Zasláno: 5. 10. 2009, 16:56:34
Alphard
zvazoval jsem, zda se zminit o dibi, nakonec jsem si rekl, ze ho s ni nebudu trapit... a v dalsim prispevku to za me udela nekdo jiny :)) |
||
gardener Profil |
#8 · Zasláno: 5. 10. 2009, 19:28:57
Za dibi diky podivam se na to, al ejak to tak vuypada, bude to mozna vyzadovat znalost nejakeho PHP frameworku..asi Nette ze?
|
||
Majkl578 Profil |
#9 · Zasláno: 5. 10. 2009, 19:32:43
gardener
ne, dibi s Nette nema kodovou souvislost, nicmene spolecne jsou perfektni zbrani... ;) |
||
Alphard Profil |
#10 · Zasláno: 5. 10. 2009, 19:32:48
Nette není podmínkou. Navíc existuje mnoho podobných věcí. Já rád prezentuji dibi, protože (kromě toho, že se mi líbí) je dobře vysvětlené v češtině. Možná bych měl ale více doporučovat oficiální layery.
|
||
blaaablaaa Profil |
#11 · Zasláno: 6. 10. 2009, 11:24:24
Majkl578
1. prekopirovaval jsem to z mysqli ( $mysql->real... ) 2. aano, preklep =) |
||
Časová prodleva: 27 dní
|
|||
Jose Profil * |
#12 · Zasláno: 2. 11. 2009, 12:12:53
Formulář bych dal <input name="choice1" type...>
potom POST vypadá pole ('choice1'=>/zadaná hodnota/,....) Kdybych něco z postu nechtěl, tak dám unset($_POST['tohle nechci']); a pak bych dal dibi::insert(`devlop.tbl_pools`,$_POST)->execute(); A hlavně v DB nastav defaultní hodnoty(stačí null, nebo '') a musí to jet :) |
||
Časová prodleva: 14 let
|
0