Autor | Zpráva | ||
---|---|---|---|
Milan Sobotka Profil |
#1 · Zasláno: 14. 2. 2015, 11:28:58 · Upravil/a: Milan Sobotka
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 |
#3 · Zasláno: 14. 2. 2015, 11:46:08 · Upravil/a: Milan Sobotka
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 |
#4 · Zasláno: 14. 2. 2015, 12:10:19
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 |
#5 · Zasláno: 14. 2. 2015, 12:14:31
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 |
#6 · Zasláno: 14. 2. 2015, 12:21:44
Milan Sobotka:
„pořád to háže chybu“ Akú? Skús si vypísať var_dump($_SESSION['username']); .
|
||
Milan Sobotka Profil |
#7 · Zasláno: 14. 2. 2015, 12:33:21 · Upravil/a: Milan Sobotka
No jako ze je bila obrazovka... Klasicka chyba v php... ☺️
a to var_dump mamvypsat na zacatku infexu? |
||
Milan Sobotka Profil |
#8 · Zasláno: 14. 2. 2015, 13:46:28
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 |
#10 · Zasláno: 14. 2. 2015, 14:11:33 · Upravil/a: Milan Sobotka
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 |
#11 · Zasláno: 14. 2. 2015, 20:28:41
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 |
#12 · Zasláno: 14. 2. 2015, 20:32:05
Reaguji na Milana Sobotku:
Za SQL příkaž (řádek s $vloz ) přidej echo($vloz); a pošli výsledek.
|
||
Milan Sobotka Profil |
#13 · Zasláno: 14. 2. 2015, 20:36:03 · Upravil/a: Milan Sobotka
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 |
#14 · Zasláno: 14. 2. 2015, 20:40:25
Reaguji na Milana Sobotku:
$vloz = "UPDATE members SET pohlavi='muž' WHERE username='" . $_SESSION['username'] . "'"; echo($vloz); 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 |
#15 · Zasláno: 14. 2. 2015, 20:44:55
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 |
#16 · Zasláno: 14. 2. 2015, 20:46:56
Reaguji na Milana Sobotku:
Tak místo echo použij die .
|
||
Milan Sobotka Profil |
#17 · Zasláno: 14. 2. 2015, 20:47:58 · Upravil/a: Milan Sobotka
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 Spýtam sa ťa inak: ako v tej aplikácii vyzerá prihlasovací mechanizmus? |
||
Milan Sobotka Profil |
#19 · Zasláno: 14. 2. 2015, 21:02:11
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 |
#20 · Zasláno: 15. 2. 2015, 10:49:33
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 |
#21 · Zasláno: 15. 2. 2015, 11:18:09
Reaguji na Milana Sobotku:
Na začátek souboru includes/config.php vlož session_start(); .
|
||
Milan Sobotka Profil |
#22 · Zasláno: 15. 2. 2015, 11:49:38 · Upravil/a: Milan Sobotka
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 |
#23 · Zasláno: 15. 2. 2015, 12:50:38
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'); ?> |
||
Časová prodleva: 10 let
|
0