WEB od 100 kč / ESHOP od 200 kč » OxiWeb.cz
Zobrazují se odpovědi 1 až 13 z 13

Funkce zajišťující chod webu

  1. Zdravím,
    v návaznosti na předchozí téma sem dávám svůj kód. Není to nic světoborného, obyčejný script zajišťující přihlášení uživatele se všemi náležitostmi : připojení k databázi, rozlišení přihlášeného a odhlášeného uživatele, odhlášení uživatele a s tím spojenou funkci zajištující volání jednotlivých funkcí podle uživatelova požadavku a funkci pro odeslání informačního emailu podle zadaných parametrů (registrační email, nové heslo, novinky, atp..)

    Kód:

    Kód:
    <?php
    function connect(){
      include_once "db.php";
      ob_start();
      session_start();
      if(isset($_GET['akce'])){
        akce();
      }
    }
    
    function overeniLoginu(){
      if(isset($_SESSION["log"]) and $_SESSION["log"] == 1  and $_SESSION["log_email"] != false){
        prihlasen($_SESSION["log_email"]);
      }else{
        odhlasen();
      }
     
    }
    
    
    function prihlasen($log_email){
      echo '<div id="prihlaseni">
              <p class="prihlaseni_info"><img src="images/prihlasit_ikona.png" alt="prihlasen" />Vítejte <strong>'.vyber_databze('br_uzivatele','email', $log_email, 'jmeno').'</strong></p>
              <div class="prihlasit">
                <ul>
                  <li><a href="uzivatel_nastaveni.php?id='.vyber_databze('br_uzivatele','email', $log_email, 'id').'">Nastavení</a> |</li>
                  <li><a href="">Správa ploch</a> |</li>
                  <li><a href="?akce=odhlasit">Odhlásit</a></li>
                 </ul>
                </div>
              </div>';
    }
    
    function odhlasen(){
      echo '<div id="prihlaseni">
              <p class="prihlaseni_info"><a href="zapomenute-heslo.php">Zapomenuté heslo</a> | <a href="registrace-noveho-uzivatele.php">Nová registrace</a></p>
              <div class="prihlasit">
                <form action="'.$_SERVER["PHP_SELF"].'" method="post">
                  <input class="prihlasit_input" type="text" value="E-mail..." name="flog_email" onclick="this.value=\'\' " />
                  <input class="prihlasit_input" type="password" value="Heslo..." name="flog_heslo" onclick="this.value=\'\' " />
                  <input class="prihlasit_input_prihlasit" type="submit" value="Přihlásit" name="flog_submit" />
                </form>
              </div>
            </div>';
      if(isset($_POST["flog_submit"])){
        prihlasit($_POST["flog_email"], $_POST['flog_heslo']);
      }  
    }
    
    function prihlasit($flog_email, $flog_heslo){
      $flog_heslo_hash = md5($flog_heslo);
     if(isset($flog_email) and isset($flog_heslo)){
        $query = MySQL_Query("SELECT * FROM `br_uzivatele` WHERE `email` = '".$flog_email."' and `heslo` = '".$flog_heslo_hash."' and aktivace = 'Ano'") or die (mysql_error());
        $db = mysql_fetch_array($query);
        if($db['email']){
          $_SESSION['log_jmeno'] = $db['jmeno'];
          $_SESSION['log_email'] = $db['email'];
          $_SESSION['log'] = 1;   
          header("location: ".$_SERVER["PHP_SELF"]);
        }else{
          echo '<p>Jméno nebo heslo je špatné</p>';
        }
        mysql_free_result($query);
      }
      ob_end_flush();
    }
    
    
    //////////////////////// Práce s databází ////////////////////////
    
    
    function vyber_databze($tabulka,$zamek,$klic,$pozadavek){
      $query = MySQL_Query("SELECT * FROM `".$tabulka."` WHERE `".$zamek."` = '".$klic."'") or die (mysql_error());
      $db = mysql_fetch_array($query);
      return $db[$pozadavek];
    }
    
    function uprav_databazi($tabulka, $zamek, $klic, $pozadavek, $hodnota){
      //Vytvoření dotazi pro update databáze -> $sql_prikaz
      
      MySQL_Query($sql_prikaz);
    }
    
    
    ////////////////////////////////////////////////
    
    function akce(){
      if(isset($_GET["akce"])){
        $akce_get = array(1 => "odhlasit", 2 => "nove-heslo");
        $i = array_search($_GET["akce"], $akce_get);
        if(isset($i)){
          switch($i){
            case 1: 
              odhlasit();
              break;
            case 2:
              if(isset($_POST['reg_email'])){ 
                noveHeslo($_POST['reg_email']);
              }
              break;
          }
        }
      }
    }
    
    function odhlasit(){
      if(isset($_SESSION['log_email']) and $_SESSION['log'] == 1){
        Session_Destroy();
    	}
    	header ("location: ".$_SERVER['HTTP_REFERER']."");
    	ob_end_flush();
    }
    
    function noveHeslo($reg_email){
      // VYTVOŘENÍ NOVÉHO HESLA //
      uprav_databazi('br_uzivatele','email', $reg_email, 'heslo', '$nove_heslo');
      echo "Na email bylo posláno nové heslo";
    }
    
    function posliEmail($komu,$typ){
      $typ_emailu = array(1 => "registrace", 2=> "nove-heslo");
      $i = array_search($typ, $typ_emailu);
      if(isset($i)){
        switch($i){
          case 1: 
            $email_predmet = "Informace o registraci";
            $email_zprava = "";
            break;
          case 2:
            //$email_predmet;
            break;
        }
      }
    }
    ?>
    Přijde mi, že celý kód je hodně dlouhý na to, jak málo zastává funkcí zatím (pouze login a generátor nového hesla)

    Je fakt, že jsem se snažil udělat všechno snadno editovatelné a vlastní funkce na úpravu nebo výtah z databáze, který můžu aplikovat ve většině případů pouze zavoláním dané funkce

    Ale nevím, jestli se tato snaha neminula spíše účinkem...
    Naposledy upravil Ondra Z. : 05.06.2011 v 21:42

  2. Co se právě děje na Webtrhu?
  3. Nodon Hodnocení: 1 (100%) Nodon je zatím velká neznámá
    2
    Proč používáš někdy v indexu polí uvozovky a někdy apostrofy? Konkrétně první řádek funkce overeniLoginu().

  4. Chybka, asi sem se upsal

  5. imin Hodnocení: 5 (100%) imin je na dobré cestě
    4
    Ahoj, ja co bych k tomu rek, nepsal bych si echo do funkce. Ty mas vpostate nejaky menu napsany ve funkcni prihlasit. Coz je celkem nelogicky. Nebo kdyz si logujes uzivatele do session, proc si tam davas email? Nebylo by lepsi pouzit id? Od toho je to id, aby bylo unikatni ke kazdemu uctu. Omezovat se pouze k jedny funkci vyber_databze je podle me zbytecny, klidne si udelej takovych funkcni vic :)

  6. tomik1313 Hodnocení: 2 (100%) tomik1313 je na dobré cestě
    5
    len tak narychlo som pozrel kod a prisla mi do oka zvlastna podmienka
    Kód:
    isset($_SESSION["log"]) and $_SESSION["log"] == 1
    naco 2krat overovat to iste a dalsia vec - uz by som mozno skor napr. ulozil do session id a potom overoval, ci dane id existuje v DB uzivatelov.

    Kód:
    uprav_databazi('br_uzivatele','email', $reg_email, 'heslo', '$nove_heslo');
    echo "Na email bylo posláno nové heslo";
    1 - ak je $nove_heslo v apostrofoch, tak je to string a nie hodnota toho noveho hesla, 2 - na zaklade coho sa vyhodnocuje, ze nove heslo bolo poslane? ziadny return, ziadne overenie, ze najaka funkcia na posielanie bola vykonana

  7. Druhý pokus o napsání odpovědi:

    Největší problémy jsou podle mě
    • Procedurální kód: Voláte metody jako když se odškrtávají položky v nákupním seznamu. Místo toho je spojte do skupin (tříd) podle dat, se kterými manipulují: Session, User atd.
    • Míchání jazyků: PHP obsahuje HTML obsahuje Javascript. Přinuťte se místo toho každému jazyku vyhradit vlastní soubor, nebo alespoň proměnnou.
      HTML nemá v PHP co dělat, Javascript nemá co dělat v HTML.
      Stejně tak konkrétní texty nemají co dělat v HTML! Až budete chtít aplikaci přeložit, bude to velmi obtížné. Místo toho by jazykové stringy měly být na jednom místě, odděleně od aplikace i zobrazení.
    • Neošetření vstupu. $flog_email ve funkci prihlasit().
    • Nekonzistence názvů. Něco je anglicky, něco česky, něco_podtržítkem, něcoCamelCasem. Držel bych se angličtiny a camelCase.

  8. Martine, můžeš to prosím trochu rozvést? Jak se tedy generuje HTML kód pomocí PHP, když HTML nemá v PHP co dělat? Kdo to tvrdí? Myslím kdo konkrétně to tvrdí, ne že se to tvrdí. To není rýpání, prostě se učím a zajímá mě to. Díky za odpověď.

  9. Vyplývá to z těchto dvou principů:
    1. Izoluj, co se mění
    2. Odděl logiku a zobrazování

    Proč?
    Oddělení logiky a zobrazení je užitečné z mnoha důvodů:
    Můžu změnit způsob zobrazování, ale logiku nechat stejnou (aplikace pro web/mobily/konzole ...).
    Nebo chci změnit logiku (třeba vyvinout novou verzi aplikace), ale ponechat staré zobrazení.
    Nebo protože programátor (stará se o logiku) a designér (stará se o zobrazení) jsou málokdy tentýž člověk a potřebují pracovat oba naráz.

    Jak?
    HTML a programovací jazyk od sebe dělí šablonovací systémy.
    Šablona v HTML obsahuje proměnné, které šablonovací systém zamění za skutečnou hodnotu pro danou stránku.
    Někdy může šablonovací jazyk umožňovat jednoduché funkce, třeba procházení polí.

    Stejným principem se oddělí lidský text od HTML - jsou to prostě proměnné (v programu shromážděné na jednom místě), které se dosadí podle zvoleného jazyka.

    HTML a JS se oddělují přes externí soubory a eventy
    http://coding.smashingmagazine.com/2...est-practices/

  10. Procedurální kód: Voláte metody jako když se odškrtávají položky v nákupním seznamu. Místo toho je spojte do skupin (tříd) podle dat, se kterými manipulují: Session, User atd.
    -> Mohl bys toto prosím trochu osvětlit? Nevím jestli jsem správně pochopil hlavní myšlenku mohl bys prosím uvést nějaký příklad?

    K tomu oddělování

    Chceš tím říct, že je správné veškerý psaný obsah volat z nějakých proměnných, popřípadě tahat texty z databáze?

    Pracuji na drobet složitějším inzertním systému a nedokážu si představit žádné elegantní řešení jak tahat jednotlivé texty z databáze nebo volat pomocí proměnných.

    Možná není nejlepší cesta se zdokonalovat na něčem složitém, ale nevím....

    Martine, ještě jestli se mohu ptát, odkud čerpáš takové to informace?

  11. Ondro nejlepsi vysvetleni i s prikladem najdes v jakemkoliv frameworku - Nette, Zend, Kohana... nastuduj si je a nejlip i zacni pouzivat, hned pochopis o cem je rec... delat jakoukoliv vetsi aplikaci tvym stylem tak se asi radsi zastrelim (je to silene) :)

  12. double Hodnocení: 7 (100%) double je na dobré cestě
    11
    Rekl bych, ze Ondrovi framework nepomuze. Tam je vsechno objektove a on je evidentne jeste u proceduralniho kodu. Stejne tak mu radi i Martin (aspon tak jsem to pochopil).

  13. Citace Původně odeslal double Zobrazit příspěvek
    Rekl bych, ze Ondrovi framework nepomuze. Tam je vsechno objektove a on je evidentne jeste u proceduralniho kodu. Stejne tak mu radi i Martin (aspon tak jsem to pochopil).
    to nemusi byt nutne pravda, ja se taky oop php naucil az v dobe kdy jsem presel na framework :) sice jsem mel o objektech povedomi diky delphi, ale proad jsem proadne netusil jak to pouzivat...

  14. Už se chystám s OOP začít dlouho ale furt sem si nenašel čas na učení něčeho nového, teď už se k tomu snad dokopu

Hostujeme u Server powered by TELE3