Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Kilka drobnych pytań
Forum PHP.pl > Forum > Przedszkole
BugsBunny
Witam,
od dawna mnie nurtuje pare problemów, które za każdym pisaniem skryptów powracają.



  1. <?php
  2. if(isset($_GET['sprawdz']))  {
  3.  $db = new db();
  4.  $db->fetcharray("SELECT users_pass FROM users WHERE users_login ='".$_POST['nick33']."' ");
  5.  if(!empty($db->rekordy)){
  6.  
  7.  
  8. if($db->rekordy[0]['users_pass'] == (md5($_POST['pass33']))){
  9.  
  10.  $_SESSION['osoba']=$_POST['nick33'];
  11. header('Location: index.php');
  12. }
  13.  else { echo "podales nieprawidlowe dane";}
  14.  
  15. }
  16. }
  17. ?>


1. Estetyka

To jest moja metoda werfikacji usera.

Jak w smarty zrobić żęby mi estetycznie pokazywało np. na czerwono informacje nad logwaniem o błednych danych a nie jak teraz pod całym szablonem. Wiązało by się to z osdświeżeniem całego szablonu.

2. Do tego samego kodu.

Jak przekierować żeby zmienił się też adres, bo np. tutaj zmienia się środek a adres pozostaje stary co powoduje wiele problemów.

3.BAZA DANYCH

Używam tutaj klasy DB więc czy mam za kazdym zapytaniem zamykać połączenie czy po wylgoowaniu?

4. Dwa przyciski

Jak zrobić w formularzu dwa przyciski. Bo submit możę być jeden a drugi musiałby się odnosić do jakiejś Funkcji JS. Można odnieść drugi button do funkcji php, np. żeby zrobić pogdląd posta i zatwierdzanie?

Jak mi się coś jeszcze przypomni to dopiszę.

Z góry dziękuję za pomoc rolleyes.gif
SongoQ
Cytat
To jest moja metoda werfikacji usera.

I zla bo haslo tez sprawdzaj w zapytaniu a nie po wyciagnieciu z bazy.

Cytat
Używam tutaj klasy DB więc czy mam za kazdym zapytaniem zamykać połączenie czy po wylgoowaniu?

Po zakmnieciu skryptku polaczenie jest automatycznie zrywane. Robi sie tak ze na koniec sesji polaczenia polaczenie jest zamykane.
BugsBunny
a co z tymi przekierowaniami. Bo np. zrobiłem panel administracyjny na wzór phpBB czy na ramkach i kiedy w lewym menu umieściłem na dole przycisk wyloguj to musze odświeżyć stronę zeby mi się wylogowało. tak samo mam w logowaniem w powyższym przykładzie. Dopiero po odświeżeniu strony jestesm zalogowany.
KG-
Cytat
To jest moja metoda werfikacji usera.

Jak w smarty zrobić żęby mi estetycznie pokazywało np. na czerwono informacje nad logwaniem o błednych danych a nie jak teraz pod całym szablonem. Wiązało by się to z osdświeżeniem całego szablonu.


Przecież tworzenie szablonu polega na tym, że (w większości przypadków) najpierw przechodzisz przez cały lub część skryptu podstawiając wartości do szablonu a potem go generujesz. Co za problem zrobić np zmienną errtxt do której przekazujesz komunikat o błędzie.

  1. <?php
  2. $smarty->assign('errtxt', '');
  3.  
  4. if (jakis_warunek) {
  5. $smarty->assign('errtxt', 'Błędny login');
  6. } else {
  7. // reszta kodu
  8. }
  9.  
  10. $smarty->display('index.tpl');
  11. ?>


a w pliku szablonu coś w stylu:
Kod
(...)
<span class="error">{$errtxt}</span>
<p class="costam">Zawartość strony</p>
(...)

i będziesz miał wyświetlany błąd na górze strony, jeśli tylko zmienna $errtxt będzie coś zawierała.
Linijkę
  1. <?php
  2. $smarty->assign('errtxt', '');
  3. ?>
możesz pominąć jeśli masz error reporting wyższy niż E_NOTICE i/lub jeśli jesteś bałaganiarzem i lubisz zostawiać niezainicjalizowane zmienne.

Aha, i tak jak pisał SongoQ, kwestie obliczenia sumy md5 hasła i sprawdzenia czy taki user i hasło figurują w bazie pozostaw samej bazie, w skrypcie tylko sprawdzaj czy baza zwróciła 0 rekordow czy 1.
  1. SELECT `id`,`login`,`costam_innego` FROM `users` WHERE `login`='$login' AND `pass`=MD5($pass) LIMIT 1;


Ad2. Nie do końca rozumiem co masz na myśli, jeśli chodzi o przekierowanie na inny adres to po prostu go podaj w całości header('Location: http://jakis.adres.pl/index.php'). Druga sprawa - po header zawsze dawaj die, bo inaczej skrypt w pewnych warunkach może się wykonywać dalej niejako w tle mimo przekierowania.

Ad4. No tu możliwości jest wiele, możesz zrobić zwykły
Kod
<input type="button" onClick="document.location='adres_gdzie_ma_prowadzić_przycisk';">

możesz zrobić tak aby taki przycisk robił submit formularza przy pomocy JS, wcześniej ustawijąc np jakąś zmienną która zostanie wysłana z formularzem. Najlepiej poczytaj jakiś dobry tutorial do js a tam znajdziesz mnóstwo przykładów.
BugsBunny
No i nadal mam problem z tym header("Location:....");

w skrypcie index.php mam tak
  1. <?php
  2. if(!isset($_SESSION['osoba']))
  3. {header("Location:login.php");}
  4. ?>

i dalej stronka.

Kiedy nie będę zalogowany odrazu przeniesie mnie do login.php i adres w przeglądarce się zmieni na
http://10.1.1.133/~aktualnosci/admin/login.php

Jednak z drugiej strony nie jest już tak pięknie

LOGIN.php
  1. <?php
  2. $db->fetcharray("SELECT `users_login` FROM `users` WHERE `users_login`='".$_POST['nick33']."' AND `users_pass`= '".MD5($_POST['pass33'])."' ");
  3.  if($db->rekordy == TRUE){
  4.  
  5.  
  6.  $_SESSION['osoba']=$_POST['nick33'];
  7. header('Location: index.php');
  8. die;
  9. }
  10. ?>


Tutaj jak się zaloguje to jest biała strona. Muszę odświeżyć stronę żeby weszło do index.php
próbowałem z die, z exit i bez niczego po header.
KG-
A w login.php dajesz na początku session_start() ?

Tak na marginesie, lepiej zapamiętywać w sesji numer id użytkownika i ew. login i operować w zapytaniach do bazy na numerze id. Porównywanie liczb trwa o wiele krócej niż ciągów znakowych, nie mówiąć już o tym że baza i program będą bardziej spójne.
BugsBunny
Oczywiście w login.php daje na początku session_start()

Więc kolejne moje pytanie. Jakbym napisał klasę user to. po zalogowaniu stworzyłbym nową klase. Przy przełodowaniu na inną stronę ta kalsa by istniała?? Czy mógłbym wtedy zrobić odpuścić sesję i sprawdzanie klasy na kazdej stronie ?



Oczywiście w login.php daje na początku session_start()

Więc kolejne moje pytanie. Jakbym napisał klasę user to. po zalogowaniu stworzyłbym nową klase. Przy przełodowaniu na inną stronę ta kalsa by istniała?? Czy mógłbym wtedy zrobić odpuścić sesję i sprawdzanie klasy na kazdej stronie ?
KG-
Wtedy mógłbyś trzymać cały obiekt klasy w sesji, co mogłoby zaowocować zmniejszeniem zapytań do bazy. Obiekt ten tworzony by był w momencie logowania, wtedy też byłby zapamiętany w sesji, a potem na każdej podstronie sobie go stamtąd odczytujesz.

Tylko nie stosuj tego w stronach, w których dane użytkownika mogą zostać zmodyfikowane niezależnie od niego (tzn podejście klas w zmiennych sesji możesz stosować, tylko że część rzeczy będziesz musiał i tak pobierać z bazy).
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.