Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Login

Aktivity
Avatar
Sxmanek
Člen
Avatar
Sxmanek:24.10.2014 0:23

Zdravím, zkouším udělat login na stránky, ale mám zde problém...
Mám klasicky index.php, kde je user panel(dva stavy pro přihlášené a nepřihlášené).

<?php
if (login() == true) {
    ?>
    <a href="index.php">Home</a><br>
    <a href="profile.php">Profile</a><br>
    <a href="logout.php">Log Out</a>
    <?php
} else {
    ?>
    <a href="index.php">Home</a><br>
    <a href="login.php">Login</a><br>
    <a href="register.php">Register</a>
    <?php
}
?>

Záleží na funkci login() viz...

Záleží na funkci login() viz...

<?php

session_start();

function login(){
    if (isset($_SESSION["user_id"]) && !empty($_SESSION["user_id"]) ) {
        return true;
    } else {
        return false;
    }
}

?>

Data vkládám pomocí formuláře...

<form method="post">
                <?php
                if (isset($_POST["submit"])) {
                    $username = $_POST["username"];
                    $password = md5($_POST["password"]);

                    if (empty("$username") || empty("$password")) {
                        echo "<p>Vyplňte všechna pole!</p>";
                    } else {
                        $check_login = mysql_query("SELECT id,type FROM users WHERE username = '$username' AND password = '$password'");
                        if (mysql_num_rows($check_login) == 1) {
                            $run = mysql_fetch_array($check_login);
                            $user_id = $run["id"];
                            $user_type = $run["type"];
                            if ($user_type == "d") {
                                echo 'Tvůj účet je deaktivován';
                            } else {
                                $_SESSION_ = ["$user_id"];
                                header("location: index.php");
                            }
                        }
                    }
                }
                ?>
                Uživatelské jméno:<br>
                <input type="text" name="username"/><br>
                Heslo:<br>
                <input type="password" name="password"/><br><br>
                <input type="submit" name="submit" value="Login"/>
            </form>

Po přihlášení se přesměruje opět na login.php a je jedno jestli zadám správně login nebo ne.
Problém je, že mě to nepustí přes if (mysql_num_row­s($check_login) == 1)
SQL příkaz je v pořádku.
Když odeberu ověření hesla, přesměruje mě to na index.php beze změny user panelu.

Editováno 24.10.2014 0:25
 
Odpovědět
24.10.2014 0:23
Avatar
Sxmanek
Člen
Avatar
Sxmanek:24.10.2014 0:42

A další problém, že neproběhne ověření, jestli bylo zadáno heslo...takže, když napíšu jen username bez hesla a dám přihlásit, tak to běží v pořádku dál.

 
Nahoru Odpovědět
24.10.2014 0:42
Avatar
Odpovídá na Sxmanek
Michal Štěpánek:24.10.2014 6:07

Nemělo by tam být jen jedno "rovná se"?

if (mysql_num_rows($check_login) = 1) {
Nahoru Odpovědět
24.10.2014 6:07
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Tonda Kozák
Člen
Avatar
Odpovídá na Michal Štěpánek
Tonda Kozák:24.10.2014 6:40

To opravdu ne. Jedná se o podmínku, nikoli o přiřazování hodnoty.

Sxmanek
Zkus si nechat vypsat, co je v

mysql_num_rows($check_login)
 
Nahoru Odpovědět
24.10.2014 6:40
Avatar
Odpovídá na Sxmanek
Neaktivní uživatel:24.10.2014 6:48

Hele, v databázi můžeš mít více stejných řádku, proto raději udělej toto:

if (mysql_num_rows($check_login) >= 1) {

A co se týče hesla, hashování prázdného řetězce ti nevrátí null, takže musíš udělat toto:

if (empty("$username") || empty( $_POST["password"] ))
// Nezahasovane heslo musis overit...
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
24.10.2014 6:48
Neaktivní uživatelský účet
Avatar
Sxmanek
Člen
Avatar
Sxmanek:24.10.2014 12:17

Už jsem to vyřešil :) První chyba byla, že jsem měl špatně jeden řádek

$_SESSION_ = ["$user_id"];

a ta druhá, že md5 vrací 32 znaků řětezec a já měl nastaveno u hesla v databázi max. 30, takže mi to porovnávalo 32 s 30 = vždy 0 shoda. Ale s tím hashováním prázdného řetězce dík.

 
Nahoru Odpovědět
24.10.2014 12:17
Avatar
Snorlax
Tvůrce
Avatar
Odpovídá na Sxmanek
Snorlax:24.10.2014 14:18

Ještě jedna věc, která je tu ohledně PHP vždy oblíbená: Používej PDO. :) Možná je ze začátku těžší na pochopení, ale je to rozhodně dobrá investice. I já si vzpomínám jak jsem přecházel z toho starýho na PDO, ale jsem za to rád. Opravdu o tom uvažuj ;)

Nahoru Odpovědět
24.10.2014 14:18
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
Sxmanek
Člen
Avatar
Odpovídá na Snorlax
Sxmanek:24.10.2014 14:46

Kouknu na to :) PHP ještě moc neumím, takže říkáš, ať se to učím rovnou s PDO?

 
Nahoru Odpovědět
24.10.2014 14:46
Avatar
Snorlax
Tvůrce
Avatar
Odpovídá na Sxmanek
Snorlax:24.10.2014 19:15

Ano. Jak s říká, že starého psa nenaučíš novým kouskům, tak je to pravda. Je to přece logický, přechod na novou technoloii je vždy nějaký problém. Když se PDO naučíš rovnou, nezahltíš si hlavu něčím starým. Přece si taky nezačínal programovat v assembleru, tak proč se učit nějaký starý přístup k db :)

Nahoru Odpovědět
24.10.2014 19:15
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
Sxmanek
Člen
Avatar
Odpovídá na Snorlax
Sxmanek:24.10.2014 20:30

ABych pravdu řek, tak assembler sem se učil :D

 
Nahoru Odpovědět
24.10.2014 20:30
Avatar
Snorlax
Tvůrce
Avatar
Odpovídá na Sxmanek
Snorlax:24.10.2014 20:47

No a jak dlouho ti to vydrželo? :D A mělo to pěkný nevýhody co? Tak proč se učit staré technologie. Ano, někdy to smysl má, ale tohle to není :D

Nahoru Odpovědět
24.10.2014 20:47
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
Sxmanek
Člen
Avatar
Sxmanek:24.10.2014 22:53

Nechce se mi zakládat nové téma, abych nespamoval, zkouším to teda předělat s PDO a mám problém s počtem řádků.

$query = $connection->prepare("SELECT * FROM users WHERE username = ? OR mail = ?");
                        $query = $query->execute(array($username, $mail));
                        $rows = $query->fetchALL(PDO::FETCH_COLUMN, 0);
                        $numrows = count($rows);

Vypisuje chybu:

Fatal error: Call to a member function fetchALL() on a non-object
 
Nahoru Odpovědět
24.10.2014 22:53
Avatar
Sxmanek
Člen
Avatar
Sxmanek:24.10.2014 23:30

Tak už v pořádku :)

 
Nahoru Odpovědět
24.10.2014 23:30
Avatar
mkub
Tvůrce
Avatar
Odpovídá na Sxmanek
mkub:25.10.2014 3:36

na sifrovanie hesiel a inych udajov nepouzivaj MD5, ale inu, lebo uz nie je bezpecna

 
Nahoru Odpovědět
25.10.2014 3:36
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 14 zpráv z 14.