Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z $_POST i smarty3
Forum PHP.pl > Forum > PHP
Tibod
Dawno mnie to nie było, i chyba bardzo dużo zapomniałem, bo już zatrzymał mnie jakiś szczegół.

Zwykła lista SELECT, kilka wartości jest na stała, a kilka z bazy. Kliknięcie "Zaloguj" z wybraną elementem stałym działa, a z elementem z bazy już nie.

login.tpl
  1. <form action="login.php" method="post">
  2. <select name="login_id" onchange="">
  3. <option value="a">test 1</option>
  4. {foreach $osoby as $osoba}
  5. <option value="{$osoba@key}">{$osoba}</option>
  6. {/foreach}
  7. <option value="9">test 2</option>
  8. </select>
  9. <input type="submit" value="Zaloguj" />
  10. </form>


login.php
  1. <?php
  2.  
  3. require 'libs/Smarty.class.php';
  4. require 'inc/mysql.php';
  5. require 'inc/start.php';
  6.  
  7. require 'inc/echo_array.php';
  8.  
  9. my_mysql_connect();
  10. $smarty = new Smarty;
  11.  
  12. var_dump($_POST);
  13.  
  14. $komunikat = '';
  15.  
  16. if (isset($_POST['login_id'])){
  17. $login_id=intval($_POST['login_id']);
  18. $komunikat .= '$login_id = '.$login_id;
  19.  
  20. echo($login_id);
  21.  
  22. $query='SELECT id
  23. FROM osoby
  24. WHERE id="'.$login_id.'"
  25. LIMIT 1';
  26.  
  27. $result = mysql_query($query)
  28. or die (include 'inc/error_raport.php');
  29.  
  30. if (mysql_num_rows($result)>0){
  31. $komunikat .= ' są rekordy ';
  32. while ($row=mysql_fetch_array($result)){
  33. $komunikat .= '$row[nazwa] = '.$row['nazwa'];
  34. $_SESSION['login_id'] = $login_id;
  35. $_SESSION['login'] = $row['nazwa'];
  36.  
  37. Header('Location: index.php');
  38. }
  39. }
  40. else{
  41. $_SESSION['login_id'] = -1;
  42. $komunikat .= 'Nie udało się zalogować';
  43. }
  44. } else {
  45. $komunikat = 'brak posta';
  46.  
  47. $query='SELECT id, nazwa
  48. FROM osoby
  49. WHERE id = 2
  50. ORDER BY nazwa';
  51.  
  52. $result = mysql_query($query)
  53. or die (include 'inc/error_raport.php');
  54.  
  55. if (mysql_num_rows($result)>0){
  56. while ($row=mysql_fetch_array($result)){
  57. $osoby[$row['id']]=$row['nazwa'];
  58. }
  59. }
  60.  
  61. var_dump($osoby);
  62.  
  63. $smarty->assign('osoby', $osoby);
  64. }
  65.  
  66. $smarty->assign('komunikat', $komunikat);
  67.  
  68. $smarty->display('login.tpl');
  69.  
  70. ?>
nospor
A patrzyłeś jak wygląda <option> już po wygenerowaniu? (źródło strony)

ps:
{$osoba@key}
co to niby ma robić?
Tibod
Patrzyłem i wygląda idealnie

  1. <form action="login.php" method="post">
  2. <select name="login_id" onchange="">
  3. <option value="a">test 1</option>
  4. <option value="2">from db</option>
  5. <option value="9">test 2</option>
  6. <input type="submit" value="Zaloguj" />
  7. </form>


edit:
{$osoba@key} zwraca index w tablicy dla danej osoby
nospor
To w czym dokładnie problem?
Co zwracają twoje poszczególne kody debugujące typu var_dump oraz echo?

ps: masz jeszcze błąd poboczny:
$_SESSION['login'] = $row['nazwa'];
a w select nie pobierasz nazwa
Tibod
Podgląd z budowy tablicy osoby jest ok:

array
2 => string 'from db' (length=7)

co zresztą potwierdza dobrze zbudowana lista SELECT.

Gdy wybiorę z listy "test 1" lub "test 2" dostaję:

['login_id'] = "a"


Gdy wybiorę "from db" widzę tylko "brak posta"

Zawsze po wyborze "from db" lista wczytuje się całą (3 pozycje), a gdy coś innego to tylko 2 pozycje. Co oznacza, że POST nie przychodzi.

Korzystam z WampServera 2.2, PHP 5.3.8, Apache 2.2.21

Edit:
Błąd poboczny poprawiony smile.gif
nospor
Prosiłem o
var_dump($_POST);
Tibod
dla pozycji z bazy:


dla innych:
  1. 'login_id' => string 'a' (length=1)
nospor
$_POST tak wyglada? To nie możliwe.
Po pierwsze:postem powinien też iść submit
Po drugie: posta nic nie obchodzi czy coś jest z bazy czy nie. post ma w select option o value="2" i jesli tylko ona jest zaznaczona to ją wysyła.
Tibod
To wiem, dlatego tym bardziej się dziwię o co chodzi.
Zrobiłem test pod Firefox-em i też to samo.

Http Live headers przy "test 1" (i 2) pokazuje, że przekazano POST, a dla tego z DB pokazuje tylko GET-a.

edit:
Rozwiązane. Wszystko przez
  1. ...
  2. Header('Location: index.php');
  3. ...

i błędne sprawdzanie zalogowania na index.php. Skrypt się zapętlał smile.gif
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.