| 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: 17 let
|
|||
0