Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: skrypt logowania z spersonalizowanymi kontami użytkowników
Forum PHP.pl > Forum > Przedszkole
dtrb
Witam.

Ma może ktoś z Państwa skrypt php rejestracji oraz logowania użytkowników, ale żeby każde założone konto było spersonalizowane, czyli każdy użytkownik widzi rzeczy przeznaczone tylko dla niego...

Ewentualnie proszę o pomoc/skrypt z zapytaniem SELECT do bazy w takim kształcie, aby pobierało wybrane dane z bazy dla danego zalogowanego w sesji użytkownika.

Bardzo proszę o pomoc.
Daiquiri
Jeżeli prosisz o pomoc, to pokaż co już masz - myślę, że znajdą się tutaj osoby, które Ci pomogą smile.gif.
dtrb
CODE
<?php
ob_start();
session_start(); // rozpoczęcie sesji
?>

<?php include('header.php'); ?>

<h2>&raquo; System rejestracji użytkowników<br />PHP & MySQL</h2>
<div class="content">

<?php
// jeżeli użytkownik jest zalogowany wyświetlamy inforamcję
if (isset($_SESSION['login'])) {
echo '<p><img class="user" src="img/user.png">Jesteś zalogowany jako: <strong>'.$_SESSION['login'].'</strong></p>';
}

else {
echo '';
}

?>
<h3>Nasz system posiada:</h3>
<p>
<img class="tick" src="img/tick.png" alt="" /> Rejestrację (wraz z wbudowaną walidacją <strong>reCAPTCHA</strong>),<br />
<img class="tick" src="img/tick.png" alt="" /> Logowanie,<br />
<img class="tick" src="img/tick.png" alt="" /> Przypominanie hasła,<br />
<img class="tick" src="img/tick.png" alt="" /> Weryfikację konta poprzez e-mail,<br />
<img class="tick" src="img/tick.png" alt="" /> Zmianę danych użytkownika.<br />
</p>

</div>




<?php include('footer.php'); ?>


I w tym miejscu wyświetla się nazwa zalogowanego użytkownika:

CODE
echo '<p><img class="user" src="img/user.png">Jesteś zalogowany jako: <strong>'.$_SESSION['login'].'</strong></p>';


A jak mam zrobić, żeby prócz tej nazwy zaczytywały się inne wybrane przeze mnie dane z bazy danych tylko dla tego danego użytkownika zalogowanego.

Załóżmy, że mamy dwóch użytkowników A i B. Użytkownik A ma przypisaną wartość 12, a użytkownik B ma przypisaną wartość 9. Chcę tak zrobić, że po zalogowaniu w panelu użytkownika A widać jego wartość 12, a jak zaloguje się użytkownik B widzi w tym samym miejscu przypisaną do niego wartość 9.
Tak, aby użytkownicy nie widzieli na wzajem szczegółowych danych tj. osobowych.
kadlub
nie wiem jaką masz tabele userów w bazie danych

ale

  1. $query="SELECT * FROM users WHERE user='SESSION[user]' ";
  2. $wynik=mysql_fetch_array($query);
  3.  
  4. echo $wynik['twoja_wartosc'];
  5.  
  6.  
ylk
Cytat(kadlub @ 31.01.2011, 12:52:47 ) *
  1. $query="SELECT * FROM users WHERE user='SESSION[user]' ";

chyba raczej
  1. $q="SELECT id FROM users WHERE user='{$_SESSION['user']}'";

i gdzie zjadłeś
  1. $r=mysql_query("$q");

questionmark.gif
Cóż to za niechlujna forma pomocy? winksmiley.jpg
kadlub
faktycznie zjadłem mysql_query i $_

a skąd wiesz że chodzi mu tylko o id
a zapytanie jest poprawne bo mi działa bez zastrzeżeń nie potrzebne są klamerki jak chcesz to sobie sprawdź

  1.  
  2. $query=mysql_query("SELECT * FROM users WHERE user='$_SESSION[user]' ");
  3.  
  4. $wynik=mysql_fetch_array($query);
  5.  
  6.  
  7.  
  8. echo $wynik['twoja_wartosc'];
  9.  
ylk
OK, faktycznie nie chodzilo mu tylko o id usera smile.gif
A co do klamerek, to owszem, dziala bez, ale zajmuje wiecej czasu, bo PHP najpierw probuje wstawic wartosc stalej a potem dopiero traktuje to jako string. Roznice sa pewnie minimalne ale niemniej jednak dobrą praktyką jest wstawianie klamerek smile.gif
kadlub
też prawda
dtrb
mam taką bazę danych:

CREATE TABLE `rejestracja` (
`id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`imie` VARCHAR(100) NOT NULL,
`nazwisko` VARCHAR(100) NOT NULL,
`login` VARCHAR(30) NOT NULL,
`haslo` VARCHAR(50) NOT NULL,
`email` VARCHAR(100) NOT NULL,
`kod` VARCHAR(32) NOT NULL,
`data` DATETIME NOT NULL,
`status` TINYINT(1) DEFAULT 0,

PRIMARY KEY (`id`)
)
ENGINE=MyISAM DEFAULT CHARACTER SET latin1
COLLATE latin1_general_cs AUTO_INCREMENT=0;


i chciałbym żeby pobrać z bazy imię i nazwisko dla danego użytkownika żeby było widoczne po zalogowaniu

i dodałem taki kod


<?php
$connect = mysql_connect("localhost","root","haslo","baza");
$query=mysql_query("SELECT * FROM rejestracja WHERE login='$_SESSION[login]' ");
$wynik=mysql_fetch_array($query);
echo $wynik['nazwisko'];
?>


ale chyba coś w nim nie tak i chyba w złym miejscu tongue.gif
kadlub
  1.  
  2. $query=mysql_query("SELECT imie, nazwisko FROM rejestracja WHERE login='$_SESSION[login]' ");
  3.  
  4. $wynik=mysql_fetch_array($query);
  5.  
  6. echo $wynik['imie'];
  7.  
  8. echo $wynik['nazwisko'];
  9.  

a co się dzieje??
ylk
jeszcze zapomniales po polaczeniu z serwerem MySQL wybrac bazy na ktorej chcesz pracowac:
  1. mysql_select_db('mojabaza');
dtrb
działa teraz smile.gif


a teraz trudniejsza czesc tongue.gif jak zrobić zeby u użytkownika A w menu pojawiła sie strona o nazwie page10.php a u użytkownika B strona page12.php?questionmark.gif?
kadlub
daj if i include
ylk
Nie rozumiem dokładnie, co chcesz osiągnąć, ale możesz sobie do bazy z userami dodać kolejną kolumnę, powiedzmy 'page', gdzie bedzie zapisany adres strony dla poszczegolnych uzytkownikow, i potem w menu wyswietlac $wynik['page']
dtrb
zostosowałem baze danych i działa fajnie smile.gif


echo '<a href="'.$wynik['page'].'">'.$wynik['page'].'</a>';




smile.gif


a można zmienić format numeracji pola id?? bo baza numeruje kolejno 1, 2, 3, 4, 5, ... a chciałbym, żeby był numer w innym formacie czyli np. miesiąc rok i numer kolejny czyli 0120110001, 0120110002, ...
ylk
nie, nie można. pole auto_increment to musi być int. ale możesz osobno przechowywać datę w tabeli i generować sobie na jej podstawie numer jaki ci się podoba smile.gif
dtrb
ale musze w tedy recznie wprowadzac numer przez formularz a chcialby zeby ten numer przy rejestracji uzytkownika sam sie dodwal do bazy w pewnym formacie
ylk
no to tworzysz sobie w tabeli nowe pole, powiedzmy 'nr' i nawiązując do formatu, który podałeś (0120110001) generujesz go sobie np. tak:
  1. // najpierw pobierasz id ostatnio zarejestrowanego usera
  2. $r=mysql_query("SELECT MAX(id) FROM users");
  3. $row=mysql_fetch_row($r);
  4. $id=$row[0];
  5.  
  6. // teraz generujesz sobie numerek w formacie ktory chciales
  7. $date=date("mY");
  8. if (strlen($id)<4) for ($licz=0; $licz<strlen($id)-1; $licz++) $nu_id=0."$nu_id"; // uzupelnia zerami z przodu
  9. $nr=$date.$nu_id;
  10.  
  11. //i zapisujesz spowrotem do bazy
  12. mysql_query("UPDATE users SET nr='$nr' WHERE id=$id");
dtrb
i to wrzucic do pliku gdzie jest skrypt rejestracji uzytkownika?
ylk
tak, zaraz po tym jak go dodasz do bazy.
dtrb
To jest kod rejestracji użytkownika

  1. <?php
  2. session_start(); // rozpoczęcie sesji
  3. ?>
  4.  
  5. <?php include('header.php'); ?>
  6.  
  7. <h2>&raquo; Zarejestruj się</h2>
  8. <div class="content">
  9.  
  10.  
  11. <?php
  12.  
  13.  
  14. if (!isset($_SESSION['login'])) { // dostęp dla zalogowanego użytkownika
  15.  
  16. include 'inc/db.php'; // połączenie się z bazą danych
  17. $tabela = 'rejestracja'; // zdefiniowanie tabeli MySQL
  18. include 'inc/recaptchalib.php'; // dołączenie modułu reCAPTCHA
  19. $privatekey = "6Le9C8ESAAAAAM8Ldpiu0pYQhtF1aofa0VF5AhZR"; // prywatny klucz reCAPTCHA
  20. $publickey = "6Le9C8ESAAAAADb4VUHh3JWcsMeb4mMQg4sCY_B3"; // publiczny klucz reCAPTCHA
  21.  
  22. if ($_POST["wyslane"]) { // jeżeli formularz został wysłany, to wykonuje się poniższy skrypt
  23.  
  24. // filtrowanie treści wprowadzonych przez użytkownika
  25. $login = htmlspecialchars(stripslashes(strip_tags(trim($_POST["login"]))), ENT_QUOTES);
  26. $haslo = $_POST["haslo"];
  27. $haslo2 = $_POST["haslo2"];
  28. $email = htmlspecialchars(stripslashes(strip_tags(trim($_POST["email"]))), ENT_QUOTES);
  29. $email2 = htmlspecialchars(stripslashes(strip_tags(trim($_POST["email2"]))), ENT_QUOTES);
  30. $imie = htmlspecialchars(addslashes(strip_tags(trim($_POST["imie"]))), ENT_QUOTES);
  31. $nazwisko = htmlspecialchars(addslashes(strip_tags(trim($_POST["nazwisko"]))), ENT_QUOTES);
  32. $resp = recaptcha_check_answer ($privatekey,
  33. $_SERVER["REMOTE_ADDR"],
  34. $_POST["recaptcha_challenge_field"],
  35. $_POST["recaptcha_response_field"]);
  36.  
  37. // system sprawdza czy prawidło zostały wprowadzone dane
  38. if (strlen($login) < 3 or strlen($login) > 30 or !eregi("^[a-zA-Z0-9_.]+$", $login)) {
  39. $blad++;
  40. echo '<span class="blad">Proszę poprawny wprowadzić login (od 3 do 30 znaków).</span>';
  41. } else {
  42. $wynik = mysql_query("SELECT * FROM $tabela WHERE login='$login'");
  43. if (mysql_num_rows($wynik) <> 0) {
  44. $blad++;
  45. echo '<span class="blad">Podana nazwa użytkownika została już zajęta.</span>';
  46. }
  47. }
  48. if (strlen($haslo) < 6 or strlen($haslo) > 30 ) {
  49. $blad++;
  50. echo '<span class="blad">Proszę poprawnie wpisać hasło (od 6 znaków do 30 znaków).</span>';
  51. }
  52. if ($haslo !== $haslo2) {
  53. $blad++;
  54. echo '<span class="blad">Podane hasła nie są ze sobą zgodne.</span>';
  55. }
  56. if (!eregi("^[0-9a-z_.-]+@([0-9a-z-]+\.)+[a-z]{2,4}$", $email)) {
  57. $blad++;
  58. echo '<span class="blad">Proszę wprowadzić poprawnie adres email.</span>';
  59. } else {
  60. $wynik = mysql_query("SELECT * FROM $tabela WHERE email='$email'");
  61. if (mysql_num_rows($wynik) <> 0) {
  62. $blad++;
  63. echo '<span class="blad">Podany adres e-mail jest już zajęty.</span>';
  64. }
  65. }
  66. if ($email !== $email2) {
  67. $blad++;
  68. echo '<span class="blad">Podane adresy e-mail nie są ze sobą zgodne.</span>';
  69. }
  70. if (!$resp->is_valid) {
  71. $error = $resp->error;
  72. echo '<span class="blad">Proszę wpisać poprawnie wyrazy z obrazka.</span>';
  73. $blad++;
  74. }
  75.  
  76. // jeżeli nie ma żadnego błedu, użytkownik zostaje zarejestronwany i wysłany do niego e-mail z linkiem aktywacyjnym
  77. if ($blad == 0) {
  78.  
  79. $haslo = md5($haslo); // zaszyfrowanie hasla
  80. $kod = uniqid(rand()); // tworzenie unikalnego kodu dla użytkownika
  81.  
  82. $wynik = mysql_query("INSERT INTO $tabela VALUES('', '$imie', '$nazwisko', '$login', '$haslo', '$email', '$kod', NOW(), '')");
  83. if ($wynik) {
  84. $list = "Witaj $login !
  85. Kliknij w poniższy link, aby aktywować swoje konto. <a href="http://www.trb.home.pl/v/weryfikacja.php?weryfikacja=potwierdz&kod=$kod&quot;;" target="_blank">http://www.trb.home.pl/v/weryfikacja.php?w...#036;kod";</a>
  86. mail($email, "Rejestracja użytkownika", $list, "From: <sekretariat@dtrb.pl>");
  87. echo '<p>Dziękujemy za rejestrację! W ciągu nabliższych 5 minut dostaniesz wiadomość e-mail z dalszymi wskazówkami rejestracji.</p>';
  88. mysql_close($polaczenie);
  89. }
  90. }
  91. mysql_close($polaczenie);
  92. }
  93.  
  94. // tworzenie formularza HTML
  95. echo <<< KONIEC
  96.  
  97.   <div class="formularz">
  98.   <form class="form" action="rejestracja.php" method="post">
  99.   <input type="hidden" name="wyslane" value="TRUE" />
  100.  
  101. <p>
  102. Pola oznaczone gwiazdką <span class="req">*</span> to pola wymagane.
  103. </p>
  104.  
  105. <p>
  106. <div class="label"><label for="imie">Imię</label></div>
  107. <input type="text" name="imie" id="imie" />
  108. </p>
  109.  
  110. <p>
  111. <div class="label"><label for="nazwisko">Nazwisko</label></div>
  112. <input type="text" name="nazwisko" id="nazwisko" />
  113. </p>
  114.  
  115. <p>
  116. <div class="label"><label for="login">Login <span class="req">*</span></label></div>
  117. <input type="text" name="login" id="login" />
  118. </p>
  119.  
  120. <p>
  121. <div class="label"><label for="haslo">Hasło <span class="req">*</span></label></div>
  122. <input type="password" name="haslo" id="haslo" />
  123. </p>
  124.  
  125. <p>
  126. <div class="label"><label for="haslo2">Powtórz hasło <span class="req">*</span></label></div>
  127. <input type="password" name="haslo2" id="haslo2" />
  128. </p>
  129.  
  130. <p>
  131. <div class="label"><label for="email">Email <span class="req">*</span></label></div>
  132. <input type="text" name="email" id="email" />
  133. </p>
  134.  
  135. <p>
  136. <div class="label"><label for="email2">Powtórz email <span class="req">*</span></label></div>
  137. <input type="text" name="email2" id="email2" />
  138. </p>
  139. KONIEC;
  140. echo '<div class="recaptcha">';
  141. echo recaptcha_get_html($publickey); // wyświetlanie reCAPTCHA
  142. echo '</div>';
  143. echo <<< KONIEC
  144.   <p class="submit">
  145.   <input type="submit" value="Zarejestruj mnie" />
  146.   </p></form>
  147. KONIEC;
  148.  
  149. } else {
  150. header('Location: /index.php');
  151. }
  152. ?>
  153.  
  154.  
  155. </div>
  156. <?php include('footer.php'); ?>



Mam problem z umieszczeniem tego kodu do generowania tego numeru... Gdzie nie wstawie to niw działa...
ylk
za
  1. $wynik = mysql_query("INSERT INTO $tabela VALUES('', '$imie', '$nazwisko', '$login', '$haslo', '$email', '$kod', NOW(), '')");
dtrb
cały czas mi się wyświetla:


Parse error: syntax error, unexpected '"' in /v/rejestracja.php on line 93
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.