NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Neaktivní uživatel:3.7.2012 20:24

Zdravím mám zase jeden problémek :D
vytvářím web,zaměřený na vtipy - potřebuji rozřazení do kategorií...
pridat.php (hlavičku vypustím)

<h2>Přidat vtip !</h2>
  <form action="pridej.php" method="post">
  <textarea name="vtip" rows="20" cols="60"></textarea>
  Tvoje username <input type="text" maxlength="15" name="username"><br>
  <select title="Vyber...">
  <option name="kategorie" value="../vtipy/kategorie/blondynky/blondynky.txt">Blondýnky</option>
  <option name="kategorie" value="../vtipy/kategorie/doktori/doktori.txt">Doktoři</option>
  <option name="kategorie" value="../vtipy/kategorie/opilci/opilci.txt">Opilci</option>
  <option name="kategorie" value="../vtipy/kategorie/pocitace/pocitace.txt">Počítače</option>
  <option name="kategorie" value="../vtipy/kategorie/policejni/policejni.txt">Policejní</option>
  <option name="kategorie" value="../vtipy/kategorie/programatori/programatori.txt">Programátoři</option>
  <option name="kategorie" value="../vtipy/kategorie/skola/skola.txt">Škola</option>
  <option name="kategorie" value="../vtipy/kategorie/urednici/urednici.txt">Úředníci</option>
  <option name="kategorie" value="../vtipy/kategorie/zvirata/zvirata.txt">Zvířata</option>
  <option name="kategorie" value="../vtipy/kategorie/ostatni/ostatni.txt">Ostatní</option>
  </select> <input type="submit" name="odeslat" value="Přidej !">

  </form>

pridej.php

<?php
$file = $_POST['kategorie'];
if (isset($_POST['odeslat']))
{
        $fo = fopen($file, "a");

        if (fwrite($fo, '<font style="text-align: center;">************************************</font>' . $_POST['vtip'] . '<br>By ' . $_POST['username']))
                echo ('Vtip úspěšně přidán !');
        else
                echo (' Vtip nepřidán,někde nastala chyba...:(');

        fclose($fo);
}
?>

a error při (ne)vložení

Warning: fopen(): Filename cannot be empty in /home/users/birdsoftware/bobikpage.cz/sub/vtipy/service/login/pridej.php on line 12 Warning: fwrite() expects parameter 1 to be resource, boolean given in /home/users/birdsoftware/bobikpage.cz/sub/vtipy/service/login/pridej.php on line 14 Vtip nepřidán,někde nastala chyba...:( Warning: fclose() expects parameter 1 to be resource, boolean given in /home/users/birdsoftware/bobikpage.cz/sub/vtipy/service/login/pridej.php on line 19

..hlavičku jsem odřízl takže není možné si odpočítat řádky...
první error zde

$fo = fopen($file, "a");

druhý zde

if (fwrite($fo, '<font style="text-align: center;">************************************</font>' . $_POST['vtip'] . '<br>By ' . $_POST['username']))

třetí zde

fclose($fo);

předem dík...

Odpovědět
3.7.2012 20:24
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:3.7.2012 20:45

Jsi nepoučitelný šílenec. Takový web ti bude fungovat možná pár dní a někdo ti ho rozbije. Proč nepoužiješ databázi? S ní to bude jednodušší, rychlejší a bezpečnější.

Abych byl konkrétní: Nechat si poslat v parametru jméno souboru, do kterého se bude v zápětí zapisovat, je sebevražda.

Nahoru Odpovědět
3.7.2012 20:45
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Nahoru Odpovědět
3.7.2012 20:46
Neaktivní uživatelský účet
Avatar
Odpovídá na Kit
Neaktivní uživatel:3.7.2012 20:47

a když už tak je to moje stránka,ne tvoje. já říkám že pro mě je SQL těžké. ty se to možná naučíš za 2 dny,ale já ne ! tak zkus taky trochu myslet...

Nahoru Odpovědět
3.7.2012 20:47
Neaktivní uživatelský účet
Avatar
Odpovídá na Kit
Neaktivní uživatel:3.7.2012 20:48

kdybych chtěl hodnocení webu tak to dám do kritiky,jenže já to dal na fórum,protože chci poadit

Nahoru Odpovědět
3.7.2012 20:48
Neaktivní uživatelský účet
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na Neaktivní uživatel
David Jančík:3.7.2012 20:52

Prostuduj si sekci PHP ;)
Pokud nemáš dobrý důvod k tomu dělat něco špatně, tak dej přednost správnému řešení a jak ti Kit již několikrát pokynul, použij databázi. Ušetříš se mnohým trablím a zjistíš, že práce s ní je velmi jednoduchá a efektivní :)

Nahoru Odpovědět
3.7.2012 20:52
Zapomeň, že je to nemožné a udělej to ;)
Avatar
Shift
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Shift:3.7.2012 20:52

Musím ale s Kitem souhlasit, dá se to obejít a nedělá to potom dobře i z hlediska bezpečnosti

Nahoru Odpovědět
3.7.2012 20:52
Don't kill and don't be killed, alright? That's the best you can strive for.
Avatar
Odpovídá na Neaktivní uživatel
Drahomír Hanák:3.7.2012 20:54

Tady bych souhlasil s Kitem. Databáze v PHPčku (třeba MySQL) jsou tak strašně jednoduché, že je úplně triviální je používat. Myslím, že je dost zřejmé, proč nepředávat parametrem jméno souboru, do které budeš zapisovat... Zkus se podívat jen na definice funkcí v PHP začínajících mysql_*. Většinou předáváš pár jasných parametrů. Pokud bys potřeboval pomoct s databází, vždycky se tu můžeš zeptat a někdo ti poradí, ale na tohle používat soubory je celkem sebevražda.

 
Nahoru Odpovědět
3.7.2012 20:54
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:3.7.2012 21:05

Už jsme tady probrali několikrát, jak je nutné použití funkce htmlspecialchars() při generování HTML z textu od uživatele a přesto to ignoruješ.

Ta kritika byla konstruktivní. Představ si, že by někdo jako název souboru dal "cervik.php" a jako text vtipu dal exploit. A máš nechtěného admina.

Však nemusíš použít SQL databázi.

Aspoň si ošetři ta vstupní pole. Je úplně zbytečné do "kategorie" dávat cestu k souboru, tu si přece doplníš v aplikaci po provedení basename() a příponu také.

Ten soubor se ti neotevřel, protože tu cestu máš chybně.

A chybí ti header('Location: ...') na konci skriptu pridej.php. Ale to už jsme také probírali.

Nahoru Odpovědět
3.7.2012 21:05
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Tato diskuze byla označena moderátorem jako nekonstruktivní a myslíme si, že nemá pro veřejnost příliš vysokou hodnotu. Členy můžete samozřejmě stále oslovit soukromě a to formou zpráv nebo chatu.

Zobrazeno 9 zpráv z 9.