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
$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
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
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
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
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
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
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
gardener
ne, dibi s Nette nema kodovou souvislost, nicmene spolecne jsou perfektni zbrani... ;)
Alphard
Profil
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
Majkl578
1. prekopirovaval jsem to z mysqli ( $mysql->real... )
2. aano, preklep =)
Jose
Profil *
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 :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: