Autor Zpráva
starburst
Profil
zdravim vas. mam takovou aplikaci na prihlasovani - kazdy uzivatel ma v databazi ulozeny udaje vcetne prav bud 0 jako uzivatel nebo 1 jako spravce, pri prihlaseni se vytahnou data z databaze a ulozi se do SESSION potom na kazde strance se kontroluje session jestli je uzivatel prihlasen a ma dostatecna prava pro zobrazeni te ci one stranky. v tom nemam problem to mi funguje bezvadne. problem je v tom, ze sem chtel spravci povolit registraci dalsich uzivatelu ci spravcu. kdyz vyplnim patricny formular, data se odeslou, ulozi do databaze (vse v poradku) ale vubec nechapu jak je to mozny ale vyplneny data se mi ulozi i do session a uzivatel se jakokdyby preloguje tim ze jsem ho zaregistroval tak se to preloguje na nej - nechapu jak je to mozny potoze v kodu ktery zpracovava data z formulare mam POUZE prikaz na ulozeni do databaze a pomoci headru se vraci zpet na puvodni stranku - a v tomto je ten problem protoze sem byl predtim prihlasen jako spravce a zaregistroval sem tam obycejneho uzivatele a ono me to prelogovalo na toho uzivatele, ztratim prava spravce a vyhodi mi to chybu ze nemam prava spravce a musim se znovu prihlasit atd atd - ale data do databaze se ulozi v poradku - nemá někdo s tímto problémem zkusenosti? co by to mohlo zpusobovat? prikladam kod ktery zpracovava formular:

<?php
require "secure.php";
session_start();
if ($_SESSION['prava']!="1"){
  echo "Tato sekce je pouze pro vedouci!!!!";
  die (); }

/* tady jeste neni problem a jsem prihlasen v poradku a pusti me to dal a jak probehne tento skript tak je v SESSIONs 
ulozeny to co sem vlozil do toho formulare */

ob_start();               // cachujeme vystup
  if(isset($_POST['nsent'])){      // pokud byl odeslan formular pokracuj timto
    $jmeno=trim($_POST['njmeno']);
    $prijmeni=trim($_POST['nprijmeni']);
    $heslo1=$_POST['nheslo'];
    $heslo2=$_POST['nheslo_znovu'];
    $prezdivka=trim($_POST['nprezdivka']);
    $prava=trim($_POST['nprava']);
    $tel=trim($_POST['ntel']);
    $mail=trim($_POST['nmail']); }
    
    if($jmeno=="" or $heslo1=="" or $heslo2=="" or $prijmeni==""){ // pokud nebylo vyplněno něco z toho, co je povinné, dáme vědět a skript ukončíme
      echo "Nebyly vyplněny všechny povinné údaje!";}
      
      else{              // povinné udaje vyplněny vsechny
      require "databaze_option.php";     // pripojime se k databazi
      $tabulka = "users";
      $PocetStejnych=mysql_result(mysql_query("SELECT COUNT(*) FROM $tabulka WHERE jmeno='$jmeno' && prijmeni='$prijmeni'"),0);
        if($PocetStejnych!=0){         // pokud v db je jiz takove jmeno nebo heslo...
          echo "Zadané jméno je již používán někým jiným!!!";}
        elseif($heslo1 != $heslo2){       // pokud se hesla nerovnají
          echo "Zadané hesla se neshodují!!!"; }
        else{                 // hesla se shoduji, vlozime tedy data do databaze
        $heslo=$heslo1;  
        $dotaz="INSERT INTO $tabulka VALUES (NULL,'$jmeno','$prijmeni','$tel','$mail','$prezdivka','0','0','$heslo   ','$prava')";
        $VlozData=mysql_query($dotaz) or die (mysql_error());
        }}
  mysql_Close();  
        if (!$VlozData)
          echo "data nebyla vlozena";
          else 


              /* a tady uz nejsem prihlasen jako ja ale jako ten co sem ho registroval s pravy uzivatele a po presmerovani na stranku 
logged_boss.php mi to napise chybu, ze stranka je pouze pro spravce, kdyz sem vlozil echo s vypsanim co je vlastne ulozene v
 SESSIONs tak mi to vypise presne to co sem zadal do formulare    */


      $bl = "logged_boss.php";
                
          header("location: $bl");  
          exit;

  ob_end_flush();


?>

děkuji za pomoc
peta
Profil
starburst
Vetsina toho scriptu chybi, takze od toho se muze odvijet nula odpovedi.

Tipoval bych, ze se ti ztraci session. Ted je otazka, zda za to muze php nebo chybne napsany program. Co kdyby jsi pridal do scriptu radek:
print_r($_SESSION); die();
A sledoval, na kterem radky ti session jeste zustane a na kterem se zmeni. Takto to presunuj radek po radku.

V pripade globalnich promennych ti tyto radky:
$jmeno=trim($_POST['njmeno']);
$prijmeni=trim($_POST['nprijmeni']);
$heslo1=$_POST['nheslo'];
$heslo2=$_POST['nheslo_znovu'];
$prezdivka=trim($_POST['nprezdivka']);
$prava=trim($_POST['nprava']);
$tel=trim($_POST['ntel']);
$mail=trim($_POST['nmail']); }
zajisti prepsavi jak $_GET, $_POST, $_SESSION pro promenne 'prijmeni', 'heslo1', ..., ${'promenna'} = ...
starburst
Profil
děkuji za radu. provedl jsem to jak rikas a opravdu to dela tato sekce:
$jmeno=trim($_POST['njmeno']);
$prijmeni=trim($_POST['nprijmeni']);
$heslo1=$_POST['nheslo'];
$heslo2=$_POST['nheslo_znovu'];
$prezdivka=trim($_POST['nprezdivka']);
$prava=trim($_POST['nprava']);
$tel=trim($_POST['ntel']);
$mail=trim($_POST['nmail']); }

kdyz to presunuji po radku tak tam kde to jeste probehne to se zmeni a to co je za tim zustane stejne...
ale schvalne jsem ty promene prepsal tak ze jsem pred kazdou vlozil "n" jako nove takze ty promene se vlastne vubec neschoduji a taky nevim proc to ty promenne prepise do toho sesion kdyz sem k tomu nedal prikaz...

nevis jak to upravit? a kterou cas skriptu bys potreboval videt? dam to sem...
starburst
Profil
uz jsem to asi vyresil tim ze jsem prepsal i promenne nejen v POST ale i primo jmena tech promenych... ale stejne to nechapu... docela sem s es tim natrapil :-( no jestli je nejaky elegantnejsi reseni jak toto resit tak mi poradte... dekuji

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0