Zadejte hledaný výraz...

jakou chybu má tento řádek?

Pavel Vodnar
verified
rating uzivatele
21. 2. 2011 17:14:36
Dobrý den, potřeboval by jsem poradit kde je chyba?
kod:
$queryreg = mysql_query("
INSERT INTO inzeraty VALUES ('$id','','$kategorie','$nadpis2','$text2','$date','$name','$nam','$time') WHERE id_inzeratu='".$_GET."'
");
21. 2. 2011 17:14:36
https://webtrh.cz/diskuse/jakou-chybu-ma-tento-radek#reply611854
hm
verified
rating uzivatele
(20 hodnocení)
21. 2. 2011 17:43:56
insert jde spojit s where? no to asi ne... smaz WHERE a a vse za nim
21. 2. 2011 17:43:56
https://webtrh.cz/diskuse/jakou-chybu-ma-tento-radek#reply611853
Jak už jsem vás žádal pod vedlejším dotazem, popište svůj problém přesněji.
- Uveďte kontext: V tomto případě strukturu tabulky a okolí dotazu, ve kterém se přiřazují proměnné
- chybovou hlášku: Když nenecháte ostatní za domácí úkol číst celý kód, máte větší šanci, že vám někdo správně a rychle poradí
- a jaké možnosti jste už vyzkoušel: Nebuďte líný a pokuste se chybu odstranit nejdřív sám.
V tomhle dotazu je chyb několik.
Při INSERT je dobrou praktikou vypsat sloupce, do kterých se přidává. Při budoucí změně struktury tabulky nemusíte přepisovat všechny dotazy.
INSERT narozdíl od UPDATE/REPLACE nevyužívá klauzuli WHERE. K čemu by to bylo?
Používat v dotazu přímo data dodaná klientem ($_GET) je obrovská bezpečnostní chyba.
21. 2. 2011 17:45:20
https://webtrh.cz/diskuse/jakou-chybu-ma-tento-radek#reply611852
Presne tak, dle tveho dotazu soudim ze chces upravit radek s pozadovanym IDeckem
$queryreg = mysql_query("
UPDATE `inzeraty`
SET `kategorie`= '$kategorie', `nadpis`= '$nadpis'
WHERE `id_inzeratu`='".mysql_real_escape_string($_GET)."'
");
21. 2. 2011 17:53:46
https://webtrh.cz/diskuse/jakou-chybu-ma-tento-radek#reply611851
duben
verified
rating uzivatele
(49 hodnocení)
21. 2. 2011 19:35:11
Jen malinko upřesním ... WHERE se používá i v INSERTU, nicméně ne v takto napsaném.
INSERT INTO table (column1, column2, ... columnX)
VALUES (value1, value2, ... valueX)
Tento dotaz je bez WHERE protože přímo vkládám zadané hodnoty tedy 1 řádek
INSERT INTO table (column1, column2, ... columnX)
SELECT value1, value2, ... valueX
FROM table2
WHERE valueY = podminka
V tomto případě se WHERE použije, protože v principu vkládám množinu záznamů, vybraných z tabulky 2, přičemž množinu omezím podmínkou WHERE, abych neuložil všechny řádky z tabulky 2
21. 2. 2011 19:35:11
https://webtrh.cz/diskuse/jakou-chybu-ma-tento-radek#reply611850
hm
verified
rating uzivatele
(20 hodnocení)
21. 2. 2011 19:43:43
dubne ale to je where vztahujici se k selectu nikoliv k insertu s insetrem ten where nema nic spolecneho
21. 2. 2011 19:43:43
https://webtrh.cz/diskuse/jakou-chybu-ma-tento-radek#reply611849
duben
verified
rating uzivatele
(49 hodnocení)
21. 2. 2011 23:12:46
Aleši nemáš pravdu ... v principu je INSERT možný pomocí vypsání VALUES nebo pomocí výpisu SELECT, nicméně i když je část dotazu SELECT, tak se to celé bere jako INSERT dotaz. Abychom předešli dohadování o úhlu pohledu na danou problematiku uvedu několik další zdrojů, které to berou stejně:
INSERT syntax dle MySQL http://dev.mysql.com/doc/refman/5.0/en/insert.html
INSERT příkaz dle Wikipedie http://cs.wikipedia.org/wiki/INSERT
INSERT dle techonthenet http://www.techonthenet.com/sql/insert.php
Podstatou mé připomínky bylo, že i v INSERT příkazu se WHERE může objevit a může to být správně. Ty a Martin jste tu tvrdili že v INSERTu nemá co dělat a to je špatně, sice je to použité jako podmínka pro SELECT část dotazu, ale takto napsaný kód se bere celý jako INSERT nikoliv jako INSERT s vnořeným SELECTem.
21. 2. 2011 23:12:46
https://webtrh.cz/diskuse/jakou-chybu-ma-tento-radek#reply611848
hm
verified
rating uzivatele
(20 hodnocení)
21. 2. 2011 23:57:34
to je slovickareni :) ale dobre, uznavam, jen rikam ze insert + where (bez selectu) je kravina a neexistuje :) tak jsem svuj prvni prispevek myslel a stojim si za tim ze je to pravda. Stejně jako si stojim za tim, ze tvuj priklad insertu s where neni insert s where ale insert selectu ve kterem je where, takze je to sice insert, ale where se vztahuje k selectu, tudiz nelze tvrdit ze to je insert co obsahuje where :) jestli s tim nesouhlasis, ok, podle me jde o nepodstatnou vec, o slovickareni a je mi to fuk, jen rikam ze muj prvni prispevek tedy insert s where (coz se vztahovalo k uvedenemu dotazu v prvnim prispevku) je hola pravda bez vyjimky (i presto ze tvrdis ze pravdu nemam)
21. 2. 2011 23:57:34
https://webtrh.cz/diskuse/jakou-chybu-ma-tento-radek#reply611847
Martin Janeček
verified
rating uzivatele
22. 2. 2011 07:57:05
Myslím, že winexec-ova odpověď je přesně, co Pavel hledal. Jen bych poprosil, jestli by se mohl Pavel držet těch rad, co sem napsal Martin a také by nebylo na škodu napsat, co problém vyřešilo, a jestli si nad tím mají další lámat mozky (zkrátka napsat děkuji, místo INSERT mělo být UPDATE)
22. 2. 2011 07:57:05
https://webtrh.cz/diskuse/jakou-chybu-ma-tento-radek#reply611846
Pavel Vodnar
verified
rating uzivatele
22. 2. 2011 08:57:12
Dobrá - dělám script na opravu inzerátu:
html kód:
Výběr kategorie: Nabídka      Poptávka
Nadpis inzerátu:
Text inzerátu:
Obrázek:
a php
$pripoj=MySQL_Connect($localhost, $user, $pass) or Die(MySQL_Error());
MySQL_Select_Db("sroty_net_") or Die(MySQL_Error());
$submit = $_POST;
$selected_radio2 = $_POST;
$nadpis2 = $_POST;
$text2 = $_POST;
$fupload = $_POST;
$date = date("Y-m-d");
$time= date("H:i:s");
$name=$_SESSION;
$vypis="SELECT zadavatel,nadpis, text, picture FROM inzeraty WHERE id_inzeratu='".$_GET."'";
$vysledek = MySQL_Query($vypis);
if ($vystup_z_db = mysql_fetch_array($vysledek))
{
$text=$vystup_z_db;
$nadpis=$vystup_z_db;
$picture=$vystup_z_db;
$zadavatel=$vystup_z_db;
//echo $nadpis;
//echo $text;
$nadpis = $_POST;
$text = $_POST;
//echo $_GET;
echo mysql_error();
if ($submit)
{
echo $_GET;
mysql_query(" INSERT INTO inzeraty VALUES ('','','','$nadpis2','$text2','','','','') WHERE id_inzeratu=".$_GET." ");
}
}
Potřebuji docílit aby se mi opravený inzerát ukládal do DB pod to samé id inzerátu, jak tedy poopravit tento kód aby to pracovalo jak má? Díky
22. 2. 2011 08:57:12
https://webtrh.cz/diskuse/jakou-chybu-ma-tento-radek#reply611845
David Klouček
verified
rating uzivatele
22. 2. 2011 13:54:57
Co kdyby sis něco už přečet nějakej tutoriál na programování?
MySQL Insertem se vkládaj nový řádky, pro úpravu řádku použij Update. Jinak když pominu že ten kód je zranitelnej SQL injekcí, tak by sis měl něco přečíst o atomicitě operací - viz
mysql_query(" INSERT INTO inzeraty VALUES ('','','','$nadpis2','$text2','','','','') WHERE id_inzeratu=".$_GET." ");
To budeš hlásit že něco bylo v pořádku, aniž bys to doopravdy ověřil návratovou hodnotou funkce mysql_query()?
22. 2. 2011 13:54:57
https://webtrh.cz/diskuse/jakou-chybu-ma-tento-radek#reply611844
Vladimír Benc
verified
rating uzivatele
(7 hodnocení)
23. 2. 2011 09:49:55
No já se zastanu Aleše a dalších...
Napsal duben;628109
Aleši nemáš pravdu ... v principu je INSERT možný pomocí vypsání VALUES nebo pomocí výpisu SELECT, nicméně i když je část dotazu SELECT, tak se to celé bere jako INSERT dotaz. Abychom předešli dohadování o úhlu pohledu na danou problematiku uvedu několik další zdrojů, které to berou stejně:
INSERT syntax dle MySQL http://dev.mysql.com/doc/refman/5.0/en/insert.html
INSERT příkaz dle Wikipedie http://cs.wikipedia.org/wiki/INSERT
INSERT dle techonthenet http://www.techonthenet.com/sql/insert.php
Podstatou mé připomínky bylo, že i v INSERT příkazu se WHERE může objevit a může to být správně. Ty a Martin jste tu tvrdili že v INSERTu nemá co dělat a to je špatně, sice je to použité jako podmínka pro SELECT část dotazu, ale takto napsaný kód se bere celý jako INSERT nikoliv jako INSERT s vnořeným SELECTem.
Já tedy ten Select beru jako klasické subquery, INSERT dle mě nemá s WHERE nic společného, to že kolem selectu nejsou závorky je prostě jenom o syntaxe v tomhle konkrétním případě, ale ten SELECT je klasické subquery včetně všsho co k tomu patří, včetně join,group by, order by apod... proto bychom mohli říct, že INSERT se dá spouštět i s těmito příkazy askončily bysme stejně u toho, že je to PROSTÝ select.
YMMV
Edit: a vtom původním příspěvku je to WHERE ale úplně mimo
23. 2. 2011 09:49:55
https://webtrh.cz/diskuse/jakou-chybu-ma-tento-radek#reply611843
duben
verified
rating uzivatele
(49 hodnocení)
23. 2. 2011 10:51:58
ankel: subquery to není. Pokud to tak chápeš chápeš to špatně. Proto jsem uvedl odkazy na stránky kde je definice INSERT patrná (pokud by někdo nechtěl věřit mému výkladu a abych zamezil těmhle diskuzím o detailech, které nesouvisejí s původním dotazem). Je to součást dotazu INSERT, stejně jako je GROUP BY součást SELECTu (ovšem taky jen v případě že chceš použít agregační funkce a seskupovat data). INSERT je vložení dat definováním jejich hodnot. Toto definování se provádí jejich výčetem tzn. přes VALUES nebo definicí pomocí množiny dat, k tomu se používá SELECT.
Subquery je něco jiného, prosím nemíchat ať tu nepleteme začátečníky v SQL. Poddotaz je, pokud v klauzuli FROM místo tabulky napíšu definici množiny pomocí dalšího SELECT nebo pokud ve WHERE dám condition IN a místo vypsání hodnot opět definuju množinu pomocí SELECT. Tedy zjednodušeně řečeno subquery je až SELECT vnořený do jiného SELECTu.
Tohle není subquery
Tohle jsou subquery (nikoliv ovšem první SELECT ale až ty další)
23. 2. 2011 10:51:58
https://webtrh.cz/diskuse/jakou-chybu-ma-tento-radek#reply611842
hm
verified
rating uzivatele
(20 hodnocení)
23. 2. 2011 11:39:20
slovickareni :)
23. 2. 2011 11:39:20
https://webtrh.cz/diskuse/jakou-chybu-ma-tento-radek#reply611841
Vladimír Benc
verified
rating uzivatele
(7 hodnocení)
24. 2. 2011 07:35:14
Napsal duben;628644
ankel: subquery to není. Pokud to tak chápeš chápeš to špatně.
Subquery je něco jiného, prosím nemíchat ať tu nepleteme začátečníky v SQL. Poddotaz je, pokud v klauzuli FROM místo tabulky napíšu definici množiny pomocí dalšího SELECT nebo pokud ve WHERE dám condition IN a místo vypsání hodnot opět definuju množinu pomocí SELECT. Tedy zjednodušeně řečeno subquery je až SELECT vnořený do jiného SELECTu.
Nebo by se to dalo taky říct jako: upravuji citaci: Poddotaz je, pokud v příkazu INSERT místo výpisu hodnot VALUES napíšu definici množiny pomocí dalšího SELECT ??????
Napsal duben;628644
Tohle jsou subquery (nikoliv ovšem první SELECT ale až ty další)
Vím že si to takhle napsal schválně :) a ANO - nevidím rozdíl (ani v tom, že u prvního insertu ten první select ztrácí smysl úplně a šlo jenom o demonstraci, že se to vnořilo dvakrát - ale ten první dle tebe není subquery). Asi sem to prostě opravdu nepochopil, něco zásadního mi uniká, ale určitě to nic nezmění na tom co si myslím já :) takže bych to tady uzavřel jako OT. I s Alešem :)
24. 2. 2011 07:35:14
https://webtrh.cz/diskuse/jakou-chybu-ma-tento-radek#reply611840
Pro odpověď se přihlašte.
Přihlásit