Autor Zpráva
cumikCZ
Profil *
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
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
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
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 *
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 *
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
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 *
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 *
Už jsem to opravil díky moc za rady!
Tori
Profil
Majkl578:
No však jsem psala, že to je jen nápad, neb jsem se s tím nesetkala.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0