Autor Zpráva
Corek
Profil *
Zdravím, chtěl bych se zeptat, zda by jste mi nemohli mrknout na tento zdrojak u loginu, zda je vše v pořádku. Snažím se udělat co nejjednodušší login s využití session

Díky

<?php


echo "
  <form action=\"./index.php?id=3\" method=post>
  Jmeno: <input type=text name=jmeno><br />
  Heslo: <input type=password name=heslo><br />
  <input type=submit name=sb value=přihlásit >
  </form>
  
";


  $jmeno = $_POST['jmeno'];
  $heslo = $_POST['heslo'];
  
  do{
         @$spojeni=MySQL_Connect("mysql.wu.cz", prihlasovací_jmeno, heslo);
  if(!$spojeni):
  echo "Nelze spojit";
  break;
  endif;
  MySQL_Select_DB(prihlasovací_jmeno);
  @$vysledek=MySQL_Query("SELECT * FROM users") OR print mysql_error();
  while ($zaznam = MySQL_Fetch_Array($vysledek)){
    if($zaznam["nick"]==$jmeno && $zaznam["pass"]==$heslo)
      $_SESSION[login]=1;
      $_SESSION[nick]=$jmeno;}
      
  if($_SESSION[login]==1)
    echo "NEPřihlášen<br>";
  else
    echo "Jste přihlášený<br />";
  MySQL_Close($spojeni);  		 
  }while(false);
    
?>
<a href="index.php">Pokračovat</a>


Moderátor Mistr: Odstraněno prozrazené přihlašovací jméno a heslo. Dávej si na to příště pozor!
panther
Profil
Corek
zda je vše v pořádku.
Funguje? Pak asi ano. Nefunguje? Je tam chyba, napiš nám, co to dělá a nedělá.
Corek
Profil *
No spíš bych řekl, že nefunguje... sice mi to vypíše, že jsem přhlášen po zadání jmena a hesla z DB .... ale nevím si rady s tím, aby mi to vypsalo pak po přihlášení na obrazovce stále přihlášen, dokud nedám odhlásit, což také nevím jak udělat... O:) :(
SwimX
Profil
Corek:
zda je vše v pořádku
formulář vypisuješ pořád, i když už je někdo přihlášen.
do while v přihlášení vidím asi poprvé, a uvnitř cyklu se připojuješ k DB? to neni v pořádku
atd.

zkus todle:
<?php

// tady bude připojení do db
session_start();


if(!empty($_POST['nick']) && !empty($_POST['heslo'])){
  $result = mysql_query("SELECT id, jmeno, prijmeni FROM uzivatele WHERE nick = '".addslashes($_POST['nick'])."' and heslo = '".md5($_POST['heslo'])."'");
  $row = mysql_fetch_assoc($result);
  if(is_numeric($row['id'])){ //pokud to vrati id jako cislo -> prihlasen
    $_SESSION['id'] = $row['id'];
    $_SESSION['jmeno'] = $row['jmeno'];
    $_SESSION['prijmeni'] = $row['prijmeni'];
    $_SESSION['nick'] = addslashes($_POST['nick']);
    header("location: /administrace/");
  }
  else echo "Špatně vyplněné údaje";
}
if($url['dir2'] == 'odhlasit'){
  session_destroy();
  header("location: /cs/");
  exit;
  }
  
if(empty($_SESSION['id'])){
  echo "<h2>ADMINISTRACE</h2>";
  ?>
  <h3>Přihlášení</h3>
    <form action='' method='post'>
      <table><tr><th>Jméno: </th><td><input type='text' name='nick'></td></tr>
      <tr><th>Heslo: </th><td><input type='password' name='heslo'></td></tr>
      </table>
      <p class='center'><input type='submit' class='submit' value='Přihlásit'></p>
    </form>
  <?php
}

else{
  //tady bude všechno co se zobrazí pouze těm, kdož jsou přihlášeni
  ?>

  <h3>Přihlášení</h3>
  <div class='content'>
    <?="<p>Přihlášen {$_SESSION['jmeno']} {$_SESSION['prijmeni']} alá&nbsp;{$_SESSION['nick']}</p><p><a href='/administrace/odhlasit/'>Odhlásit</a>"?>
  </div>
						
  <?php

}

?>					


?>
Corek
Profil *
Děkuji vyzkouším, a dám vědět, v čem budu mít nejasno. Děkuji ještě jednou
Corek
Profil *
jak jste napsal "// tady bude připojení do db" tak tam dám své připojení do DB ? až po co ? ... Omlouvám se za neznalost.
SwimX
Profil
Corek:
MySQL_Connect("mysql.wu.cz", prihlasovací_jmeno, heslo) or die('Nelze se spojit');
MySQL_Select_DB(prihlasovací_jmeno) or die('Nelze vybrat datbázi');


a zde jsem teď náhodou objevil registraci uživatelů:
http://diskuse.jakpsatweb.cz/.sandbox/?action=vthread&forum=9&topic=2111#5
Corek
Profil *
Registrace uživatelů., tu mám funkční :-) Ale děkuji. Jen jaksi te´d nevím co má dělat tento příkaz:
$row = mysql_fetch_assoc($result);    
něco jako MySQl_Fetch_Array ? Poněvadž, při zkoušce, mi to vypisuje chybu na této řádce, tudíž, že byli špatně zadány udaje.
SwimX
Profil
Corek:
fetch assoc je v tomto případě lepčí než fetch array, protože vytvoří pouze asociativní pole.
$row['nick'], $row['jmeno'] ...

fetch array vytvoří totéž co fetch assoc a eště totéž co fetch row
a to je:
$row[0], $row[1], ....

takže šetřím pamět.

chyba bude v tom dotazu:
 $result = mysql_query("SELECT id, jmeno, prijmeni FROM uzivatele WHERE nick = '".addslashes($_POST['nick'])."' and heslo = '".md5($_POST['heslo'])."'");


zřejmě nemáš v DB sloupce id, jmeno, prijmeni a nick, a tabulku uzivatele, uprav si to podle sebe :)
Corek
Profil *
A ještě malý dotaz O:)
Sem budu něco upravovat nějaký cesty ? Děkuji
header("location: /administrace/");
a
header("location: /cs/");
Corek
Profil *
chyba bude v tom dotazu:

1


$result = mysql_query("SELECT id, jmeno, prijmeni FROM uzivatele WHERE nick = '".addslashes($_POST['nick'])."' and heslo = '".md5($_



ano už jsem si všiml a opravil :-)
Corek
Profil *
A snad poslední dotaz... Dělá mi to neplechu při odhlášení, jak mám odkáznout tak, aby se pamet vynulovala a při dalším kliknutí mi to ukázalo zas formulář pro přihlášení ? .... ( Asi musíte ze mě mít dost O:) )
SwimX
Profil
Corek:
upravte
<a href='/administrace/odhlasit/'>Odhlásit</a>

na například toto:
<a href='?log=out'>Odhlásit</a>


a potom upravte:
if($url['dir2'] == 'odhlasit'){
  session_destroy();
  header("location: /cs/");
  exit;
  }

na
if(@$_GET['log']=='out'){
  session_destroy();
  header("location: index.php"); //index.php nahraďte názvem souboru s přihlašováním
  exit;
  }
Corek
Profil *
if(@$_GET['log']=='out'){
  session_destroy();
  header("location: index.php"); //index.php nahraďte názvem souboru s přihlašováním
  exit;
  }


takže zde vlastně napíšu cestu login.php , poněvadž tam mám celý tento zdrojový kod na přihlášení.
A do:

if(is_numeric($row['id'])){ //pokud to vrati id jako cislo -> prihlasen
    $_SESSION['id'] = $row['id'];
    $_SESSION['jmeno'] = $row['jmeno'];
    $_SESSION['prijmeni'] = $row['prijmeni'];
    $_SESSION['nick'] = addslashes($_POST['nick']);
    header("location: index.php?id=2");
  }
do header zde napíšu co ? Nějak zkouším různé varianty, ale nejde to.
Corek
Profil *
Tak už mám vše vyřešený, děkuji za ochotu.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: