Anonymní profil šnek – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Anonymní profil šnek – Programujte.comAnonymní profil šnek – Programujte.com

 

Příspěvky odeslané z IP adresy 93.99.138.–

PHP › PHP a pochopení OOP
8. 11. 2018   #382241

#40 Kit
Díky,takže IF{} else{} za


if($user) $where = "WHERE `user` = $user" : $where = null;
 

Podívej se prosím ještě na metody add a edit, jsou tam odlišné zápisy předávání proměnných a psal jsem:

Ten zápis metody add a edit je naschvál - zajímá mě, jestli je mezi tim v praxi rozdíl? Příjde mi totiž přehlednější to mít rovnou v deklaraci proměnných než to posílat jako pole (netbeans mi ukaze, jaky jsou dulezity parametry u metody, kdyz predavam pole, tak ne)

PHP › PHP a pochopení OOP
24. 10. 2018   #382052

#27 Kit
Dobře to s id dává smysl, chtěl jsem jen docílit toho, že se mi automaticky načtou data při volání třídy, když vím, že chci číst data podle id....

Takže rozumím li tomu správně, nemám si vytvářet proměnné jednotlivých dat uvnitř třídy ale přistupovat napřímo  pokud chci vkládat volat rovnou funkci na insert, pokud chci číst, čtu danné id... Mě se v tomhle ztrácí logika, na tohle přece nepotřebuju třídy a stačej mi obyčejné statické funkce?

PHP › PHP a pochopení OOP
5. 10. 2018   #381849

#18 Kit
Takže principielně:

    function login($user, $pass) {
        $dotaz = $this->_db->prepare("SELECT id FROM users WHERE username = ? AND password = ?");
        $dotaz->execute(array($user, $this->hashPwd($pass)));
        
        if($dotaz->rowCount() > 0) {    //Vyfusnem min. 1 řádek, takze zadal login v poradku 
            $data = $dotaz->fetch();
            $this->setId($data["id"]);
        } else {
           //$this->writeError("Chybně zadané údaje!");
           throw new Exception("Chybne udaje!");
       
        }
    }
            if(isset($_POST["user"])) {
                $f_user = $_POST["user"];
                $f_pass = $_POST["pass"];
                try {
                    $user->login($f_user, $f_pass);    
                } catch (Exception $e){
                    echo $e->getMessage();
                }        
            }

je to v pořádku?

Funguje to, spíš mě zajímá, jestli se to takhle dělá i v praxi...

PHP › PHP a pochopení OOP
4. 10. 2018   #381834

#10 Kit
Z jakého důvodu? Zrovna údaje k DB jsou předem danné a nemění se...

Jen mimo OOP - je nějaký velký rozdíl mezi echo a print?:D

PHP › PHP a pochopení OOP
4. 10. 2018   #381831

#8 MilanL
No jo, taková triviální chyba... boha jeho     

PHP › PHP a pochopení OOP
4. 10. 2018   #381829

Mno trošku bojuju....

index: 

<?php
 ini_set("display_errors", 1);
    session_start();
    define('SQL_HOST', 'localhost');
    define('SQL_DBNAME', 'oop');
    define('SQL_USERNAME', 'root');
    define('SQL_PASSWORD', '');

    $dsn = 'mysql:dbname=' . SQL_DBNAME . ';host=' . SQL_HOST . '';
    try {
        $_db = new PDO($dsn, SQL_USERNAME, SQL_PASSWORD);
        $_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch (PDOException $e) {
        die('Connection failed: ' . $e->getMessage());
    }

    include "class/login.php";
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <?php
            $user = new User($_db);
            
            if(isset($_POST["user"])) {
                $user = $_POST["user"];
                $pass = $_POST["pass"];
                $user->login($user, $pass);    
            }

            //$user->login("jakub", "petr");
            //$user->logout();
            if($user->isLogged())  {
                echo "Test OK!";
            } else {
                echo "<form method=\"post\" action=\"\" > ";
                   echo "Jmeno: <input type=\"text\" name=\"user\"  ><br>";
                   echo "Heslo: <input type=\"text\" name=\"pass\"  ><br>";
                   echo "<input type=\"submit\" name=\"btn\"  ><br>";
                echo "</form>";
            }
            
            echo "<br>";
            
            
        ?>
    </body>
</html>

login.php (přejmenuju na users.php)

<?php
include "messages.php";

class User  extends Messages {
    private $id;
    private $_db;
    
    function __construct(PDO $db) {
        if(isset($_SESSION["loginId"])) $this->id = $_SESSION["loginId"]; //pokud sme jiz prihlaseni, tak to rovnou ulozime
        $this->_db = $db;
    }
    function isRegister() {
        $sql = 'SELECT username FROM users LIMIT 1';
        if($this->_db->query($sql)->rowCount() > 0) return true;
        return false;   
    }    
    function isLogged() {
        return isset($_SESSION["loginId"]);
    }
    
    function setId(int $id) {
        $this->id = $id;
        $_SESSION["loginId"] = 100;
    }
    
    function login($user, $pass) {
        $pass = MD5($pass);
        
        $dotaz = $this->_db->prepare("SELECT id FROM user WHERE username = ?, password = ?");
        $dotaz->execute(array($user,$pass));
        
        if($dotaz->rowCount() > 0) {    //Vyfusnem min. 1 řádek, takze zadal login v poradku 
            $data = $dotaz->fetch();
            $this->setId($data["id"]);
            $this->writeSucces("Přihlášeno!");
        } else {
            $this->writeError("Chybně zadané údaje!");
        }
    }
    
    function logout() {
        unset($_SESSION["loginId"]);
        unset($this->id);
    }  
}

Stránka vrací:

Fatal error: Uncaught Error: Call to a member function login() on string in C:\xampp\htdocs\ooplogin\index.php:32 Stack trace: #0 {main} thrown in C:\xampp\htdocs\ooplogin\index.php on line 32

Co mu vadí? K db připojený jsem...

šnek
PHP › PHP a pochopení OOP
4. 10. 2018   #381825

Teď si tu tak trošku píšu sám, omlouvám se :D

napaldo mě tohle řešení, kdy tu instanci předám pomocí konstruktoru do třídy...

    private $id;
    private $_db;
    function __construct(PDO $db) {
        if(isset($_SESSION["loginId"])) $this->id = $_SESSION["loginId"]; //pokud sme jiz prihlaseni, tak to rovnou ulozime
        $this->$_db = $db;
    }
    function isRegister() {
        $sql = 'SELECT username FROM users LIMIT 1';
        if($this->_db->query($sql)->rowCount() > 0) return true;
        return false;   
    }    
    function isLogged() {
        return isset($_SESSION["loginId"]);
    }


Co myslíte?

šnek
PHP › PHP a pochopení OOP
4. 10. 2018   #381824

Další otázka... Pokud správně chápu, třída by měla být nezávislá jiným třídám, jak řešit tahání z DB, když chci používat pdo?

Můžete mi tu prosím udělat příklad jak pomocí PDO udělám funkci na vytáhnutí username z mysql když znám id?

    function getUsername($id) {
        
    }


Jde mi o to, jestli každé volání funkce vytvářet novou instanci s pdo, nebo v hlavičce webu v indexu vytvořit

$db = new pdo(user, pass, db....);

A pak celý projekt používat ve všech třídách pomocí globals $db? přijde mi to jako prasárna...

Případně vytvořit jednu solo třídu, která bude obsluhovat DB? vkládat/tahat data z db? Já vím že tímhle se už dost provokuje MVC, ale potřebuju nejdřív pochopit základy a standarty OOP

šnek
PHP › file_get_contents a chyba př…
21. 9. 2017   #217922

Je tam čistě PHP, které vrací vždy číslo... Je možné, že tam je smetí, jak ho odfiltrovat?

šnek
PHP › file_get_contents a chyba př…
21. 9. 2017   #217919

Zdravím,

tahám pomocí file_get_contents 3 čísla (opravdu to sou jen čísla)

$a = file_get_contents("a.php"); $b = file_get_contents("b.php");

echo $a; //vrátí 10 echo $b; //vrátí 2

echo ($a / $b); //vrátí chybu Warning: Division by zero in ........


Nevíte proč? Díky

.NET › C# změna proměnné v jiné třídě
20. 3. 2013   #173078

Zdravím,

potřebuju v jednom form okně odeslat text do jiného formu (jiné třídy) jak docílit toho, aby se label v okně změnil? zkoušel sem to skrze eventy ale bezúspěšně

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032018 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý