Autor | Zpráva | ||
---|---|---|---|
matess Profil * |
#1 · Zasláno: 11. 8. 2008, 22:13:43
Mám takový problém.
Ukládám si na stránky oblíbené videa a potřebuji je ukládat tímto způsobem: $vid = "s2df545df"; // $vid je nazev videa mysql_query('INSERT INTO `videa` (`id`, `video`) VALUES (NULL, "<object height="300" width="300"> <param name="movie" value="http://server_videa/player/"> <param name="flash" value="id='.$vid.'&style=sal"> <embed src="http://server_videa/?id='.$vid.'&style=sal" type="application/x-shockwave-flash" height="300" width="300"> </object>")'); Problém je v tom, že mi to neuloží. Mysql_error vypisuje toto: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '300" width="300"> Tuším li správně, tak je problém někde z uvozovkami. Prosím poraďte mi jak mám dát správně uvorovky a stredníky aby to fungovalo. Děkuji |
||
ShiraNai7 Profil |
#2 · Zasláno: 11. 8. 2008, 22:15:58 · Upravil/a: ShiraNai7
Prožeň ten vkládaný html kód funkcí mysql_real_escape_string().
|
||
pmg Profil |
#3 · Zasláno: 11. 8. 2008, 22:18:26
Koukni na dibi a ušetříš si práci;-)
|
||
šárinka Profil |
#4 · Zasláno: 12. 8. 2008, 09:22:17
pmg
už jsi tu jednou psal přežen to přes dibi, ale vůbec jsem nepochopil jak tu dibi používat přečetl jsem tam ty články a vůbec netuším pokud to někdo víte a mohly by jste mi to vysvětlit tak moje icq 496404138 |
||
pmg Profil |
#5 · Zasláno: 12. 8. 2008, 09:57:17
Aha, nebude to těžší, než to vypadá. Napřed musíš vložit knihovnu dibi / dibi.compact.php, prostě si ji stáhni, rozbal do složky se www soubory a použij require. Podle příkladu se připojíš k databázi.
require './dibi/dibi.compact/dibi.compact.php'; dibi::connect(array( 'driver' => 'mysql', 'host' => 'localhost', 'username' => 'root', 'password' => '***', 'database' => 'test', 'charset' => 'utf8', )); Doteď dobrý? A teď už se dá normálně používat dibi::query. Pokud potřebuješ do dotazu vložit nějakou proměnnou, předáš ji jako další parametr funkce s tím, že pomocí uvedených modifikátorů určíš její typ, viz odkaz. |
||
šárinka Profil |
#6 · Zasláno: 12. 8. 2008, 10:19:40
pmg
takže includu pak se připojím k mysql no a pak když budu chtít editovat text tak dám dibi::query('UPDATE `table` SET `text`=%s', $text); ? To je vše? |
||
pmg Profil |
#7 · Zasláno: 12. 8. 2008, 11:16:39 · Upravil/a: pmg
Ano, má to výhodu, že vkládanou proměnnou není potřeba ošetřovat pomocí mysqli_real_escape_string ani ji uzavírat do apostrofů. Pokud je ale proměnná číselná, použije se místo %s %d (číslo bez znaménka) a obdobně.
Dost praktické je, že se při předávání dat pro úpravy / vkládání dá předat pole a hodnoty se automaticky escapují a vypíší se jako seznam. Názvy tabulek můžeš místo zpětných uvozovek uzavírat do [hranatých závorek], jestli se ti to lépe píše. Přizpůsobí se to totiž automaticky použité databázi (položka driver při připojení). Příkazy select vracejí speciální objekt, který lze procházet pomocí foreach nebo zavolat jeho metodu fetchAll a dostaneš všechny záznamy jako pole. Chyby prakticky není potřeba ošetřovat, protože se detekují automaticky a vyhazuje se výjimka. |
||
šárinka Profil |
#8 · Zasláno: 12. 8. 2008, 13:13:02
tak a když sem upravil data přes dibi tak ted to chci vypsat tak sem dal
$id=1; $vysledek=dibi::query('SELECT * FROM [text] WHERE [id] = %i', $id); foreach ($vysledek as $n => $row) { print_r($row); echo $row["at_text"]; echo $row["cz_text"]; } unset($vysledek); ale mám to nejspíš blbě :( |
||
Majkl578 Profil |
#9 · Zasláno: 12. 8. 2008, 14:12:20 · Upravil/a: Majkl578
dibi je zbytecnost, pokud nedelas velke veci (i tak doporucuji udelat vlastni)
to co potrebujes udelas jednoduse takto: $data = mysql_real_escape_string('<object height="300" width="300"> <param name="movie" value="http://server_videa/player/"> <param name="flash" value="id='.$vid.'&style=sal"> <embed src="http://server_videa/?id='.$vid.'&style=sal" type="application/x-shockwave-flash" height="300" width="300"> </object>'); mysql_query('INSERT INTO `videa` SET id = NULL, video = "'.$data.'"'; vypis: po query musis vysledek prvne "extrahovat" $query = mysql_query('SELECT * FROM [text] WHERE [id] = "'.mysql_real_escape_string($id).'"'); //nevim co ma byt [text] a [id], ale budiz $row = mysql_fetch_assoc($query); //ulozi data do promenne $row kde klic pole je nazev sloupce v tabulce print_r($row); echo $row["at_text"]; echo $row["cz_text"]; mysql_free_result($query); |
||
pmg Profil |
#10 · Zasláno: 12. 8. 2008, 14:50:41 · Upravil/a: pmg
šárinka
Kód vypadá dobře, co to (ne)dělá? Print_r vydumpuje všechny položky, ale to asi víš. V tom poli $row by měly být jednotlivé sloupce. Majkl578 Nerad bych začínal flamewar, ale pokud tedy děláš velké věci, proč je podle tebe lepší psát si vlastní? David má s PHP dlouholeté zkušenosti, už předtím zkoušel různé metody přístupu k databázi, než se dostal k dibi. Těžko uděláš kód, který by byl tak malý, rychlý a umožňoval ti psát přehledné a bezpečné příkazy pohodlně. Co se týče menších projektů, v poslední době se často preferuje ušetřený čas programátora před pikosekundou při provádění kódu. Každý projekt se může časem rozrůst, a když máš možnost modifikací jedné proměnné vyměnit databázi, aby fungovaly i odlišné implementace základních modifikátorů, jedině se to hodí. |
||
šárinka Profil |
#11 · Zasláno: 12. 8. 2008, 15:02:15
pmg
Vypíše mi to pouze Array ( [id] => 1 [cz_text] => [at_text] =>), ale nevypíše mi to ten text co mám v db uložený |
||
pmg Profil |
#12 · Zasláno: 12. 8. 2008, 15:06:32
Čoveče, to spíš vypadá, že to v té databázi není uložené. To by to nevypsalo ani názvy těch sloupců. Můžeš to prověřit z phpmyadmina?
|
||
šárinka Profil |
#13 · Zasláno: 12. 8. 2008, 15:09:42
můžu právě se do něj dívám a v sloíupci cz_text nic nemám to tak já být ale v at_text má uloženej kód přehrávače
|
||
pmg Profil |
#14 · Zasláno: 12. 8. 2008, 15:17:27 · Upravil/a: pmg
Vyřešili jsme to přes ICQ.
|
||
Časová prodleva: 16 let
|
0