Mám problém s double přihlašováním – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Mám problém s double přihlašováním – PHP – Fórum – Programujte.comMám problém s double přihlašováním – PHP – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
jAkErCZ0
Newbie
16. 10. 2014   #1
-
0
-

Zdravím, nevím čím to je ale již minule jste mi tu dobře poradily ale teď již nastal jiný problém... a to ten že pokut se chci přihlásit do login panelu tak musím 2x což myslím musím 2x zadat jméno a heslo než mě to logne... nevím čím to je chci aby prostě uživatel napsal heslo a jméno dal ENTER a nebo klikl na button a lognul jse jenže to tak nefunguje a nevím čím...

[spoiler]

<?php

  if($_SESSION['id'] == false)
  {
    echo "       
          <a href='#' alt='Registrace'><img src='./images/register.png' id='registrace'></a>
          <a href='#' alt='Zapomenuté heslo'><img src='./images/heslo.png' id='heslo'></a>
         
          <form action='' method='POST'>
         
          <input type='text' value='' name='nick' required />
          <input type='password' value='' name='heslo' required />
          <input type='submit' name='login' value='' required>
         
          </form>
          
    ";
   
    if(isset($_POST["login"]))
    {
            $nick = mysql_real_escape_string($_POST["nick"]);
            $heslo = md5(md5($_POST['heslo']));
         
           
            $dotaz = "SELECT * FROM accounts WHERE nick='".$nick."' AND heslo='".$heslo."' LIMIT 1"; 
            $pdotaz=mysql_query($dotaz);
           
            if($pdotaz)
            {
                    if(mysql_num_rows($pdotaz) == 1)
                    {
                            //session_regenerate_id();
                            $user = mysql_fetch_assoc($pdotaz);
                            $ban = $user['ban'];
                           
                            if($ban==0){
                                 
                                  $_SESSION['id'] = $user['id'];
                                  $_SESSION['nick'] = $user['nick'];
                                  session_write_close();
                                  $lastlogin = date(' d.m.Y ')."/".date(' H:i:s ');
                                  $lastloginSQL = "UPDATE `accounts` SET `last-login`='".$lastlogin."' WHERE nick='".$nick."' LIMIT 1";
                                  mysql_query($lastloginSQL);
                                  $_SESSION['lastl'] = $lastlogin;
                                 
                                  }else if($ban==1){
                                 
                                  echo "<h1><FONT color='#FF0000'><b>Účet nebyl aktivován!</b></FONT></h1>";
                                  header("location: logout.php");
                                 
                                  }else if($ban==2){
                                 
                                  echo "<h1><FONT color='#FF0000'><b>Tento účet je zablokován!</b></FONT></h1>";
                                  header("location: logout.php");
                                 
                                  }
                   
                    }
                    else
                    {
                            echo "<div ='error_log'>Chybné údaje!</div>";
                    }
            }
            else
            {
                    echo "Login selhal, opakuj akci!\n";
            }
    }
  }
 
  else if($_SESSION['id'] == true)
  {
    $dotaz = "SELECT * FROM accounts WHERE nick='".mysql_real_escape_string($_SESSION['nick'])."' LIMIT 1";
    $pdotaz=mysql_query($dotaz);
    if($pdotaz)
    {
          if(mysql_num_rows($pdotaz) == 1)
          {
            //session_regenerate_id();
            $user = mysql_fetch_assoc($pdotaz);
            $avatar = $user['avatar'];
            $admin = $user['admin'];
            $vip = $user['vip'];
            $_SESSION['id'] = $user['id'];
            $_SESSION['nick'] = $user['nick'];
            session_write_close();
            }
    }
    echo "
                    <div id='lg_avatar'><img src='".$avatar."' width='45px' height='45px' border='1' /></div>
           <div id='lg_name'><font color='white'>Přihlášen: </font><a href='profil.php?name=".$user['nick']."'>  ".$user['nick']."</a> ";
                   if($vip==1){
                          echo "<img src='./images/post/star.png' style='margin: 2px 1px;'>";
                    }
    echo"  </div>   
                    <div id='lg_nast'>
                    <a href='".$GLOBALS['web_url']."/rs2/nastaveni.php'>Nastavení</a> |</div>";
                  
                    if($admin==1){
                          echo "<div id='lg_admin'><a href='".$GLOBALS['web_url']."/rs2/admin/main.php'>Administrace</a></div>";
                    }
                    echo "
                    <div id='lg_odh'><a href='".$GLOBALS['web_url']."/rs2/logout.php'><img src='./images/post/odhlasit.png'></a></div>
    ";
  }
?>  

[/spoiler]

a další takový menší promlém je v tom že každý uživatel má jinak postavené ikony v login panelu ... a to už vůbec nechápu... zde přikládám náhled --->

[spoiler]

Připojen obrázek.

[/spoiler]

Vše předem děkuji za pomoc

Nahlásit jako SPAM
IP: 85.71.70.–
Reklama
Reklama
peter
~ Anonymní uživatel
2551 příspěvků
16. 10. 2014   #2
-
0
-

* Nevidim tam session_start(), presto pozivas $_SESSION.
* Nevidim tam ob_start(), ikdyz pouzivas primy vystup pres echo
* kdyz je session id false, tak vypis prihlasovaci formular a soucasne kontrolujes $_POST["login"] ? Proc tedy vypisujes formular, kdyz jeste nevis, zda se uzivatel prihlasil ci ne?
Proc id nekontrolujes pres isset?
Proc mas if ($a==true) {...} else {if ($a==false) ...} ? Celkem logicky, kdyz to neni true, tak v else bude false. Naplnujes to jako $_SESSION['id'] = $user['id']. Pokud by nastal jiny stav, tak ten uz nemas podchyceny, tak bych tam to porovnani na false uz nedaval.

Cili, ja si myslim, ze ne tak uplne rozumis tomu, co se prave odehrava a neumis spravne napsat k tomu if. Zkus si vzit tuzku a papir a rozepsat si to bod po bodu, co se kdy ma zobrazit, kdyz uzivatel neco udela.
1. prazdny formular
2. uzivatel vyplni udaje a odesle
3. precist data uzivatele, zjistit, zda se prihlasi
4. Neni prihlasen, vypsat prazdny formular.
Je prihlasen, vypsat prihlasen nebo aspon tlacitko Odhlasit. Nevypisovat formular.
Ty to mas udelane ted tak, ze se vypise formular. Pak overi prihlaseni. Cili, staci se prihlasit jednou a pak kliknout na nejaky odkaz a formular zmizi. Kdyz kliknes ale na tlacitko prihlasit s prazdnym formularem, tak te to odhlasi, tak tam radeji neklikat.

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:6ce7:76...–
peter
~ Anonymní uživatel
2551 příspěvků
16. 10. 2014   #3
-
0
-

Jo, a taky mi neni jasne, proc prihlaseni overujes 2x, 2x select. Proste, v prvni rade bych zjistil, zda je neco v post. Z da to neco je nick a heslo. Kdyz ano, tak tak zavolam funkci, ktere predam jmeno a heslo. Kdyz ne, tak zkusim totez pro udaje se session. A potom vsem bych teprve spoustel dotaz, je prihlaseny, neni. Neni formular, je zobraz info o uzivateli a tlacitko odhlasit.
Taky jako nevidim moc bezpecne presunovat v session nick a id jako identifikaci uzivatele. Session se da podstrcit a pak bych se snadno prihlasil jako admin, jen pres adminovo id a nick. Heslo uz znat nemusi, to tam neoverujes. Stacilo by mi teda prihlasit se jako obycejny uzivatel, padelat udaje v session a pak si muzu delat, co se mi zlibi :)

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:6ce7:76...–
jAkErCZ0
Newbie
16. 10. 2014   #4
-
0
-

No vidím že php rozumíš víc než já takže jak tedy si to opravím tak aby mi tam nemohl nikdo dostat a přitom by to fungovalo tak jak chci?

A plus ten session_start ten mám v header.php ten login tam je includovaný..

Nahlásit jako SPAM
IP: 85.71.70.–
Kit+11
Guru
16. 10. 2014   #5
-
0
-

#4 jAkErCZ
header.php nemáš nikde includovaný.

Formulářům je nejlépe na konci skriptu. Vypisují se pak pouze pokud uživatel není přihlášen.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
jAkErCZ0
Newbie
16. 10. 2014   #6
-
0
-

To je dobrá rada :) a jak udělám aby to tedy fungovalo víte php začínám a snažím se to pochopit :)

Nahlásit jako SPAM
IP: 85.71.70.–
Kit+11
Guru
16. 10. 2014   #7
-
0
-

#6 jAkErCZ
Máš to zbytečně komplikované a příliš dlouhé řádky. Musel bych to trochu zredukovat, abych se v tom vyznal. Beztak je polovina řádek zbytečných.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
jAkErCZ0
Newbie
16. 10. 2014   #8
-
0
-

A jak by to šlo zregulovat? 

Nahlásit jako SPAM
IP: 85.71.70.–
Kit+11
Guru
16. 10. 2014   #9
-
0
-

#8 jAkErCZ
Určitě bych zlikvidoval všechny ty zbytečné "else", tím se zredukuje odsazení. I prázdné řádky jsou tam zbytečné, těch "echo" je tam také příliš.

Obvykle si v editoru nastavuji taby na 4 mezery. Ten kód pak vpravo nepřetéká. Doporučuje se nedělat hlubší odsazení než na 4 úrovně - raději jen 3. Vše kvůli čitelnosti.

Až se dostanu ke svému PC, tak ti to trochu předělám.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
jAkErCZ0
Newbie
16. 10. 2014   #10
-
0
-

Díky moc :) konečně někdo kdo mi poradí a trošku urovná můj kód a plus naučí pár nových věcí :)

Nahlásit jako SPAM
IP: 85.71.70.–
Kit+11
Guru
16. 10. 2014   #11
-
0
-

#10 jAkErCZ
To víš, zrovna sedím u PC, které nemá ani pořádný textový editor. Je to jen taková herní konzole, tuším W7.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
jAkErCZ0
Newbie
16. 10. 2014   #12
-
0
-

Aha :) chápu bylo by super kdyby si mi s tím pomohl :) hele nemáš třeba skype nebo něco kde se můžem domlouvat? víš abych nemusel třeba psát stále sem.

Nahlásit jako SPAM
IP: 85.71.70.–
Kit+11
Guru
16. 10. 2014   #13
-
0
-

#12 jAkErCZ
Skype nepoužívám. Nemám důvod.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
jAkErCZ0
Newbie
16. 10. 2014   #14
-
0
-

No hele již jsem to zredukoval.... a přihlašuje mě to už poprvé jenže mě to přihlášeného nenechá prostě jakmile aktualizuji stránku tak mě to odhlásí a opět sem nucen zadat heslo a login čím to může být?

<?php
/*
=====================================================
 WGRS - Copyright (C) 2014 JSoft
 Autor - Jenkings
 Optimalizace a Úprava - jAkErCZ
-----------------------------------------------------
 http://war-game.eu
=====================================================
 File: login.php
=====================================================
*/

  if(isset($_POST["login"]))
  {
     $nick = mysql_real_escape_string($_POST["nick"]);
     $heslo = md5(md5($_POST['heslo']));
         
           
    $dotaz = "SELECT * FROM accounts WHERE nick='".$nick."' AND heslo='".$heslo."' LIMIT 1"; 
    $pdotaz=mysql_query($dotaz); 
    
    if($pdotaz) 
    {
      if(mysql_num_rows($pdotaz) == 1) 
      {
        $user = mysql_fetch_assoc($pdotaz);
        
        if($ban==0){ 
        //session_regenerate_id();
        $avatar = $user['avatar'];
        $admin = $user['admin'];
        $vip = $user['vip'];
        $ban = $user['ban'];        
        $_SESSION['id'] = $user['id'];
        $_SESSION['nick'] = $user['nick'];
        session_write_close();
        $lastlogin = date(' d.m.Y ')."/".date(' H:i:s ');
        $lastloginSQL = "UPDATE `accounts` SET `last-login`='".$lastlogin."' WHERE nick='".$nick."' LIMIT 1";
        mysql_query($lastloginSQL);
        $_SESSION['lastl'] = $lastlogin;


       
        echo "
            <div id='lg_avatar'><img src='".$avatar."' width='45px' height='45px' border='1' /></div> 
  					<div id='lg_name'><font color='white'>Přihlášen: </font><a href='profil.php?name=".$user['nick']."'>  ".$user['nick']."</a> ";
    if($vip==1){
              echo "<img src='./images/post/star.png' style='margin: 2px 1px;'>";
            } 
        echo"  </div>    
            <div id='lg_nast'>
            <a href='".$GLOBALS['web_url']."/rs2/nastaveni.php'>Nastavení</a> |</div>";
           
    if($admin==1){
        echo "<div id='lg_admin'><a href='".$GLOBALS['web_url']."/rs2/admin/main.php'>Administrace</a></div>";
                } 
        echo "
            <div id='lg_odh'><a href='".$GLOBALS['web_url']."/rs2/logout.php'><img src='./images/post/odhlasit.png'></a></div>
    ";
                }
    if($ban==1){
                  
        echo "<h1><FONT color='#FF0000'><b>Účet nebyl aktivován!</b></FONT></h1>";
                  header("location: logout.php");
                  
                }
    if($ban==2){
                  
        echo "<h1><FONT color='#FF0000'><b>Tento účet je zablokován!</b></FONT></h1>";
                  header("location: logout.php");
                  
                  }    
    
      }else{
      echo "Chybné údaje!";
      }
    
     } 
     }else{
    /*---------- HTML ------------------------------------------------------- */
    echo "      
      <a href='#' alt='Registrace'><img src='./images/register.png' id='registrace'></a>
      <a href='#' alt='Zapomenuté heslo'><img src='./images/heslo.png' id='heslo'></a>
      
      <form action='' method='POST'>
      
      <input type='text' value='' name='nick' required />
      <input type='password' value='' name='heslo' required />
      <input type='submit' name='login' value='' required>
      
      </form>
       
    ";
    /*---------- Konec HTML --------------------------------------------------*/
  
  }
  /*--------------------- Konec SESION ID Login (Přihlášen) ------------------*/

?>   
    
 
Nahlásit jako SPAM
IP: 85.71.70.–
peter
~ Anonymní uživatel
2551 příspěvků
16. 10. 2014   #15
-
0
-

:) Zpet k memu prispevku. Nemas tam session start. Nemas tam prihlasovani ze session, pouze z post. V tom puvodnim kodu mas prihlasovani pres session, ale omezene jen na nick, coz je bezpecnostni trhlina.

if (isset($_POST["nick"])) {login(0);}
else if (isset($_SESSION["nick"])) {login(1);}
else prihlasovaci formular

V pripade 0, veme udaje z post a zasifruje (nick, heslo).
V pripade 1, veme udaje ze zession a zasifruje (nick, heslo). (heslo pro session bych nechal zasifrovane jinak nez pro databazi. k heslu bych pro md5 nebo sha1 pridaval i nick, mozna a nejaky retezec navic. Scitacimu md5 je jedno, jakou delku sifruje.... Treba bych pro heslo pro session pouzil cas posledniho nalogovani jako udaj navic a upravil sql dotaz)

Navic teda, jestli to nevis, tak md5 je scitaci funkce a je udelana tak jednoduse, ze lze heslo odvodit. Urcite casti md5 vyjdou pro urcitou sadu znaku stejne, cimz se zmensi pocet moznosti. Nekolik let zpet byl nejaky algoritmus, co to dopocital do 4 min, tusim. Opakovanym pouzitim se toho moc nevyresi.

A tez by bylo dobre pouzivat jednotne nazvy. Nick je anglicky, heslo je cesky, login je anglicky. Obvykle pouzivam user, name, psw, sign (sign in prihlaseni)
 

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:6ce7:76...–
jAkErCZ0
Newbie
16. 10. 2014   #16
-
0
-

To je sice pěkné ale jak to tedy využiji mám místo post používat if (isset($_SESSION["nick"]))  nebo co??

a to s tím šifrováním to místo md5 mám dávat sha1??

Nahlásit jako SPAM
IP: 85.71.70.–
peter
~ Anonymní uživatel
2551 příspěvků
17. 10. 2014   #17
-
0
-

Jen ti oznamuji, ze md5 neni uplne bezpecne. Reseni je na tobe.

Session, tez, jen ti oznamuji, ze udaje z $_POST se ztraceji pri dalsim zobrazeni stranky, ze jestli chces prihlaseni udrzet, musis to mit v $_SESSION a overovat to pak vuci nemu. Tu podminku mas ted tak, ze:
if ($_POST) {prihlas()}
else {zobraz_prihlasovaci_formular()}
Pri prvnim vyplneni a odeslani se to prihlasi. Pri kazdem dalsim kliknuti (kliknuti na odkaz je $_GET) neni odeslan $_POST, takze se zobrazi prihlasovaci formular. Ten puvodni kod v tomhle smeru, byl dobre, ze to zustalo prihlasene. jen se chybne zobrazoval formular, ikdyz jsi byl prihlaseny.

Pro zacatek muzes udelat to, ze do session budes ukladat nick a psw podle $_POST. Neni to bezpecne, ale bude ti to fungovat. Prihlasovani pak upravis tak, aby akceptoval bud nick a heslo z post nebo ze session.

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:7d67:a0...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 24 hostů

Podobná vlákna

Problem s prihlasovanim — založil tribalcz

Problem s double — založil braba

Mam problem s programem — založil tomáš

Mám problém s TreeView — založil Dave-CZ

 

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