| 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: 11 let
|
|||
0