Autor Zpráva
Milan Sobotka
Profil
Dobrý den.
Možná tuto otázku položím špatně ale nevím, jak to jinak říci. Mám takový login,register system s indexama, kam se dostanou jen přihlášení. Je to děláno způsobem:
<?php require('includes/config.php'); 

//if not logged in redirect to login page
if(!$user->is_logged_in()){ header('Location: login.php'); } 

//define page title
$title = 'Home';

//include header template
require('layout/header.php'); 
?>

Zde je tajná stránka

<?php
//include header template
require('layout/footer.php');
?>
A mě se jedná o to, že bych chtěl udělat nastavení toho uživatelského účtu. Takže mám soubor settings.php, v nem tento php skript aby byl poskytnut pouze přihlášeným a tam bych potřeboval zapsání do db. To není problém. Problém je, že nevím, jak to udělat, aby se to zapsalo k tomu přihlášenému uživateli...
Za rady nebo alespoň typy, jak to udělat předem děkuji.


Zjednodušeně řečeno jak získat proměnou právě přihlášeného.
lionel messi
Profil
Milan Sobotka
Problém je, že nevím, jak to udělat, aby se to zapsalo k tomu přihlášenému uživateli...
Predpokladám, že prihlasovacie meno si ukladáte do $_SESSION. Na zmenu záznamu v db postačí jednoduchý UPDATE s podmienkou WHERE:
UPDATE tabulka SET sloupec = 'hodnota' WHERE jmeno = '. $_SESSION["jmeno"] .'

Poznámka: Ešte by sa hodilo použiť escapovanie.
Milan Sobotka
Profil
No jestli to používá session nevím... Ale zkusím to. :-)


Hází mi to chybu... $vloz ="UPDATE members SET pohlavi='muž' WHERE username='. $_SESSION["username"].'";


Tohle je login.php:
<?php
//include config
require_once('includes/config.php');

//check if already logged in move to home page
if( $user->is_logged_in() ){ header('Location: index.php'); } 

//process login form if submitted
if(isset($_POST['submit'])){

    $username = $_POST['username'];
    $password = $_POST['password'];
    if($user->login($username,$password)){ 

        header('Location: home.php');
        exit;
    
    } else {
        $error[] = 'Chybné uživatelské jméno nebo heslo nebo váš účet nebyl aktivován.';
    }

}//end if submit

//define page title
$title = 'Login';

//include header template
require('layout/header.php'); 
?>
<?php include "./slider.php";?>
    
<div class="container">

    <div class="row">

        <div class="col-xs-12 col-sm-8 col-md-6 col-sm-offset-2 col-md-offset-3">
            <form role="form" method="post" action="" autocomplete="off">
                <h2>Přihlášení</h2>
                <p><a class="href" href='./'>Vrátit se na první stránku - REGISTRACE</a></p>
                <hr>

                <?php
                //check for any errors
                if(isset($error)){
                    foreach($error as $error){
                        echo '<p class="bg-danger">'.$error.'</p>';
                    }
                }

                if(isset($_GET['action'])){

                    //check the action
                    switch ($_GET['action']) {
                        case 'active':
                            echo "<h2 class='bg-success'>Váš účet je nyní aktivní, můžete se přihlásit.</h2>";
                            break;
                        case 'reset':
                            echo "<h2 class='bg-success'>Prosím zkontrolujte e-mailovou schránku pro aktivaci účtu.</h2>";
                            break;
                        case 'resetAccount':
                            echo "<h2 class='bg-success'>Heslo bylo úspěšně změněno. Můžete se přihlásit</h2>";
                            break;
                    }

                }
lionel messi
Profil
Milan Sobotka:
Postačí na riadok 14 doplniť toto:
$_SESSION['username'] = $_POST['username'];

a samozrejme musí byť na začiatku skriptu zavolané session_start. Dotaz bude vyzerať takto:
UPDATE tabulka SET sloupec = 'hodnota' WHERE jmeno = '. $_SESSION['username'] .'
Milan Sobotka
Profil
Nevím proč, ale pořád to háže chybu. jken tento řadek...
$vloz ="UPDATE members SET pohlavi = 'muž' WHERE jmeno = '. $_SESSION['username'] .'";
lionel messi
Profil
Milan Sobotka:
pořád to háže chybu
Akú?

Skús si vypísať var_dump($_SESSION['username']);.
Milan Sobotka
Profil
No jako ze je bila obrazovka... Klasicka chyba v php... ☺️


a to var_dump mamvypsat na zacatku infexu?
Milan Sobotka
Profil
Zkusil jsem vymazat to session a pak to fungovalo takze jestli mozna neni chyba v tech uvozovkach ve kterich je to session?
$vloz = "UPDATE members SET pohlavi='muž' WHERE username='. $_SESSION['username'] .'";
lionel messi
Profil
Milan Sobotka:
jestli mozna neni chyba v tech uvozovkach ve kterich je to session?
Je to naozaj tak, správne to má byť:
$vloz = "UPDATE members SET pohlavi='muž' WHERE username='" . $_SESSION['username'] . "'"; 

Syntaktické chyby pomôže odhaliť použitie IDE. Vo vývojovom prostredí sa (na rozdiel od produkčného) taktiež hodí zapnutie výpisu chýb. Ospravedlňujem sa, že som si chybu nevšimol skôr (bola zanesená už v [#5]), je to dielo istej nepozornosti a chýbajúceho syntax highlightingu.
Milan Sobotka
Profil
Ano. ted uzu to funguje ale kouknul jsem do db a opet se to zapsalo ke vsem uzivatelům... :(


Ale jak tak to zkousim porad dokola, tak je ted zase asi prozmenu chyba nekde jinde, prozoe to do db ani nedojde... :-)


Zkusil jsem tam dat pouze opravdu existujiciho uzivatele a do db se to nezapsalo... Achjo...
Milan Sobotka
Profil
Zkouším to mnoha způsobama ale zjistil jsem, že pookud je v tom skripte to WHERE username='" . $_SESSION['username'] . "' , tak se to nezapíše do db...
Fisir
Profil
Reaguji na Milana Sobotku:
Za SQL příkaž (řádek s $vloz) přidej echo($vloz); a pošli výsledek.
Milan Sobotka
Profil
Takže takto? $vloz = "UPDATE members SET pohlavi=muž' WHERE username='" . $_SESSION['username'] . "'"; echo($vloz);


Moc nechapu ucel...


Porad to totiz nezapisuje pokud tam je to where username...
Fisir
Profil
Reaguji na Milana Sobotku:
$vloz = "UPDATE members SET pohlavi='muž' WHERE username='" . $_SESSION['username'] . "'"; echo($vloz);
Chybí ti tam apostrof před muž'. Účelem je, abychom zjistili, jak vypadá výsledný příkaz na databázi. Co se tedy vypsalo? (To, že se do databáze stále nezapisuje nyní neřešme.)
Milan Sobotka
Profil
No ono se to vlastne nevypíše, protoze je to vse v indexu login.php takze jakmile probehne tento skript, tak se to presmeruje na hl. stranku...
Fisir
Profil
Reaguji na Milana Sobotku:
Tak místo echo použij die.
Milan Sobotka
Profil
Aha. Tohle se vypíše: UPDATE members SET pohlavi='muž' WHERE username=''


No to je to co rikam, tam bude nejaka chybicka v tom session. :-)
Kubo2
Profil
Milan Sobotka:
Z toho vyplýva, že v $_SESSION['username'] nemáš nič uložené, PHP to potichu obíde (pri zapnutom výpise chýb sa dočkáš E_NOTICE) a použije hodnotu NULL, ktorá sa pretypuje na prázdny reťazec. A keďže v databáze asizrejme nemáš používateľa s prázdnym používateľským menom, tak sa do databáze logicky nič nezapíše.

Spýtam sa ťa inak: ako v tej aplikácii vyzerá prihlasovací mechanizmus?
Milan Sobotka
Profil
Toto je celý index login.php kde je prihlasovani a pak i ten skript ktery resime.
<?php
//include config
require_once('includes/config.php');

//check if already logged in move to home page
if( $user->is_logged_in() ){ header('Location: index.php'); } 

//process login form if submitted
if(isset($_POST['submit'])){
    $username = $_POST['username'];
    $password = $_POST['password'];
    if($user->login($username,$password)){ 
        $_SESSION['username'] = $_POST['username'];
        header('Location: home.php');
        exit;
    
    } else {
        $error[] = 'Chybné uživatelské jméno nebo heslo nebo váš účet nebyl aktivován.';
    }

}//end if submit

//define page title
$title = 'Login';

//include header template
require('layout/header.php'); 
?>
<?php include "./slider.php";?>
    
<div class="container">

    <div class="row">

        <div class="col-xs-12 col-sm-8 col-md-6 col-sm-offset-2 col-md-offset-3">
            <form role="form" method="post" action="" autocomplete="off">
                <h2>Přihlášení</h2>
                <p><a class="href" href='./'>Vrátit se na první stránku - REGISTRACE</a></p>
                <hr>

                <?php
                //check for any errors
                if(isset($error)){
                    foreach($error as $error){
                        echo '<p class="bg-danger">'.$error.'</p>';
                    }
                }

                if(isset($_GET['action'])){

                    //check the action
                    switch ($_GET['action']) {
                        case 'active':
                            echo "<h2 class='bg-success'>Váš účet je nyní aktivní, můžete se přihlásit.</h2>";
                            break;
                        case 'reset':
                            echo "<h2 class='bg-success'>Prosím zkontrolujte e-mailovou schránku pro aktivaci účtu.</h2>";
                            break;
                        case 'resetAccount':
                            echo "<h2 class='bg-success'>Heslo bylo úspěšně změněno. Můžete se přihlásit</h2>";
                            break;
                    }

                }

                


//toto je skript na to ukladani

include 'config.php'; //načteme soubor s údaji pro připojení k db
        mysql_connect($dbserver, $dblogin, $dbheslo); // připojíme se k db
        mysql_select_db($dbnazev) // vybereme db..
            or die("Chyba! Databáze nebo tabulka nebyla nalezena!");
        mysql_query("SET NAMES 'cp1250'"); // nastavíme kódování
//když odešleme formulář následující script data uloží to tabulky v databázi
if(isset($_POST['send']))
{
      
        $text = htmlspecialchars($_POST['text']); //při odeslání příspěvku se nebezpečné znaky změní na entity
        
        $vloz = "UPDATE members SET pohlavi='muž' WHERE username='" . $_SESSION['username'] . "'"; die($vloz);
        $result=mysql_query($vloz);
       //a přesměrujeme na zobrazení článků
        echo '<script type="text/javascript" for="window" event="onLoad()">
        <!--
            window.location.href="settings.php?edit=ok"
        // --> </script>';    
}
$edit = htmlspecialchars($_GET['edit']);
if($edit == "ok")
    { echo '<b>Údaje byly vloženy</b>'; } // vypíšeme úspěšnost 
mysql_close(); //odpojíme se z db
 
    
                ?>

                <div class="form-group">
                    <input type="text" name="username" id="username" class="form-control input-lg" placeholder="User Name" value="<?php if(isset($error)){ echo $_POST['username']; } ?>" tabindex="1">
                </div>

                <div class="form-group">
                    <input type="password" name="password" id="password" class="form-control input-lg" placeholder="Password" tabindex="3">
                </div>
                
                <div class="row">
                    <div class="col-xs-9 col-sm-9 col-md-9">
                         <a class="href" href='reset.php'>Zapomněli jste heslo?</a>
                    </div>
                </div>
                
                <hr>
                <div class="row">
                    <div class="col-xs-6 col-md-6"><input type="submit" name="submit" value="Přihlásit" class="btn btn-primary btn-block btn-lg" tabindex="5"></div>
                </div><br><br>
            </form>
        </div>
    </div>



</div>


<?php 
//include header template
require('layout/footer.php'); 
?>
Milan Sobotka
Profil
A takže bych měl nejak vyřešit to session? Ale to mi už nekdo radil a i to v tom kode je: $_SESSION['username'] = $_POST['username'];
Fisir
Profil
Reaguji na Milana Sobotku:
Na začátek souboru includes/config.php vlož session_start();.
Milan Sobotka
Profil
Uplne na zacatek? pred to config?


Tak jsem to tam dopsal a porad se do db nic nezapsalo... :\


A jenom dotaz proc jsou tady ty tecky pred a po tom session? Uz fakt nevim, cim by to mohlo byt... username='" . $_SESSION['username'] . "'
Milan Sobotka
Profil
Ja jsem jeste zkusil dat ten zapisovaci skript k tomu prihlasovacimu ale porad nic... Zde je celý kod ale porad nefunkcni...

<?php
session_start();
require_once('includes/config.php');

//check if already logged in move to home page
if( $user->is_logged_in() ){ header('Location: index.php'); } 
$_SESSION['username'] = $_POST['username'];
//process login form if submitted
if(isset($_POST['submit'])){
    $username = $_POST['username'];
    $password = $_POST['password'];
    if($user->login($username,$password)){ 
        $_SESSION['username'] = $_POST['username'];
        header('Location: home.php');
        exit;
    
    } else {
        $error[] = 'Chybné uživatelské jméno nebo heslo nebo váš účet nebyl aktivován.';
    }

}//end if submit
//toto je skript na to ukladani

include 'config.php'; //načteme soubor s údaji pro připojení k db
        mysql_connect($dbserver, $dblogin, $dbheslo); // připojíme se k db
        mysql_select_db($dbnazev) // vybereme db..
            or die("Chyba! Databáze nebo tabulka nebyla nalezena!");
        mysql_query("SET NAMES 'cp1250'"); // nastavíme kódování
//když odešleme formulář následující script data uloží to tabulky v databázi
if(isset($_POST['send']))
{
      
        $text = htmlspecialchars($_POST['text']); //při odeslání příspěvku se nebezpečné znaky změní na entity
        
        $vloz = "UPDATE members SET sex='muž' WHERE username='".$_SESSION['username']."'"; 
        $result=mysql_query($vloz);
       //a přesměrujeme na zobrazení článků
        echo '<script type="text/javascript" for="window" event="onLoad()">
        <!--
            window.location.href="settings.php?edit=ok"
        // --> </script>';    
}
$edit = htmlspecialchars($_GET['edit']);
if($edit == "ok")
    { echo '<b>Údaje byly vloženy</b>'; } // vypíšeme úspěšnost 
mysql_close(); //odpojíme se z db

//define page title
$title = 'Login';

//include header template
require('layout/header.php'); 
?>
<?php include "./slider.php";?>
    
<div class="container">

    <div class="row">

        <div class="col-xs-12 col-sm-8 col-md-6 col-sm-offset-2 col-md-offset-3">
            <form role="form" method="post" action="" autocomplete="off">
                <h2>Přihlášení</h2>
                <p><a class="href" href='./'>Vrátit se na první stránku - REGISTRACE</a></p>
                <hr>

                <?php
                session_start();
                if(isset($error)){
                    foreach($error as $error){
                        echo '<p class="bg-danger">'.$error.'</p>';
                    }
                }

                if(isset($_GET['action'])){

                    //check the action
                    switch ($_GET['action']) {
                        case 'active':
                            echo "<h2 class='bg-success'>Váš účet je nyní aktivní, můžete se přihlásit.</h2>";
                            break;
                        case 'reset':
                            echo "<h2 class='bg-success'>Prosím zkontrolujte e-mailovou schránku pro aktivaci účtu.</h2>";
                            break;
                        case 'resetAccount':
                            echo "<h2 class='bg-success'>Heslo bylo úspěšně změněno. Můžete se přihlásit</h2>";
                            break;
                    }

                }

                

 
    
                ?>

                <div class="form-group">
                    <input type="text" name="username" id="username" class="form-control input-lg" placeholder="User Name" value="<?php if(isset($error)){ echo $_POST['username']; } ?>" tabindex="1">
                </div>

                <div class="form-group">
                    <input type="password" name="password" id="password" class="form-control input-lg" placeholder="Password" tabindex="3">
                </div>
                
                <div class="row">
                    <div class="col-xs-9 col-sm-9 col-md-9">
                         <a class="href" href='reset.php'>Zapomněli jste heslo?</a>
                    </div>
                </div>
                
                <hr>
                <div class="row">
                    <div class="col-xs-6 col-md-6"><input type="submit" name="submit" value="Přihlásit" class="btn btn-primary btn-block btn-lg" tabindex="5"></div>
                </div><br><br>
            </form>
        </div>
    </div>
</div>


<?php 
//include header template
require('layout/footer.php'); 
?>

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: