Autor | Zpráva | ||
---|---|---|---|
Jakub.007 Profil * |
#1 · Zasláno: 2. 1. 2010, 16:54:23
Prosím, poradíte mi někdo kde mám chybu?
Nejsem si úplně jistý jak správně zapsat uvozovky nebo apostrofy, když tu potřebuji tři úrovně, zoušel jsem několik variant, ale pořád nic. Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in /3w/domenadruhyrad.cz/p/domenatretirad/slozka/soubor.php on line 35 číslo řádku jsem upravil, aby souhlasilo s kódem tady MySQL_Query("INSERT INTO log ( prijmeni, login, ip, REMOTE_ADDR, REMOTE_HOST, REMOTE_NAME, HTTP_FROM, HTTP_CLIENT_IP, HTTP_COMING_FROM, HTTP_X_COMING_FROM, HTTP_VIA, HTTP_PROXY, HTTP_XPROXY, HTTP_PROXY_CONNECTION, HTTP_X_FORWARDED_FOR, X_HTTP_FORWARDED_FOR, HTTP_FORWARDED, X_FORWARDED_FOR, ORIGINAL_REMOTE_ADDR, HTTP_ACCEPT_LANGUAGE, HTTP_USER_AGENT ) VALUES ( \'$abeceda\', \'$cas\', \'$ip\', \'$_SERVER[\'REMOTE_ADDR\']\', \'$_SERVER[\'REMOTE_HOST\']\', \'$_SERVER[\'REMOTE_NAME\']\', \'$_SERVER[\'HTTP_FROM\']\', \'$_SERVER[\'HTTP_CLIENT_IP\']\', \'$_SERVER[\'HTTP_COMING_FROM\']\', \'$_SERVER[\'HTTP_X_COMING_FROM\']\', \'$_SERVER[\'HTTP_VIA\']\', \'$_SERVER[\'HTTP_PROXY\']\', \'$_SERVER[\'HTTP_XPROXY\']\', \'$_SERVER[\'HTTP_PROXY_CONNECTION\']\', \'$_SERVER[\'HTTP_X_FORWARDED_FOR\']\', \'$_SERVER[\'X_HTTP_FORWARDED_FOR\']\', \'$_SERVER[\'HTTP_FORWARDED\']\', \'$_SERVER[\'X_FORWARDED_FOR\']\', \'$_SERVER[\'ORIGINAL_REMOTE_ADDR\']\', \'$_SERVER[\'HTTP_ACCEPT_LANGUAGE\']\', \'$_SERVER[\'HTTP_USER_AGENT\'])"); |
||
Alphard Profil |
#2 · Zasláno: 2. 1. 2010, 17:01:02 · Upravil/a: Alphard
mysql_query("'$abeceda', '{$_SERVER['REMOTE_ADDR']}', '{$_SERVER['REMOTE_ADDR']}'"); |
||
tiso Profil |
#3 · Zasláno: 2. 1. 2010, 17:07:53 · Upravil/a: tiso
Alphard: ???
Jakub.007: 1. mysql_query("INSERT INTO ... VALUES ('$abeceda', '$_SERVER[REMOTE_ADDR]', '$_SERVER[REMOTE_ADDR]', ..."); 2. ideš na to zle, niektoré z týchto premenných nemusia vôbec existovať. |
||
Alphard Profil |
#4 · Zasláno: 2. 1. 2010, 17:19:12
tiso:
„Alphard: ???“ Co se ti nezdá? Dal jsem do dotazu jen ukázku proměnných, se kterými je problém, omáčku jako insert into není třeba kopírovat. A použití {} je možné. Viz manuál: // Works, but note that this works differently outside a string echo "A banana is $fruits[banana]."; // Works echo "A banana is {$fruits['banana']}."; |
||
Jakub_007 Profil * |
#5 · Zasláno: 2. 1. 2010, 17:47:29
Připadám si opravdu hloupě, jelikož se mi zdá, že jsem sám vytvořil chybu někde, kde předtím nebyla...
Díky za tak rychlé reakce a za odpovědi. Mám ještě jednu otázku, když nějaká z těch hodnost je prázdná nebo neexistuje, proč se neprovede ten dotaz, respektive, proč se záznam nevloží do tabulky? tiso: tvoje odpověď přesně sedí k tomuhle kódu, kdežto Alphard použil obecnější řešení, které pomůže, když by závorky byly nevyhnutelné. (což není konkrétně tenhle případ) ale odpovídá to na druhou část mého původního dotazu. tiso: //EDIT až teraz som pochopil ako myslíš bod 2, jenom ma varuješ pred problémom, na ktorý som práve narazil .. |
||
Jakub_007 Profil * |
#6 · Zasláno: 2. 1. 2010, 17:56:22
no, jako obvykle, podařilo se mi udělat banální chybičku, v tom množství sloupců v databázi jsem přehlédl, že mi jeden chybí...
tedy problém je vyřešen (vlastně oba problémy), díky za váš čas |
||
tiso Profil |
#7 · Zasláno: 2. 1. 2010, 19:00:53
[#4] Alphard: nezdá sa mi použitie {}, v tomto prípade je zbytočné.
[#5] Jakub_007: - v tomto konkrétnom prípade tú tretiu úroveň nepotrebuješ - keby si potreboval, tak okrem {} syntaxe prichádza do úvahy escapovanie, alebo spájanie reťazcov. Treba rozpísať? k svojmu predchádzajúcemu príspevku dopĺňam bod: 3. treba myslieť na bezpečnosť, serverové hlavičky sú ďalším užívateľským vstupom a možno ich podvrhnúť, takže treba ošetriť ich uloženie do DB, i výpis. |
||
AM_ Profil |
#8 · Zasláno: 2. 1. 2010, 19:53:24
tiso:
„nezdá sa mi použitie {}, v tomto prípade je zbytočné.“ to je spíš otázka vkusu, já zastávám názor, že kdekoliv je v řetězci použita inline proměnná ve složitějším tvaru než $nazev_promenne, nacpu tam {}, nic se tím nezkazí a nemusím si pamatovat, kdy přesně už je to potřeba a kdy ne. Navíc mi to přijde i přehlednější to psát takto. |
||
Jakub_007 Profil * |
#9 · Zasláno: 2. 1. 2010, 21:00:40
Nakonec jsem kód přepsal do této podoby, funguje, taže já jsem spokojený ;-)
Omlouvám se že mi to trvalo tak dlouho, byl jsem vyrušen rodinými povinnostmi. [#8] to AM_: souhlasím s tebou [#7] to tiso: to je dosť dobrá pripomienka, myslíš, že to čo som urobil splní svoju funkciu? (myslím že bude stačiť ošetriť ich len pri ukladaní do databázy) //pomocná funkce e() function e($promena) { if(isset($_SERVER[$promena])) { //ochrana vstupu return stripslashes( str_replace('"',"#uvozovky#", str_replace("/","#lomítko#", str_replace(";","#středník#", strip_tags($_SERVER[$promena]))))); } else { return "prázdné"; } } MySQL_Query("INSERT INTO log ( prijmeni, login, ip, REMOTE_ADDR, REMOTE_HOST, REMOTE_NAME, HTTP_FROM, HTTP_CLIENT_IP, HTTP_COMING_FROM, HTTP_X_COMING_FROM, HTTP_VIA, HTTP_PROXY, HTTP_XPROXY, HTTP_PROXY_CONNECTION, HTTP_X_FORWARDED_FOR, X_HTTP_FORWARDED_FOR, HTTP_FORWARDED, X_FORWARDED_FOR, ORIGINAL_REMOTE_ADDR, HTTP_ACCEPT_LANGUAGE, HTTP_USER_AGENT ) VALUES ( '$abeceda', '$cas', '$ip', '".e('REMOTE_ADDR')."', '".e('REMOTE_HOST')."', '".e('REMOTE_NAME')."', '".e('HTTP_FROM')."', '".e('HTTP_CLIENT_IP')."', '".e('HTTP_COMING_FROM')."', '".e('HTTP_X_COMING_FROM')."', '".e('HTTP_VIA')."', '".e('HTTP_PROXY')."', '".e('HTTP_XPROXY')."', '".e('HTTP_PROXY_CONNECTION')."', '".e('HTTP_X_FORWARDED_FOR')."', '".e('X_HTTP_FORWARDED_FOR')."', '".e('HTTP_FORWARDED')."', '".e('X_FORWARDED_FOR')."', '".e('ORIGINAL_REMOTE_ADDR')."', '".e('HTTP_ACCEPT_LANGUAGE')."', '".e('HTTP_USER_AGENT')."' ) "); |
||
Alphard Profil |
#10 · Zasláno: 2. 1. 2010, 21:09:07
[#9] Jakub_007
Tak koukám na tu vaši zabezpečovací funkci a říkám si, proč nepoužijete mysql_real_escape_string(). tiso: „nezdá sa mi použitie {}, v tomto prípade je zbytočné“ Souhlasím s AM. Napsat závorku a apostrof pro mě není takový problém, abych počítal, kolik znaků mohu ušetřit. Subjektivně se mi nelíbí tvá verze. |
||
Jakub_007 Profil * |
#11 · Zasláno: 2. 1. 2010, 21:14:58
Ještě jedna maličkost mi tu zbyla, možná to naprvní pohled úplně nesouvisí, ale pořád se to týká globálního pole $_SERVER.
$data = implode(",", $_SERVER); Sice funguje, leč zobrazuje poznámku (úmyslně zapnuto) a mě by zajímalo, zda to lze napsat ještě "správněji", tak aby proti tomu PHP nic nenamítalo a nebo jestli to nelze. Je to podle příkladu z Manuálu, ale přesto to zobrazí tuhle poznámku. Notice: Array to string conversion in /3w/unas.cz/p/domena/slozka/soubor.php on line 155 |
||
Jakub_007 Profil * |
#12 · Zasláno: 2. 1. 2010, 21:20:57
[#10] Alphard: Protože jsem jí neznal, její použití se jeví jako velmi výhodné v tomto případě, děkuji Vám za radu.
|
||
tiso Profil |
#13 · Zasláno: 2. 1. 2010, 21:56:43
[#8] AM_, [#10] Alphard: ja vám to neberiem... Ako som písal, riešenia pre tretí level sú v podstate 3 ({}, escapovanie, spájanie reťazcov), ja som situáciu zjednodušil na 2 levely, pretože tretí nebol nutný. To je celé.
[#11] Jakub_007: nemáš premennú $data náhodou použitú vyššie v kóde ako premennú typu pole? Okrem toho nemáš náhodou problém s tým, že použitím implode stratíš informáciu o tom, o aké premenné sa v pôvodnom poli jedná? |
||
Jakub_007 Profil * |
#14 · Zasláno: 2. 1. 2010, 23:24:31
[#13] tiso Ne, proměná $data není použita na jiném místě v kódu.
Pravda, to mě nenapadlo, asi neexistuje žádná funkce, který by mi jednoduše vytvořila jednorozměrové pole? Hledal jsem, ale nenašel. |
||
Jakub_007 Profil * |
#15 · Zasláno: 2. 1. 2010, 23:43:13
Takhle jsem to vyřešil, obecné řešení jsem opsal a upravil pro sebe.
$data = ""; reset($_SERVER); while( list($index, $hodnota) = each($_SERVER) ) { if(isset($index) and isset($hodnota)) { $data = $data.$index." = ".$hodnota." || "; } } |
||
tiso Profil |
#16 · Zasláno: 2. 1. 2010, 23:54:28
|
||
Jakub_007 Profil * |
#17 · Zasláno: 3. 1. 2010, 00:35:42
Musím říct, že dnes (ehm, včera...) jsem se toho dost naučil, díky vám. Tak díky za pomoc
|
||
Časová prodleva: 13 let
|
0