Autor | Zpráva | ||
---|---|---|---|
Jcas Profil |
#1 · Zasláno: 19. 12. 2015, 18:42:15
Pořád se v tom ztrácím. Může mi prosím někdo vysvětlit tu syntaxi?
Momentálně jsem si uvědomil, že to stále nechápu na následujícím příkladě. $hodnota = $id_kat==$inzerat[$id_inz]['id_k'] ? '' : '`id_k` = '.$id_kat ; |
||
Fisir Profil |
#2 · Zasláno: 19. 12. 2015, 18:47:12
Reaguji na Jcase:
Tento kousek kódu je ekvivalentní k tebou zmíněnému: if($id_kat == $inzerat[$id_inz]['id_k']){ $hodnota = ''; } else { $hodnota = '`id_k` = '.$id_kat; } |
||
Keeehi Profil |
#3 · Zasláno: 19. 12. 2015, 18:47:50
Je to jen zkrácený způsob zapsání prostého ifu
if ($id_kat==$inzerat[$id_inz]['id_k']) { $hodnota =''; } else { $hodnota = '`id_k` = '.$id_kat ; } |
||
Jcas Profil |
Sakra jsem to nechtěně odeslal. Takže do $hodnota chci nasázet 1-5 sloupců, kterým změním hodnoty v DB.
$sql = "UPDATE `inzerce` SET $hodnota $id_kat je int . Ale spojuji řetězec a `id_k` = je string.
Jak můžu spojit řetězec s int? A nakonec to celé chi vložit zase do řetězce kdy $sql = "UPDATE.........." DO $sql dávám řetězec definován uvozovkama.Kdesi jsem obkoukal, že když pracuji se string, tak nic neřeším - příkl. $sql = "SELECT......WHERE `sloupec` = $neco AND ...." .
Tady má v $neco string A když chcu int $sql = "SELECT......WHERE `sloupec` = ".$neco." AND ...." Ale když se na to teď dívám, tak také zřetězuji dohromady int a string. Prostě to fakt doteď nechápu. |
||
Keeehi Profil |
Já bych šel přes pole
$data = array( "sloupec_1" => "hodnota 1", "sloupec_2" => "hodnota 2" ); array_walk($data, function(&$i,$k) {$i="`$k`=$i";}); $hodnota = implode($data, ', '); Jcas: „Ale když se na to teď dívám, tak také zřetězuji dohromady int a string.“ PHP si na rozdíl třeba od Cčka provede konverzi na string automaticky. Takže ano, můžeš bez problémů řetězit string a int. Jinak "Foo $bar" "Foo ".$bar |
||
Jcas Profil |
Keeehi: Pěkné řešení, ale není to, to co mě trápí. A to je syntaxe stringů. Hodnota 1 je string a hodnota 2 je int.
Obojí zavřeš mezi "" a do sql dotazu vložíš string? PHP si na rozdíl třeba od Cčka provede konverzi na string automaticky. Takže ano, můžeš bez problémů řetězit string a int. No jo, ale DB očekává že budu vkládat int. |
||
Keeehi Profil |
#7 · Zasláno: 19. 12. 2015, 19:21:49
No to pole klidně může vypadat takto:
$data = array( "sloupec_1" => 1, "sloupec_2" => 2 ); Jcas: „No jo, ale DB očekává že budu vkládat int.“ No to sice ano, ale PHP funkce které budeš předávat dotaz do databáze očekává string. Dotaz je vždy prostě string. A databáze očekává dotaz, kde na určitém místě bude řetězec, který z kterého umí vytvořit číslo. |
||
Jcas Profil |
#8 · Zasláno: 19. 12. 2015, 19:32:14
OK, děkuji.
|
||
juriad Profil |
Keeehi:
Já mám dojem, že různé sloupce mají různé datové typy, takže podle jejich datového typu je musíš správně zpracovat: $data = array( "ciselny_sloupec" => 1, "retezcovy_sloupec" => 'baf' ); $assignments = array(); foreach($data as $key => $value) { if (is_string($value)) { $assignments[] = "`$key` = '" . mysqli_real_escape_string($link, $value) . "'"; } elseif (is_numeric($value)) { $assignments[] = "`$key` = " . ($value + 0); } else { die('Error; wrong data type'); } } $clause = implode($assignments, ', '); Toto a mnohem víc řeší dibi. Viz dibiphp.com/cs/quick-start#toc-formatovani-poli |
||
Keeehi Profil |
#10 · Zasláno: 19. 12. 2015, 19:59:35
juriad:
„takže podle jejich datového typu je musíš správně zpracovat“ S tím souhlasím. Měl jsem pocit, že má jít vždy o čísla, tak v tom případě by to nebylo třeba řešit. $assignments = "`$key` = " . ($value + 0); $assignments[] (a to i u předchozího)
2. $value + 0 - pro přetypování mám raději (int)$value ale ani to tu není potřeba, když už jsi číslo ověřil funkcí is_numeric.
|
||
juriad Profil |
#11 · Zasláno: 19. 12. 2015, 20:06:33
Keeehi:
1. díky, na to jsem zapomněl. 2. to je záměr; funguje to i pro float. Nejsem si jistý u NaN, gigantických čísel 1.2e100 atp. |
||
Keeehi Profil |
#12 · Zasláno: 19. 12. 2015, 20:16:10
juriad:
„to je záměr; funguje to i pro float.“ Moje myšlenka je, že přetypování není potřeba, protože proměnná $value musí být buď int nebo float. Nic jiného není možné. A pokud k intu přičtu nulu, bude to pořád int a pokud k floatu, bude to pořád float. tudíž je to naprosto zbytečné. Samozřejmě můj způsob přetypování nezachová float a "zaokrouhlí" ho a převede na int. |
||
Jcas Profil |
#13 · Zasláno: 20. 12. 2015, 06:33:52
Takže mám tento výsledek. Syntaxi mám naprosto stejnou ať jde o číslo nebo o řetězec!!??
// vpředchozí části ošetřuji prom. než je pošlu do DB //----PŘÍPRAVA DAT NA ULOŽENÍ----- if(!isset($hlaska) && isset($_POST['enter'])) { $stav = $mysqli->real_escape_string(trim($_POST['stav'])); $nadpis = $mysqli->real_escape_string(trim($_POST['nadpis'])); $inzerat = $mysqli->real_escape_string(trim($_POST['inzerat'])); $id_kat=intval($id_kat); $id_chov=intval($id_chov); $id_user=intval($id_user); } if($id_kat!=$inzerat[$id_inz]['id_k']) {$hodnaota[] = '`id_k` = '.$id_kat ;} if($_POST['nadpis']!=$inzerat[$id_inz]['nadpis']) {$hodnota[] = '`nadpis` = '.$nadpis ;} if($_POST['inzerat']!=$inzerat[$id_inz]['inzerat']) {$hodnota[] = '`nadpis` = '.$inzerat ;} if($_POST['stav']!=$inzerat[$id_inz]['stav']) {$hodnota[] = '`stav` = '.$stav ;} if(!empty($hodnota)) {$hodnota[] = '`datum` = CURDATE()'; $clausule = implode(', ', $hodnota);} $sql = "UPDATE `inzerce` SET $clausule WHERE `id_inz` = ". intval($_GET['id_inz']); |
||
Keeehi Profil |
#14 · Zasláno: 20. 12. 2015, 11:19:12
Skoro dobře. Jen u $stav,$ nadpis a $inzerát by přiřazení do $hodnota[] mělo vypadat takto:
$hodnota[] = '`nadpis` = \''.$nadpis.'\'' |
||
Jcas Profil |
#15 · Zasláno: 22. 12. 2015, 06:55:54
Děkuji
|
||
Časová prodleva: 8 let
|
0