Avatar
FastNode
Redaktor
Avatar
FastNode:

Ze všeho nejdřív chci omluvit za špagety. Mám pro to důvod.

A teď k věci. Z ničeho nic se mi na stránce objevila mezera, která mi kompletně ničí layout. Nechápu kde se bere (viz. zdroják a obrázky) a zoufale prosím znalce o pomoc:

index.php
      <!-- = KONEC MENU = -->
      <!-- = START OBSAH = -->
      <div id="content">
        <h2><?=$title?></h2>
        <div id="padder">
<?
  include $include;
  echo "\n"; // <<== Tímhle to není
?>

        </div>
      </div>
      <!-- = KONEC OBSAH = -->
      <div class="cleaner"></div>
    </div>
inkludovaný soubor
<?
  if(pre(7)) echo '<p><a class="edit new" href="#">Přidat nový příspěvek</a></p>';
  $db_link = db_connect();
  if(isset($_POST['title'])&&isset($_POST['atext']))
  {
    if(isset($_POST['delete']))
      db_query('DELETE',null,'articles','aid='.$_POST['aid']);
    else
      if(is_numeric($_POST['aid']))
        db_query('UPDATE',array('title'=>$_POST['title'],'content'=>$_POST['atext'],'edited'=>$_SESSION['nick']),'articles','aid='.$_POST['aid']);
      else
        db_query('INSERT',array('title'=>$_POST['title'],'content'=>$_POST['atext'],'author'=>$_SESSION['nick'],'time'=>strftime('%Y-%m-%d %H:%M:%S', time())),'articles');
  }
  $db_result = db_getdata('value','settings',false,'SID=1');
  $db_line = db_getdata('*','articles',false,'aid=0');
  echo '<article style="width:500px">';
  if(pre(7))
    echo '<a class="edit 0 ebtn " href="#">Upravit</a>';
  echo '
  <h3>'.$db_line['title'].'</h3>
  <div class="text">
    <p>'.$db_line['content'].'</p>
  </div>
</article>
  ';
?>
<div class="spacer"></div>
<article style="width:210px">
  <h3>Průměrné zkušenosti</h3>

/* atd... */

Editováno 19.9.2013 21:52
 
Odpovědět  -1 19.9.2013 21:49
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na FastNode
Petr Nymsa:

Nevím jaký důvod máš ke "spaghetti-code". V PHP tolik nedělám, takže moc neporadím ... ale to tvoje je téměř nečitelný kód...

Nahoru Odpovědět  -1 19.9.2013 21:59
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Filip Pýrek
Redaktor
Avatar
Filip Pýrek:

Vlož odkaz na web nebo co css-float?

Editováno 19.9.2013 22:00
Nahoru Odpovědět 19.9.2013 22:00
„The best way to predict the future is to invent it.“ — Alan Kay
Avatar
FastNode
Redaktor
Avatar
Odpovídá na Petr Nymsa
FastNode:

Já vím, objektovou verzi dělám taky, ale tohle má přednost...

 
Nahoru Odpovědět 19.9.2013 22:02
Avatar
Kit
Redaktor
Avatar
Odpovídá na FastNode
Kit:

Vůbec se mi v tom nechce hrabat. Jen s hrůzou domýšlím, co asi dělají řádky

db_query('DELETE',null,'articles','aid='.$_POST['aid']);
db_getdata('value','settings',false,'SID=1');

apod.

Nahoru Odpovědět 19.9.2013 22:06
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na FastNode
Petr Nymsa:

Ve FF to funguje korektně. Bude problém v CSS ;) A tuhle hrůzu jsi ani ukazovat nemusel :)

Nahoru Odpovědět 19.9.2013 22:09
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Honza Bittner
Redaktor
Avatar
Odpovídá na FastNode
Honza Bittner:

chyba je asi v <div id="padder">
http://prntscr.com/1s9hi7

Editováno 19.9.2013 22:12
Nahoru Odpovědět 19.9.2013 22:11
Ptejte se mě na cokoli na https://github.com/HoBi/ama a followujte mě na Twitteru https://twitter.com/tenhobi. :-)
Avatar
FastNode
Redaktor
Avatar
FastNode:

Děkuji za rychlé reakce. Já vím že je to humus, ale mám pro to důvod. Tak se omlouvám za šok.

Chybu už jsem našel. Vznikla editací stejného souboru v Debianu a ve Windows, kódování se změnilo na UTF-8 BOM. Změna kódování vše vrátila zpátky.

 
Nahoru Odpovědět 19.9.2013 22:40
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na FastNode
David Čápka:

A jaký máš přesně důvod k tomu mít v kódu SQL injekce?

Nahoru Odpovědět  +1 20.9.2013 9:07
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
FastNode
Redaktor
Avatar
Odpovídá na David Čápka
FastNode:

SQLi mám v části aplikace, kam mají přístup pouze tři lidi, které znám, zbytek mám ošetřený strip_tags a addslashes.

Důvodem ke špagetám je dlouhá doba vývoje. Články o OOP jsem si dočetl teprve nedávno a když jsem ostatním oznámil, že web budu dělat už podruhé od znova ještě dalšího půl roku, jsem se rozhodl docvakat tuhle špagetovou verzi, co nejdříve vystavit a pustit se do OOP.

 
Nahoru Odpovědět 20.9.2013 10:52
Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:

Pokud používáš addslashes, tak to ošetřené nemáš, protože ten to neošetřuje. SQL injekce je nebezpečná všude, je jedno že si myslíš, že k tomu není přístup. A hlavně je na hodinu času to opravit.

Nahoru Odpovědět  +3 20.9.2013 10:54
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
jan.vencl
Redaktor
Avatar
Odpovídá na FastNode
jan.vencl:

Ahoj, byl jsem v podobné situaci jako ty. Dodělával jsem jednu věc protože oop jsem uměl jen základy, ale upřímně ti radím, všeho nech , zkoukni sdracův seriál o mvc, přečti nějaké články o OOP, session injekci, sql injekci a budeš šťastnej že jsi to udělal. Já teď lituju 9-10 měsíců kdy jsem psal špagetovej kód.

 
Nahoru Odpovědět  +1 21.9.2013 9:10
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

Souhlasím skoro se vším, kromě té hodiny. Vyměnit addslashes za mysql_real_es­cape_string je práce na pár sekund až minut.

Nahoru Odpovědět 21.9.2013 9:18
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

To jo, ale v tom kódu je i:

db_query('DELETE',null,'articles','aid='.$_POST['aid']);
:D
Nahoru Odpovědět 21.9.2013 9:36
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

Na tento nesmysl jsem upozornil výše. Nevím, co lidi vede k tomu používat takovou slátaninu místo byť stále zastaralého, ale daleko přehlednějšího

mysql_query("DELETE FROM articles WHERE aid=" . (int)$_POST['aid']);
Nahoru Odpovědět  +1 21.9.2013 9:46
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

Třeba na insert je ta metoda super, můžu tam předat rovnou pole z postu. Na delete ji také nechápu :)

Nahoru Odpovědět 21.9.2013 9:54
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

To je nějaký framework? Něco podobného jsem našel v Drupalu, ale mělo to jiné pořadí parametrů.

Nahoru Odpovědět 21.9.2013 9:58
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

Když už bych nějaký takový framework dělal, asi bych šel jinou cestou:

db_insert('articles', array('title' => $_POST['title']));
db_select('articles', '*', array('aid' => $_POST['aid']));
db_delete('articles', array('aid' => $_POST['aid']));
db_update('articles', array('title' => $_POST['title'], array('aid' => $_POST['aid']));
Editováno 21.9.2013 10:12
Nahoru Odpovědět  +2 21.9.2013 10:11
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
FastNode
Redaktor
Avatar
Odpovídá na Kit
FastNode:

Mám to tak kvůli ošetření MySQL chyb, nebavilo mě pokaždé psát "or die(db_error(mys­ql_error()))"

Ale souhlasím, je to prasárna. Články už přečtené mám, teď musím celý web navrhnout na papír a pak začnu psát.

A framework to opravdu není.

 
Nahoru Odpovědět 21.9.2013 18:34
Avatar
Kit
Redaktor
Avatar
Odpovídá na FastNode
Kit:

K čemu je dobré to "or die(..."? Nikdy to nepoužívám.

Nahoru Odpovědět 21.9.2013 18:38
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
FastNode
Redaktor
Avatar
Odpovídá na Kit
FastNode:

Při MySQL chybě zastaví skript a vykoná kód v závorkách: buď vypíše text nebo spustí fuknci.

 
Nahoru Odpovědět 21.9.2013 18:40
Avatar
Kit
Redaktor
Avatar
Odpovídá na FastNode
Kit:

Není jednodušší vyskočit z bloku nebo funkce a zpracovat to standardně jako chybu, případně se z ní zotavit? To kvůli tomu ukončíš celý rozpracovaný skript?

Nahoru Odpovědět 21.9.2013 18:46
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
FastNode
Redaktor
Avatar
Odpovídá na Kit
FastNode:

To nevadí, pokud vznikne chyba, přesměruju uživatele headerem na chybovou stránku.

Ale asi máš pravdu, nemá smysl abych se tu hádal s někým chytřejším a zkušenějším.

 
Nahoru Odpovědět 21.9.2013 18:54
Avatar
Kit
Redaktor
Avatar
Odpovídá na FastNode
Kit:

Nauč se používat PDO a práci s výjimkami. V PHP 5.5 byla funkce mysql_query() odstraněna.

Nahoru Odpovědět 21.9.2013 19:02
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
FastNode
Redaktor
Avatar
Odpovídá na Kit
FastNode:

Ok, díky za info. Jak jsem psal, tohle během krátké doby dodělám a vrhnu se na objekty.

 
Nahoru Odpovědět 21.9.2013 23:03
Avatar
Kit
Redaktor
Avatar
Odpovídá na FastNode
Kit:

Když objekty, tak třeba takto:

$db->insert('articles', array('title' => $_POST['title']));
$db->select('articles', '*', array('aid' => $_POST['aid']));
$db->delete('articles', array('aid' => $_POST['aid']));
$db->update('articles', array('title' => $_POST['title'], array('aid' => $_POST['aid']));

ale stejně mám nejraději klasické SQL dotazy, které mi připadají elegantnější

$db->query("INSERT INTO articles (title) VALUES (?)", array($_POST['title']));
$db->queryOne("SELECT * FROM articles WHERE aid=?", array($id));
$db->queryAll("SELECT * FROM articles");
$db->query("DELETE FROM articles WHERE aid=?", array($_POST['aid']));
$db->query("UPDATE articles SET title=? WHERE aid=?", array($_POST['title'], $_POST['aid']));

atd. Stačí si jen trochu upravit PDO viz návod na devbooku.

Nahoru Odpovědět  +1 22.9.2013 9:34
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ší. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 27 zpráv z 27.