Autor | Zpráva | ||
---|---|---|---|
cumikCZ Profil * |
#1 · Zasláno: 2. 11. 2011, 01:06:29
Zdravím, můžu poprosit o pomoc s uvozovkama? :)
Parse error: syntax error, unexpected T_STRING in ................../1320191749_zkouska_editace/text.php on line 1 a tady je ten řádek kódu kde by měla být chyba: $obsah = "<? \$datum = \"$datum\";\$cas = \"$cas\";\$nick = \"$nick\";\$hlavicka = \"$hlavicka\";\$novinka = \"$novinka\"; ?>"; a tady je cely script :-) <? session_start(); if (session_is_registered("sizn")) { $nick = $_POST['nick']; $cas = $_POST['cas']; $datum = $_POST['datum']; $hlavicka = $_POST['hlavicka']; $novinka = stripslashes($_POST['novinka']); $nahrad = array("\n" => '<br>'); $novinka = strtr($novinka, $nahrad); $path = $_GET["cesta"]; $file = fopen("$path", "w"); $obsah = "<? \$datum = \"$datum\";\$cas = \"$cas\";\$nick = \"$nick\";\$hlavicka = \"$hlavicka\";\$novinka = \"$novinka\"; ?>"; if(fputs($file, "$obsah")) { header("location: edit.php?a=y"); } else { header("location: edit.php?a=ch"); } } else { header("location: index.php?a=r"); } ?> |
||
snake.aas Profil |
#2 · Zasláno: 2. 11. 2011, 07:30:53
chybu v tom nevidím, a ani se mi ji nepodařilo zreprodukovat.... celý skript mi proběhl, takže chyba bude nejspíš někde jinde
ale pár postřehů k tomu kódu ti dám (jestli chceš ;-) ): - session_is_registered by se už nemělo používat, je označena jako deprecated - máš podmínku ověření existence session, ale data taháš z POST požadavku, chtělo by to ověřit i existenci $_POST["..."] - místo té náhrady zalomení řádků, existuje pěkná funkce nl2br - proměnné nemusíš uzavírat do uvozovek ( jako např. fopen("$path"... ) zbytečně přiděláváš serveru práci (ne moc, ale i tak) - používat jako návzy proměnných v url nicneříkající 'a' není sice vyloženě špatně, ale až se k tomu po nějaké době vrátíš, tak budeš prohledávat kód, aby jsi zjistil, co to 'a' vlastně má za význam - a konečně $path = $_GET['cesta'] tu si koleduješ o vážné narušení bezpečnosti, když to nijak nekontroluješ |
||
Joker Profil |
#3 · Zasláno: 2. 11. 2011, 08:02:48
cumikCZ:
Z jakého důvodu „by měla být chyba“ na uvedeném řádku? Podle hlášky je chyba v text.php na řádku 1. Tohle nevypadá jako ten správný skript. K seznamu od snake.aas bych ještě přidal: - Funkce stripslashes by se běžně v kódu vůbec neměla vyskytovat, jediné k čemu je užitečná je odstranění register_globals (což je ovšem třeba navázat na podmínku, že register_globals je zapnuté). - Dát uživateli možnost zadat cestu k souboru do kterého se zapíše je bezpečnostní sebevražda. Sice to už napsal snake.aas, ale přišlo mi to tak důležité, že jsem to zmínil znovu. - Já asi vím jak to má fungovat- Data z formuláře se převedou na to co vidíme v $obsah, to se uloží jako PHP kód do souboru (tipnu, že jde právě o soubor text.php) a ten se potom jako PHP kód (asi přes include) vloží do nějaké stránky. To ovšem nebude fungovat: - - Data od uživatele nejsou ošetřená pro vložení do PHP proměnné, stačilo by jako nick dát " nějaký PHP kód a ten kód se spustí.
- - Jestli to je tak jak si myslím, předchozí odrážka je zároveň příčinou té chyby uvedené v dotazu. - - Jelikož se přiřazuje pořád do stejných proměnných, může to fungovat jen pro jednu novinku. Uložit si data přímo jako PHP vypadá snazší, ale doporučuji nebýt líný, nebát se a naučit se používat nějaký formát uložení dat do souboru (ať už prosté uložení po řádcích, nebo třeba XML) |
||
Tori Profil |
#4 · Zasláno: 2. 11. 2011, 11:09:59
cumikCZ:
Jen tipuju, ale nevkládá vám tam editor BOM signaturu? (viz FAQ) (nevím, jestli by se to projevovalo takto, jen mě to napadlo). |
||
cumikCZ Profil * |
#5 · Zasláno: 2. 11. 2011, 13:52:22
Tori:
byl bych moc rád kdyby to bylo BOM, ale mám vypnute takže ne :( Joker: <? $datum = "01.11.2011";$cas = "23:58:01";$nick = "krki";$hlavicka = "Zkouška editace";$novinka = "<div style="text-align: left;">bla bla bla bla bla bla<br>bla bla bla <br>bla bla bla bla bla bla<br>bla bla bla bla bla bla bla bla bla<br><span style="font-weight: bold;">bla bla bla bla bla bla bla bla bla bla bla bla</span><br>bla bla bla bla bla bla bla bla bla<br>bla bla bla bla bla bla<br>bla bla bla <br>bla bla bla bla bla bla </div>"; ?> tak to je ten řádek 1 ale tohle všechno vzniklo z toho kódu výše :) Joker: snake.aas: Děkuji za rady a samozřejmě je zkusím akceptovat a opravit ;) |
||
cumikCZ Profil * |
#6 · Zasláno: 2. 11. 2011, 14:01:09
Joker:
Jé :) to jsem nějak přehlídl :). Jo samozřejmě máš pravdu tak to má být. takže místo [nick] $nick = $_POST['nick']; mám dát php kód? |
||
Majkl578 Profil |
#7 · Zasláno: 2. 11. 2011, 14:40:14 · Upravil/a: Majkl578
Tori:
Kdyby tam měl BOM, určitě by nezpůsobil tohle, protože by byl ještě před otvíracím tagem. [#5] cumikCZ: Tenhle kód je samozřejmě špatně, jak sis mohl všimnout po odeslání díky zvýrazňovači. <?php $datum = '01.11.2011'; $cas = '23:58:01'; $nick = 'krki'; $hlavicka = 'Zkouška editace'; $novinka = '<div style="text-align: left;">bla bla bla bla bla bla<br>bla bla bla <br>bla bla bla bla bla bla<br>bla bla bla bla bla bla bla bla bla<br><span style="font-weight: bold;">bla bla bla bla bla bla bla bla bla bla bla bla</span><br>bla bla bla bla bla bla bla bla bla<br>bla bla bla bla bla bla<br>bla bla bla <br>bla bla bla bla bla bla </div>'; ?> Nikdy nepoužívej <? , vždy <?php .
Nicméně kód v [#1] je vpodstatě celý špatně, ale to bylo většinou řečeno v [#2] a [#3]. Jen bych dodal, že funkce session_is_registered je odstraněna v PHP 5.4 a kód nebude fungovat. |
||
cumikCZ Profil * |
#8 · Zasláno: 2. 11. 2011, 14:52:13
Majkl578:
no jenže když je tenhle kód špatně tak musí být i špatně ten z #1, poněvadž ten z 1. postu udává jak se zapíše ten z #5 |
||
cumikCZ Profil * |
#9 · Zasláno: 2. 11. 2011, 15:18:18
Už jsem to opravil díky moc za rady!
|
||
Tori Profil |
#10 · Zasláno: 2. 11. 2011, 16:33:44
Majkl578:
No však jsem psala, že to je jen nápad, neb jsem se s tím nesetkala. |
||
Časová prodleva: 12 let
|
0