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.–

MySQL › Indexace tabulky pro rychlé…
před 12 hodinami   #382816

Neni to tajný, ruian poskytuje tyto záznamy v csv veřejně a pomocí scriptu je importuju do DB:

function loadFile($fileName, $_db) {
    $folder = "csv";    
    $file = "$folder/$fileName";
    $handle = fopen($file, "r"); 
    try { 
        $query_ip = $_db->prepare('
            INSERT INTO adresni_mista (kod_adm,kod_obce,nazev_obce,c,nazev_momc,b,nazev_mop,kod_casti_obce,nazev_casti_obce,kod_ulice, nazev_ulice,typ_so,cislo_domovni,cislo_orientacni, znak_cisla_orientacniho, psc,souradnice_y,souradnice_x,plati_od) VALUES (
                ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?           
            )
        ');

        // unset the first line like this       
        fgets($handle);

        // created loop here
        while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
            $query_ip->execute($data);
        }       

        fclose($handle);

    } catch(PDOException $e) {
        die($e);
    }
  
}
//nejdriv promazem db
$prep = $_db->prepare("TRUNCATE `ruian`.`adresni_mista`");
$prep->execute();


$files = scandir("csv");
foreach ($files as $file) {
    $pripona= substr($file, -4);
    if($pripona == ".csv") {
        loadFile($file, $_db);
    }
}

tabulka:

CREATE TABLE IF NOT EXISTS `adresni_mista` (
`id` int(11) NOT NULL,
  `kod_adm` int(11) NOT NULL,
  `kod_obce` int(11) NOT NULL,
  `nazev_obce` char(70) COLLATE utf8_czech_ci NOT NULL,
  `nazev_momc` text COLLATE utf8_czech_ci NOT NULL,
  `nazev_mop` text COLLATE utf8_czech_ci NOT NULL,
  `kod_casti_obce` int(11) NOT NULL,
  `nazev_casti_obce` text COLLATE utf8_czech_ci NOT NULL,
  `nazev_ulice` char(80) COLLATE utf8_czech_ci NOT NULL,
  `typ_so` text COLLATE utf8_czech_ci NOT NULL,
  `cislo_domovni` text COLLATE utf8_czech_ci NOT NULL,
  `cislo_orientacni` int(11) NOT NULL,
  `znak_cisla_orientacniho` text COLLATE utf8_czech_ci NOT NULL,
  `psc` int(11) NOT NULL,
  `souradnice_y` text COLLATE utf8_czech_ci NOT NULL,
  `souradnice_x` int(11) NOT NULL,
  `plati_od` datetime NOT NULL,
  `a` varchar(100) COLLATE utf8_czech_ci NOT NULL,
  `b` varchar(100) COLLATE utf8_czech_ci NOT NULL,
  `c` varchar(100) COLLATE utf8_czech_ci NOT NULL,
  `d` varchar(100) COLLATE utf8_czech_ci NOT NULL,
  `kod_ulice` int(11) NOT NULL
)


A vlastně momentálně co reálná adresa, to řádek.

Uvažuju nad rozdělením:

Tabulka Města ID(int), nazev(char 50). psc(int 5)
Tabulka adresy: ID(int), mesto(int), ulice (char 70), čp (int), čo(int), x(int),y(int)

A nejdřív bych podle naštěpávače chtěl po uživateli zadat město, těch by už němělo být 3mil, a v druhém formuláři bych teprve hledal adresy podle toho města... Jen ještě nevím podle jaké topologie v naštěpávači vyhledávat ulici, čp/čo zároveň....

V principu chci docílit toho, aby uživatel co nejjednodušeji vyplnil svojí adresu (jen existující podle ruianu)...

Samozřejmě bych ho mohl donutit napsat celou adresu a pak mu dát na výběr 5 nejlepšíc shod, ale to je pro uživatele dost nekomfortní

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 © 20032019 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý