Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [smarty] Skrypt nie przekazuje wartości zmiennej do .tpl
Forum PHP.pl > Forum > Gotowe rozwiązania > Systemy szablonów
Sagge
Witam,
Jak w temacie, skrypt chyba nie przekazuje zmiennej do tpla. przy poprawnym logowaniu pokazuje się pusta strona zamiast
Kod
Zostałeś zalogowany jako {$login}<br>
<a href="logout.php">Wyloguj się</a>
przy wpisaniu błędnych danych pokazuje sie formularz ponownie zamiast formularza+"Dane nie zgadzają się!". Poniżej wklejam oba pliki. To napewno moj blad, robię pierwsze kroki ze smarty. Jesli ktoś zna rozwiązanie to proszę o wypowiedź, pozdrawiam.

index.tpl:
  1. <?php
  2. {if $login_status eq 1}
  3. Zostałeś zalogowany jako {$login}<br>
  4. <a href="logout.php">Wyloguj się</a>
  5.  
  6. {else}
  7. {if $blad eq 1}
  8. Dane nie zgadzają się!
  9. <form id="logowanie" method="post" action="{$smarty.server.php_self}">
  10. <b>Zaloguj się</b><br>
  11. Login:<br>
  12. <input id ="login" type ="text" name ="login" size="8" maxlength ="20"><br>
  13. <br>
  14. Hasło:<br>
  15. <input id ="password" type ="password" name ="password" size="8" maxlength ="15"><br>
  16. <br>
  17. <input id ="zaloguj" type ="submit" name ="zaloguj" value ="Zaloguj">
  18. </form>
  19. {else}
  20. <form id="logowanie" method="post" action="{$smarty.server.php_self}">
  21. <b>Zaloguj się</b><br>
  22. Login:<br>
  23. <input id ="login" type ="text" name ="login" size="8" maxlength ="20"><br>
  24. <br>
  25. Hasło:<br>
  26. <input id ="password" type ="password" name ="password" size="8" maxlength ="15"><br>
  27. <br>
  28. <input id ="zaloguj" type ="submit" name ="zaloguj" value ="Zaloguj">
  29. </form>
  30. {/if}
  31. {/if}
  32. ?>



index.php:
  1. <?php
  2. include("config.php");
  3. require_once('Smarty/Smarty.class.php'); 
  4. $smarty = new Smarty;
  5. $smarty->template_dir = "Style/";
  6. $smarty->compile_dir  ='Smartownia/templates_c/';
  7. $smarty->config_dir  = 'Smartownia /configs/';
  8. $smarty->cache_dir = 'Smartownia /cache/';
  9. //connect do bazy
  10. $connect = @mysql_connect ($host, $name, $pass) or die (mysql_error());
  11. mysql_select_db($dbname) or die (mysql_error());
  12.  
  13.  
  14.  
  15.  if (isset($_POST['login']) && isset($_POST['password'])) {
  16. $login = $_POST['login'];
  17. $password = $_POST['password'];
  18. $password = md5($password);
  19. $sql = "SELECT id FROM users WHERE login='".$login."' and password='".$password."'";
  20. $result = mysql_query($sql) or die (mysql_error());
  21. if (mysql_num_rows($result) == 1) {
  22. $_SESSION['zalogowany'] = 1;
  23. return true;
  24. } else {
  25.  $blad = 1;
  26. }
  27. }
  28. $smarty->assign('login_status', $_SESSION['zalogowany']);
  29. $smarty->assign('login', $login);
  30. $smarty -> display('index.tpl'); 
  31. ?>
Cezar708
na początek trzy błędy, dwa w index.php i jeden w index.tpl:

1. Nie masz wystartowanej sesji a chcesz pobrać dane z tabeli $_SESSION. Po prostu umieść session_start() na początku pliku index.php

2. funkcja ob_end_flush() nie ma racji bytu bez ob_start(), więc umieść również ob_start() na początku pliku index.php

3. Plik index.tpl: Mimo warunku {if $blad eq 1} zawsze wyświetla Ci to samo, ponieważ i po {if...} i po {else} masz dokładnie taki sam fragment kodu.
Sagge
Ok, zadziałało jak zrobiłem tak jak poniżej pokazuję. Natomiast nadal jest problem. bo gdy wpiszę bledne dane to pojawiaja mi sie 2 formularze. Jak się umieszcza if-y w if-ach?:
Pzdr

  1. <?php
  2. include("config.php");
  3. require_once('Smarty/Smarty.class.php'); 
  4. $smarty = new Smarty;
  5. $smarty->template_dir = "Style/";
  6. $smarty->compile_dir  ='Smartownia/templates_c/';
  7. $smarty->config_dir  = 'Smartownia /configs/';
  8. $smarty->cache_dir = 'Smartownia /cache/';
  9. //connect do bazy
  10. $connect = @mysql_connect ($host, $name, $pass) or die (mysql_error());
  11. mysql_select_db($dbname) or die (mysql_error());
  12.  
  13.  
  14.  
  15.  if (isset($_POST['login']) && isset($_POST['password'])) {
  16. $login = $_POST['login'];
  17. $password = $_POST['password'];
  18. $password = md5($password);
  19. $sql = "SELECT id FROM users WHERE login='".$login."' and password='".$password."'";
  20. $result = mysql_query($sql) or die (mysql_error());
  21. if (mysql_num_rows($result) == 1) {
  22.  
  23. ############## Wprowadzone zmiany
  24.  
  25. $_SESSION['zalogowany'] = 1;
  26. $smarty->assign('login_status', $_SESSION['zalogowany']);
  27. $smarty->assign('login', $login);
  28. $smarty -> display('index.tpl');
  29. return true;
  30. } else {
  31.  $blad = 1;
  32.  $smarty->assign('blad', $blad);
  33.  $smarty -> display('index.tpl');
  34.  #/####################
  35. }
  36. }
  37. $smarty -> display('index.tpl'); 
  38.  
  39. ?>
Cezar708
Cytat(Sagge @ 21.02.2008, 16:34:47 ) *
bo gdy wpiszę bledne dane to pojawiaja mi sie 2 formularze.


bo dwukrotnie formularz wyświetlasz za pomocą $smarty->display(), usuń te dwa display ze środka ifów, tak jak:
  1. <?php
  2. // ucięta część kodu
  3. if (isset($_POST['login']) && isset($_POST['password'])) {
  4. $login = $_POST['login'];
  5. $password = $_POST['password'];
  6. $password = md5($password);
  7. $sql = "SELECT id FROM users WHERE login='".$login."' and password='".$password."'";
  8. $result = mysql_query($sql) or die (mysql_error());
  9. if (mysql_num_rows($result) == 1) {
  10.  
  11. ############## Wprowadzone zmiany
  12.  
  13. $_SESSION['zalogowany'] = 1;
  14. $smarty->assign('login_status', $_SESSION['zalogowany']);
  15. $smarty->assign('login', $login);
  16. // $smarty -> display('index.tpl'); - usuń to
  17. $return = true; // nie wiem czy Twój kod to nie część funkcji
  18. } else {
  19. $blad = 1;
  20. $smarty->assign('blad', $blad);
  21. // $smarty -> display('index.tpl'); - usuń to
  22. #/####################
  23. }
  24. }
  25. $smarty -> display('index.tpl'); // tylko jeden raz wyświetlanie wystarczy
  26. return $return; // jeśli to konieczne :)
  27. ?>


Cytat(Sagge @ 21.02.2008, 16:34:47 ) *
Jak się umieszcza if-y w if-ach?:


najnormalniej w świecie możesz zagnieżdżać

Pozdrawiam
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.