« 1 2 »
Autor Zpráva
Tomashekk
Profil
Potřeboval bych poradit, jak ošetřit administraci přihlášením uživatelským jménem a heslem z MySQL přes session. Mám tam dva uživatele. Akorát nějak mi nejde do hlavy jak na to. Myslím že by stačilo nakopnout. administrace:
Index:
<?php
  header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");               // Date in the past
  header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");  // always modified
  header("Cache-Control: no-cache, must-revalidate");             // HTTP/1.1
  header("Pragma: no-cache");                                     // HTTP/1.0

  $page .='.php';  
  if (!$page || !file_exists($page)) $page="main.php";
  ?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>.:: Hachar films ::. - administrace</title>
<meta name="keywords" content="" />
<meta name="description" content="" />
<link href="default.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="header">
	<div id="logo"></div>
<div id="menu">
		<ul>
		  <li class="active"><a href="http://localhost/aa/" title="">Domů</a></li>
	    <li><a href="index.php" title="">Administrace</a></li>
		  <li><a href="index.php?page=gbook" title="">kniha návštěv</a></li>
		  <li><a href="index.php?page=download" title="">ke stažení</a></li>
			<li><a href="index.php?page=ankety" title="">ankety</a></li>
            <li><a href="index.php?page=news" title="">novinky</a></li>
		</ul>
  </div>
</div>
<div id="wrapper">
	<div id="content">
	    <div align="center">
	      <? include($page);?>
        </div>
	</div>
	<div style="clear: both;">&nbsp;</div>
</div>
<div id="footer">
  <table width="100%" class="menu">
    <tr>
      <td class="copyright">cop...</td>
    </tr>
  </table>
</div>
</body>
</html>


a přes include dávám jiné stránky, jako např. tuto:
<?php
require_once('pripoj.php');
?>
<form id="form1" name="form1" method="post" action="zapis_download.php">
  <label></label>
  <p>
  <h1>Správce downloadů</h1>
  </p>
  <label></label>
  <table width="100%" border="0">
    <tr>
      <td align="left" valign="bottom"><label class="dulezite">jmeno</label></td>
      <td align="left" valign="bottom"><input type="text" name="jmeno" id="jmeno" /></td>
    </tr>
    <tr>
      <td align="left" valign="bottom"><label class="dulezite">odkaz</label></td>
      <td align="left" valign="bottom"><input type="text" name="odkaz" id="odkaz" /></td>
    </tr>
    <tr>
      <td align="left" valign="bottom"><label>popis</label></td>
      <td align="left" valign="bottom"><textarea name="popis" id="popis" cols="45" rows="5"></textarea></td>
    </tr>
    <tr>
      <td align="left" valign="bottom"><label class="dulezite">velikost</label></td>
      <td align="left" valign="bottom"><input type="text" name="velikost" id="velikost" value="kb" /></td>
    </tr>
    <tr>
      <td align="right"><input name="odesli" value="Ode&scaron;li" type="submit"></td>
      <td  align="left"><input type="Reset" class=bluebutton value="Vymazat"></td>
    </tr>
  </table>
</form>
<form name="form3" method="post" action="smaz_download.php">
  <label>
  <h2 align="center">Smazání downloadu </h2>
  <div align="center"><br>
    ID
    <input type="text" name="ID" id="ID">
      </label>
       <input type="submit" name="submit" id="submit" value="Odeslat">
  </div>
  <p align="center">
    <label></label>
  </p>
</form>
<?php
$dotaz = "SELECT `ID` , `jmeno` , `odkaz` , `popis` , `velikost` , `datum` FROM `download` ORDER BY `ID` DESC "; //načte do proměné obsah z databáze požadovaných řádků dle limitu
$vysledek = mysql_query($dotaz, $link) or die ("SQL dotaz nešlo provést");  //načte do promenné obsah promenné s obsahem z DB nebo "chcípne"
mysql_close(); //uzavře MySQL spojení
while ($radek = mysql_fetch_assoc($vysledek)) //Načte výsledný řádek do asociativního pole 
 {
 extract($radek); //čte z pole do tabulky
?>
<table width="80%" border="0" align="center">
   <tr>
     <td colspan="2" class="predmet" width="50%"><?php echo $jmeno ?></td>
     <td colspan="2" class="predmet" width="50%"><?php echo $ID ?></td>
   </tr>
   <tr>
     <td width="50%" class="jmeno"><?php echo $jmeno ?></td>
     <td width="50%" class="jmeno"><a href="<?php echo $odkaz ?>">Odkaz</a></td>
   </tr>
   <tr>
     <td width="50%" class="jmeno"><?php echo $datum ?></td>
     <td width="50%" class="ip"><?php echo $velikost ?></td>
   </tr>
   <tr>
     <td colspan="2"><?php echo $popis ?></td>
   </tr>
 </table>
 <hr color="#125682">
 <?php
 }
?>
fuckin
Profil *
function jeAdmin($session) {
If ($session[admin] == 1) // nebo (isset(...)
return true;
else
return false;
}

A pak jen tuto fci zavolas, bude to vypadat treba takto,toto das uplne na zacatek ..

jeAdmin($..) or die("nemas opravneni);
Jack06
Profil
fuckin
od kdy je $session?? pokud vím použití session je $_session když už // a nemyslím si že je potřeba to tahat přez funkci
budiš do session zavoláš funci: jeAdmin($_session['admin']);
pak ale nemůžš při function jeAdmin($session) {
chtít ve funkci $session[admin]

za 2
if($_session[admin] == 1 bych radši napsal if(isset($_session['admin']) && $_session['admin'] ==1)) nikoli //nebo
to co jsi psal ti někde může psát chyby že ten session neexistuje

ty sessiony beru jako že nejsou ve funkci.. funkce je k tomu to uplně zbytečná
Tomashekk
Profil
Počkejte... kam se vůbec $_SESSION ukladá?
Jack06
Profil
$_SESSION je dočasné cookie.. oproti klasickému cookie by se dalo říci že je bezpečnější. Jinak se ukládá stejně jako cookie.
Tomashekk
Profil
$_SESSION je dočasné cookie.. oproti klasickému cookie by se dalo říci že je bezpečnější. Jinak se ukládá stejně jako cookie.
takže já dám např. $_SESSION = TRUE; a ono se do session uloží hodnota TRUE?
Mastodont
Profil
Jack06
$_SESSION je dočasné cookie.. oproti klasickému cookie by se dalo říci že je bezpečnější. Jinak se ukládá stejně jako cookie.
Buď prosím tak hodný a neplácej tu takovéto totální KRAVINY.
Mastodont
Profil
Tomashekk
http://www.linuxsoft.cz/article.php?id_article=440
Tomashekk
Profil
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /data/home/kulhanekto/public_html/PHP/Hachar/admin/index.php:13) in /data/home/kulhanekto/public_html/PHP/Hachar/admin/gbook.php on line 2


nechápu tuto chybku
Jack06
Profil
Mastodont
Máš je v pc stejně jako Cookie.. vyhrazené místo ukládání na serveru. Rozdíli mezi nimi jsou, nicméně jsou využívány stejným způsobem jako cookie.

jinak ten link co jsi sem dal není to pravé.. session_register se už dááávno nepoužívá

Tomashekk
na začátku zadáš <?php session_start(); ?> například
session pak využíváš například:
$_SESSION['nazev_sessionu'] = 'neco co v ní chceš mít';
nebo:
$_SESSION['nazev_sessionu'] = $promenna;

pak pokud máš jednotlivě stránky tak vždy musíš mít na začátku start session, pokud je máš includované pod již definovaný session tak už je jen využiváš
příklad:

přihlášení zadáš si do session nick a třeba pohlaví a pak je budeš používat:
před jakýmikoliv výstupy jako je echo, print atd
<?php session_start();
$_SESSION['user_nick'] = $_POST['login']; // nick
$_SESSION['user_sex'] = $_POST['sex']; //pohlavi
?>

a pak na stránce kde potřebuješ vědět nick zase pokud nemáš zaplé session tak
<?php session_start(); ?>
Jsi přihlášen jako: <?php print "$_SESSION['user_nick']"; ?>
Tomashekk
Profil
hele, má soubor acc.php přes které probíhá přihlášení a přesměrování do administrace:
<?php
require_once('pripoj.php');
$dotaz = "SELECT `acc` , `pass` FROM `profil`"; //načte do proměné obsah z databáze požadovaných řádků dle limitu
$vysledek = mysql_query($dotaz, $link) or die ("SQL dotaz nešlo provést");  //načte do promenné obsah promenné s obsahem z DB nebo "chcípne"

$radek = mysql_fetch_assoc($vysledek);
if ($radek != ""){
extract($radek);
}
                        if ($_POST['acc'] != "$acc" AND $_POST['pass'] != "$pass" )
  {
	  session_start();
      session_register("prihlaseni");
	  $_SESSION["prihlaseni"]=1;

  }
  else
  {
  echo "<script> alert('Spatne jmeno nebo heslo!');javascript:self.history.back();</script>";
  }
  Header("Location: index.php");
  ?>


no a pak mám adminsitraci index.php do které jsou includovány jiný stránky, např. gbook.php který jsem si napsal takto s kontrolou session, ovšem mi to nefunguje.

<?php
session_start();
if($_SESSION["prihlaseni"]!=1)
{
?> 
<body><div id="kniha">
<form name="form1" method="post" action="zapis.php">
  <label>
  <h2 align="center">Smazání přízpěvků</h2>
  <div align="center"><br>
    ID
    <input type="text" name="ID" id="ID">
      </label>
       <input type="submit" name="submit" id="submit" value="Odeslat">
  </div>
  <p align="center">
    <label></label>
  </p>
</form>
<p>
   <p>
     <?php
 include_once 'pripoj.php';
 include ("strankovani.php");
 include ("vypis_knihu.php");
 echo "strana ".$s." z ".$stranek;

 ?>
   </div>
   <?php }
else
{
	
}
?>
</body>
</html>
Jack06
Profil
Tomashekk
Mno tak koukám že tu chybu co tu psal mastodont jsi zkopíroval
session_register se již nepoužívá to je staré
takže k prvnímu scriptu.. session_start(); musíš dekladovat jen jednou.. a to platí i pro includované soubory i reguire.. zkus v tom prvním souboru napsat začátek místo
<?php
require_once('pripoj.php');
$dotaz = "SELECT `acc` , `pass` FROM `profil`"; //načte do proměné obsah z databáze požadovaných řádků dle limitu
$vysledek = mysql_query($dotaz, $link) or die ("SQL dotaz nešlo provést");  //načte do promenné obsah promenné s obsahem z DB nebo "chcípne"

$radek = mysql_fetch_assoc($vysledek);
if ($radek != ""){
extract($radek);
}
                        if ($_POST['acc'] != "$acc" AND $_POST['pass'] != "$pass" )
  {
      session_start();
      session_register("prihlaseni");
      $_SESSION["prihlaseni"]=1;

  }
  else
  {
  echo "<script> alert('Spatne jmeno nebo heslo!');javascript:self.history.back();</script>";
  }
  Header("Location: index.php");
  ?>



takto:
<?php session_start();
require_once('pripoj.php');
$dotaz = "SELECT `acc` , `pass` FROM `profil`"; //načte do proměné obsah z databáze požadovaných řádků dle limitu
$vysledek = mysql_query($dotaz, $link) or die ("SQL dotaz nešlo provést");  //načte do promenné obsah promenné s obsahem z DB nebo "chcípne"

$radek = mysql_fetch_assoc($vysledek);
if ($radek != ""){
extract($radek);
}
                        if ($_POST['acc'] == "$acc" && $_POST['pass'] == "$pass" )
  {

      $_SESSION["prihlaseni"]=1;

  }
  else
  {
  echo "<script> alert('Spatne jmeno nebo heslo!');javascript:self.history.back();</script>";
  }
  Header("Location: index.php");
  ?>


snad jsem to neskonil.. podle mě se ti session nevytvořili protože jsi měl podmínku jestliže se $_POST['acc'] nerovná záznamu z databáze a to by jsi spíše měl mít rovná když chceš že je přihlášen..

u druhého přepiš:
<?php
session_start();
if($_SESSION["prihlaseni"]!=1)

na

<?php session_start();
if(isset($_SESSION["prihlaseni"]) && $_SESSION["prihlaseni"] ==1)


teď když bude existovat session "prihlaseni" tak tě to pustí smazat přízpěvek.
Tomashekk
Profil
Jack06
ok, funguje to, teda musel jsem si tam ještě něco upravit.. nepustilo mne to přes přihlášení...
== sem musel změnit na != a už to šlape... super díky moc a ještě.. potřebuju dát do session uživatele a pak ho jinde vypsat
Jack06
Profil
Tomashekk
to jsem ti psal výše.. je to uplně stejnej postup jako jsi tam dal 1 -> jen nechápu jaktože != když kontroluješ jestli je v db... jo už to vidím.. hele kontroloval bych to jinak takhle zkontroluješ jen jeden záznam v mysql.. spíše takto:
<?php
	$dotaz = mysql_query("SELECT acc, pass FROM profil WHERE acc='{$_POST['acc']}' AND pass='{$_POST['pass']}' LIMIT 1");
	if (mysql_num_rows($dotaz) == 1) {
       $data = mysql_fetch_assoc($dotaz);
       $_SESSION['prihlaseni']    = 1;
					$_SESSION['user_nick'] = $data['u_nick'];  // nick uzivatele
  }else{
		echo "<script> alert('Spatne jmeno nebo heslo!');javascript:self.history.back();</script>";
  
	}
?>

snad jsem to napsal dobře už dlouho nepracuju se starou metodou mysql_query atd :-D
Tomashekk
Profil
Jack06
ok, zkusil jsem to co jsi mi ted napsal a neustale mi to hlasi chybne jmeno nebo heslo
Tomashekk
Profil
To tvoje mi nejde.. ono, já tam mám dva profily a časem jich možná bude i víc.. takže potřebuju aby mi to kontrolovalo jméno a heslo mezi X uživateli a nejlépe s heslem v MD5
Jack06
Profil
Tomashekk
tak to uprav na MD 5.. a kontroluje to.. tohle se podívá do databáze jestli tam existuje uživatel s daným jménem a heslem pokud ano.. tak se ti jeho ncik uloží do session pokud ne tak ti to napíše spatne jmeno enbo heslo, takže asi něco děláš špatně ty..
Tomashekk
Profil
no počkej, jako uložím to do MD5 a pak to kontroluju jak? furt stejně?
Jack06
Profil
Tomashekk
ne změníš AND pass='{$_POST['pass']}' na AND pass='".md5($_POST['pass'])."'
Tomashekk
Profil
Jack06
ok, díky, ale for je v tom, že pořád mi to nechce pustit, prej špatný jméno a heslo
Jack06
Profil
Tomashekk
asi tam máš něco zadané špatně
Tomashekk
Profil
Jack06
Hele a odhlášení bych mohl řešit jak? tak že
$_SESSION['prihlaseni'] = 1;
$_SESSION['user_nick'] = $data['u_nick'];
tam přiřadím
$_SESSION['prihlaseni'] = 99;
$_SESSION['user_nick'] = FALSE;

????
Jack06
Profil
Session_Destroy();
Tomashekk
Profil
Jack06
ok, super..
tak našel jsem chybičku, neměl jsem vytvořený jméno ani heslo, to jsem napravil ale stejně.. Ale podle toho mého (post dále) se přihlásím, ale furt mi to háže že jsem přihlášen jako Tom a to i když se přihlásím jako Jakub
<?php session_start();
require_once('pripoj.php');
$dotaz = "SELECT `acc` , `pass` FROM `profil`"; //načte do proměné obsah z databáze požadovaných řádků dle limitu
$vysledek = mysql_query($dotaz, $link) or die ("SQL dotaz nešlo provést");  //načte do promenné obsah promenné s obsahem z DB nebo "chcípne"

$radek = mysql_fetch_assoc($vysledek);
if ($radek != ""){
extract($radek);
}
                        if ($_POST['acc'] != "$acc" && $_POST['pass'] != "$pass" )
  {

      $_SESSION["prihlaseni"]=1;
	  $_SESSION["nick"]=$acc;

  }
  else
  {
  echo "<script> alert('Spatne jmeno nebo heslo!');javascript:self.history.back();</script>";
  }
  Header("Location: admin/index.php");
  ?>
Jack06
Profil
sice nevím co máš pod extract nebo co to je že ti to hodí automaticky do proměnné $acc nick a $pass heslo, ale pokud, tak smaž session přez to session_destroy a pak udělej nové session.. osobně bych tu stavbu přihlášení dělal uplně jinak.. dnes končím tak zatím jinak spíše ybch porovnával post acc s $radek['acc'] a heslo s $radek['pass'] a do session to dal taky tak
Tomashekk
Profil
Hele, tak jsem to udelal nejak zajimave..
Jmeno: Tom
heslo: k
druhý účet
Jmeno: Jakub
heslo: oko
Když to kombinuju tak se přihlásím, ale příhlásím se i tak
Jméno:
Tom
heslo:
oko
nebo
jméno:
Tom
heslo:
k

Docela zajímavý
Neustále mi to vypisuje, že jsem přihlášen jako Tom, takže to je podle mého chyba v mysql_query a v tom požadavku select.

<?php session_start();
require_once('pripoj.php');
$dotaz = "SELECT `acc` , `pass` FROM `profil`"; //načte do proměné obsah z databáze požadovaných řádků dle limitu
$vysledek = mysql_query($dotaz, $link) or die ("SQL dotaz nešlo provést");  //načte do promenné obsah promenné s obsahem z DB nebo "chcípne"

$radek = mysql_fetch_assoc($vysledek);
if ($radek != ""){
extract($radek);
}
                        if ($_POST['acc'] != $radek['acc'] && $_POST['pass'] != $radek['pass'] )
  {

      $_SESSION["prihlaseni"]=1;
      $_SESSION["nick"]=$radek['acc'];

  }
  else
  {
  echo "<script> alert('Spatne jmeno nebo heslo!');javascript:self.history.back();</script>";
  }
  Header("Location: admin/index.php");
  ?>
NoName
Profil *
Ja bych to resil asi nejak takhle:
<?php

session_start();

$rows = mysql_num_rows(mysql_query("SELECT `acc` FROM `profil` WHERE `acc`='".addslashes($_POST['acc'])."' AND `pass`='".addslashes($_POST['pass'])."'"));
if($rows == 1){
	$_SESSION['nick'] = addslashes($_POST['acc']);
}else{
	echo 'Chyba prihlaseni...';
}

?>
NoName
Profil *
Aby to bylo uplny...
<?php

session_start();

$rows = mysql_num_rows(mysql_query("SELECT 1 FROM `profil` WHERE `acc`='".addslashes($_POST['acc'])."' AND `pass`='".addslashes($_POST['pass'])."'"));
if($rows == 1){
    $_SESSION['nick'] = addslashes($_POST['acc']);
    $_SESSION['prihlaseni'] = 1;
}else{
    echo 'Chyba prihlaseni...';
}

?>
Tomashekk
Profil
NoName
divný, ale to mi hlásí chybné přihlášení :( Fakt to už nechápu
Jack06
Profil
Tomashekk
Nevím jak ti poradit i to co napsal NoName je dobře. Děláš chybu někde ty.. zkus si sepsat možné error, nebo vypsat co ti to vypíše z mysql, jestli ti to vypisuje do session to co chceš
« 1 2 »

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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