Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: przesylanie id formularzem albo linkiem, zapamietanie tego id
Forum PHP.pl > Forum > PHP
yogitubadzin
Witam, mam tu kawałek kodu php, który wyświetla mi z bazy nazwe kursu i id_grupy, chce uzyc id_grupy to przejscia w kolejny skrypt, ktory bedzie mial zapamietane id_grupy, tylko ze ten skrypt ktory jest ponizej nie robi tego co powinien wyswietla mi po kolei rozne formularze z jednym przyciskiem wyslij ale jak wysylam to zawsze ostatni pobierany id_grupy wysyla, probowalem zrobic to linkiem i metoda GET, ale nie moge bo potem jak wyswietlam z bazy to wystaje mi
pokaz_uzytkownicy_grupa_admin.php?id=147
zamiast
pokaz_uzytkownicy_grupa_admin.php
i nie wiem jak przeslac linkiem zeby tego id na koncu nie bylo, a te id psuje caly skrypt, wiec chcialem przeslac to formularze z jednym przycskiem.
Drugi problem jest taki, że jak przesyłam już ten id_grupy(linkiem i GETem sie niby dało ale potem wyświetlania w stylu
$link1 = "{$_SERVER['PHP_SELF']}?sort=lna";
wszystko psuły) więc jakbym już tym formularzem się dostał tam i nie miałbym id na końcu
pokaz_uzytkownicy_grupa_admin.php
to jak mam zapamiętać zmienną przesyłaną, ona widzi tylko pierwszy skrypt i jak przeładuję skrypt, czyli sortuje na tm skrypcie według nazwisko albo mam 40 użytkowników i wyświetla mi 10 i dzieli mi na 4 strony, to potem już id_grupy nie pamięta i jest pusto. Nie wiem jak zrobić referencję, na necie wszędzie opisują tylko do funkcji.


  1. // Utwórz zapytanie.
  2. $query = "SELECT nazwa_grupy, id_grupy FROM grupa ORDER BY $order_by LIMIT $start, $display";
  3. $result = @mysql_query ($query); // Wykonaj zapytanie.
  4.  
  5. // Nagłówek tabeli.
  6. echo '<table class="szerokosc" >
  7. <tr>
  8.  
  9. <td align="left"><b><a href="' . $link1 . '">Nazwa grupy</a></b></td>
  10. <td align="left"><b>Pokaż<br/>użytkowników<br/>w grupie</b></td>
  11.  
  12. </tr>
  13. ';
  14.  
  15.  
  16. // Pobierz i wyświetl wszystkie rekordy.
  17. $bg = '#eeeeee'; // Określ kolor tła.
  18. while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
  19.  
  20. $bg = ($bg=='#eeeeee' ? '#ffffff' : '#eeeeee'); // Zmień kolor tła.
  21. echo '<tr bgcolor="' . $bg . '">
  22. <td align="left">' . $row['nazwa_grupy'] . '</td>
  23. <td align="left">
  24. <form method="get" action="pokaz_uzytkownicy_grupa_admin.php" id="contactform">
  25. <ol>
  26. <li>
  27. <input type="submit" value="Użytkownicy" class="submit"/>
  28. </li>
  29. <input type="hidden" name="submitted" value="true" />
  30. <input type="hidden" name="id_grupy" value="' . $row['id_grupy'] . '" />
  31.  
  32. '; echo '<br/>'.$row['id_grupy'].''; echo '<br/>Kolejne id pobrane z bazy'.$row['id_grupy'].'';echo'
  33. </ol>
  34. </td>
  35.  
  36. </tr>
  37. ';
  38. }
  39. echo '</table>';


pozdrawiam, początkujący
Kshyhoo
Skoro masz w formularzu:
  1. <input type="hidden" name="id_grupy" value="' . $row['id_grupy'] . '" />

to musi to przejść do $_GETa.
Zobacz na końcu skryptu:
  1. print_r($_GET);
yogitubadzin
Np. mam pobierane id_grupy z bazy: 23, 168, 35, 47.
Wybieram ten z 168 i przysyłam a tam niespodzianka, zawsze ostanie id 47 przeysła sad.gif
print_r() pokazuje prawidłowe info, każde zapytanie z bazy po kolei


jak przechodzę do skryptu to

Array ( [submitted] => true [id_grupy] => 142 ) 142
i tak zawsze:(
tehaha
bo Ty coś tu za bardzo namieszałeś pobierasz wyniki w pętli i dla każdego wyniku zaczynasz formularz i dla żadnego nawet go nie zamykasz i dziwisz się że skrypt nie wie, który formularz wysłałeś,
1. id jest unikalnym identyfikatorem więc nie mogą mieć wszystkie formularze takiego samego id,
2. zamykaj formularze poprzez </form>
3. każdy button submit musi mieć unikalne id żebyś wiedział który formularz został wysłany
4. nie wiem po co w ogóle użyłeś tu formularze skoro nie masz żadnych pól z edycją danych lepiej utworzyć linki i przesłać te dane getem czyli

w pętli zrobić linki:
  1. <a href="pokaz_uzytkownicy_grupa_admin.php?id_grupy=4" title="">grupa 1</a>

jeżeli przeszkadza Ci wystające id to użyj mod_rewrite żeby zrobić ładniejszy link
yogitubadzin
Dobrze, rozumiem jak zrobic to linkiem, i powiedzmy, że prześle linkiem i metoda GET, jak użyc tej funkcji mod_rewrite, która bedzie obcinała id na końcu i wyświetlała tyllko

pokaz_uzytkownicy_grupa_admin.php

zamiast

pokaz_uzytkownicy_grupa_admin.php?id=147


przeysłam linkiem i zmienna print_r($_GET); widzi mi tak:

Array ( [id] => 147 ) 147

gdy naciskam cokolwiek w tym skrypcie(np segregacja nazwiskiem) tablica GET pokazuje:


Array ( [sort] => naz )

pozdrawiam, początkujący
Kshyhoo
To wyślij POSTem a nie GETem...
tehaha
to zrób tak żeby link potem wyglądał pokaz_uzytkownicy_grupa_admin.php?id=147&sort=naz, wtedy będziesz miał i id grupy i zmienną do sortowania, użycie w tej sytuacji formularza to słaby pomysł bo wtedy wszystkie przyciski segregacji i stronicowania musiałbyś zastąpić przyciskami submit

mod_rewrite nie działa tak że obcina końcówkę tylko pozawala Ci zmienić link na ładniejszy czyli mógłbyś zrobić z tego pokaz_uzytkownicy_grupa_admin.php?id=147&sort=naz np. taki link pokaz_grupa,5,sortuj,nazw.html
yogitubadzin
no ale da sie poslac tylko GET przez link, tak czy nie?

Już będzie działać, musze tylko się dowiedzieć jak zrobić,żeby zmienna przesłana $_GET pokazywała na adres czyli referencja ale nie wiem jak to zrobić, kto wie?


przesyłam linkiem:
  1. <td align="left"><a href="pokaz_uzytkownicy_grupa_admin.php?id=' . $row['id_grupy'] . '">Użytkownicy</a></td>



  1. $id_grupy = &$_GET['id'];

tak nie działa sad.gif
tehaha
GET można posłać linkiem i formularzem, ale chodzi o to że skoro to co chcesz możesz zrobić jednym linkiem to po co robić do każdego formularz, który tylko komplikuje sytuację
nie wiem co chciałeś zrobić tym drugim ale jeżeli chcesz doczepić & to robisz tak:

  1. $id_grupy = "&".$_GET['id'];


jeżeli potrzebujesz referencje do linku to możesz to zrobić tak:
  1. $basedir = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);


a jeżeli tym drugim chciałeś tylko pobrać zmienną z linku to tak:

  1. $id_grupy = $_GET['id'];
yogitubadzin
Jeśli posyłam formularz POSTem to w pliku gdzie się posyła jest:

  1. echo '<br/>get : '; print_r($_GET);
  2. echo '<br/>post : ';print_r($_POST);
  3. $id_grupy = "&".$_POST['id_grupy'];
  4.  
  5. echo '<br/>pobrany post - referencja : ';print_r($id_grupy);



przeglądarka mi wyświetla:
get : Array ( )
post : Array ([id_grupy] => 166 )
pobrany post - referencja : &166

nacisnę jakis link i mamy:


get : Array ( [sort] => naz )
post : Array ( )
pobrany post - referencja : &


Czyli chyba referencji nie widzi? linkiem i GET nie robię, bo jak cokolwiek pośle GETem to operacje w tym pliku są na linkach i nowa zmienna GET mi zakrywa wszystko. Chciałem żeby zapamiętał jakąs zmienną, żebym z niej korzystał, ale nie umiem.....
Kshyhoo
Cytat(yogitubadzin @ 6.05.2010, 16:40:39 ) *
Chciałem żeby zapamiętał jakąs zmienną, żebym z niej korzystał, ale nie umiem.....

Skorzystaj z sesji.
yogitubadzin
Cytat(Kshyhoo @ 6.05.2010, 17:56:47 ) *
Skorzystaj z sesji.

Ale jak , nie mam pojecia jak to zrobic, co mam przypisac zmienna sesyjna do id_grupy? jak jestem zalogowany jako admin to co potem, sesja sie zniszczy czy jak?
pzdr
Kshyhoo
Poczekaj, bo nie do końca łapię Twojego problemu... Masz formularz, w którym wybierasz id_grupy, potem zatwierdzasz i przechodzisz dalej, w kolejnym formularzu wybierasz jakąś wartość i przechodzisz dalej... i tu klops - nie pamięta Ci id_grupy? Dobrze kumam?
tehaha
@Kshyhoo Ty chyba myślisz o wieloetapowym formularzu a tu nie o to chodzi, z tego co ja zrozumiałem to yogitubadzin chce sobie wypisać listę grup i jak kliknie w grupę to przechodzi na podstronę pokaz_uzytkownicy_grupa_admin.php gdzie wyświetlani są użytkownicy tej grupy, i jak na tamtej podstronie kilka w przycisk który sortuje te osoby np. alfabetycznie względem nazwiska to traci id grupy
Kshyhoo
A jak sortuje, formularzem? To wystarczy w tym formularzu dać:
  1. <input type="hidden" name="id_grupy" value='.$_GET['id_grupy'].'>
yogitubadzin
dokładnie tak jak mówi tehaha, niby to banalne a jednak coś nie gra, mam zwykłą listę grup pobieraną z bazy, jak chcę sobie jakąś wybrać to wciskam link(który ma tylko GET) lub formularz, który mi przesyła tylko id_grupy, a tam wszystko czego dotknę jest powiązane z linkami na globalnej GET, która(nawet jak jest referencja) to mi przysłania GET z linka, więc chciałem POSTem wysłać formularz który tylko przesyła id_grupy, gdzie jak opisalem przed chwilą dokładnie co się dzieje -

yogitubadzin Jeśli posyłam formularz POSTem to w pliku gdzie si... Dzisiaj, 16:40

nie działa sad.gif
Kshyhoo
Piszesz, co się dzieje i czego nie ma, a ja nadal nie łapię, jaki efekt chcesz osiągnąć? Chcesz móc sortować co, grupy? Członków w grupach?
tehaha
no właśnie on sortuje linkami dlatego traci to co sobie przesłał postem i dlatego od samego początku piszę, żeby zrezygnować z formularzy bo żeby te dane przesyłać postem to na tamtej podstronie wszystkie linki do sortowania i stronicowanie musiałby zamienić na przyciski formularza żeby można było dalej przesyłać postem a to jest...bez sensu

yogitubadzin to wygląda tak jeżeli przekażesz już sobie tą zmienną id to tej strony uzytkownicy_grupy_admin.....php, już nie ważne czy postem czy getem to w każdym razie musisz przechwycić tą zmienną i wsadzić ją do linków np.

załóżmy że przesłałeś tą zmienną w url czyli getem, sprawdzasz czy została przesłana jak tak to tworzysz zmienna $url_id która zostanie dołączona do linków po to aby ją sobie przesyłać między stronami i wtedy możesz już używać zwykłych linków zarówno do sortowania jak i stronicowania
  1. <?php
  2. <?php
  3. if(isset($_GET['id']))
  4. {
  5. $url_id = '&id='.$_GET['id'];
  6. }
  7. //linki sortujące na tej stronie
  8. echo "<a href='uztykownicy_grup_admin.php?sortuj=nazwisko$url_id' title='sortuj po nazwiskach'>sortuj po nazwiskach</a>";
  9. echo "<a href='uztykownicy_grup_admin.php?sortuj=data$url_id' title='sortuj po dacie rejestracji'>sortuj po dacie rejestracji</a>";
  10.  
  11. //link stronicowania
  12. echo "<a href='uztykownicy_grup_admin.php?sortuj=data&strona=2$url_id' title='strona 2'>strona 2</a>";
  13. ?>
Kshyhoo
Nie ma znaczenia, że sortuje linkami:
  1. <?php
  2. if ($_GET['id_grupy']=='m') $order = ' ORDER BY id DESC ';
  3. if ($_GET['id_grupy']=='r') $order = ' ORDER BY id ASC ';
  4.  
  5. $wynik = mysql_query("SELECT * FROM grupy $order");
  6.  
  7. echo <a href="?id_grupy=r">rosnąco</a> / <a href="?id_grupy=m">malejąco</a>';
  8.  
  9. while($wynik and $dane = mysql_fetch_array($wynik)) {
  10. // tu wyniki
  11. }
  12. ?>
tehaha
no nie ma, ale czy w sytuacji kiedy chce się tylko wypisać grupy z bazy to nie lepiej jest zrobić 100 linków zamiast 100 formularzy? skoro ten formularz ma służyć tylko i wyłącznie do tego żeby przekazać jedną zmienną do strony pokaz_grupy_admin.php?

po za tym on nie sortuje grup tylko użytkowników należących do grupy i jego problem leży w tym że jak kilka w taki link:
  1. <a href="?sort=r">rosnąco</a>
to traci id grupy które przesłał sobie postem czy tam getem
Kshyhoo
To może być również jeden formularz...
yogitubadzin
Cytat(tehaha @ 6.05.2010, 18:52:16 ) *
no właśnie on sortuje linkami dlatego traci to co sobie przesłał postem i dlatego od samego początku piszę, żeby zrezygnować z formularzy bo żeby te dane przesyłać postem to na tamtej podstronie wszystkie linki do sortowania i stronicowanie musiałby zamienić na przyciski formularza żeby można było dalej przesyłać postem a to jest...bez sensu

yogitubadzin to wygląda tak jeżeli przekażesz już sobie tą zmienną id to tej strony uzytkownicy_grupy_admin.....php, już nie ważne czy postem czy getem to w każdym razie musisz przechwycić tą zmienną i wsadzić ją do linków np.

załóżmy że przesłałeś tą zmienną w url czyli getem, sprawdzasz czy została przesłana jak tak to tworzysz zmienna $url_id która zostanie dołączona do linków po to aby ją sobie przesyłać między stronami i wtedy możesz już używać zwykłych linków zarówno do sortowania jak i stronicowania
  1. <?php
  2. <?php
  3. if(isset($_GET['id']))
  4. {
  5. $url_id = '&id='.$_GET['id'];
  6. }
  7. //linki sortujące na tej stronie
  8. echo "<a href='uztykownicy_grup_admin.php?sortuj=nazwisko$url_id' title='sortuj po nazwiskach'>sortuj po nazwiskach</a>";
  9. echo "<a href='uztykownicy_grup_admin.php?sortuj=data$url_id' title='sortuj po dacie rejestracji'>sortuj po dacie rejestracji</a>";
  10.  
  11. //link stronicowania
  12. echo "<a href='uztykownicy_grup_admin.php?sortuj=data&strona=2$url_id' title='strona 2'>strona 2</a>";
  13. ?>


Dokładnie o to mi chodziło!!!! Dziękuję tehaha oraz Kshyhoo, obaj widać, że to fachowcy, a dla mnie ten problem był nie do zgryzienia, bo nie wiedziałem, że jak raz prześlę jedną metodą link, to trzeba dalej tą samą przesyłać, a to jest bardzo przydatne bo można przechodzić sobie z różnych poziomów baz.
Dziękuje wam bardzo i jeszcze pozdrawiam smile.gif
tehaha
nie musisz cały czas taką samą metodą jak przesłałeś coś formularzem a chcesz do linka to robisz:

  1. $url_id = "&id=".$_POST['id'];
  2. <a href='strona.php?$url_id'></a>


a jak z linku do formularza to:

  1. <input type='hidden' value='.$_GET['id'].'/>
Kshyhoo
Oczywiście pamiętaj o dodaniu odpowiedniego filtrowania danych, szczególnie tych przychodzących z linka ;P
yogitubadzin
Cytat(tehaha @ 6.05.2010, 19:22:46 ) *
nie musisz cały czas taką samą metodą jak przesłałeś coś formularzem a chcesz do linka to robisz:

  1. $url_id = "&id=".$_POST['id'];
  2. <a href='strona.php?$url_id'></a>


a jak z linku do formularza to:

  1. <input type='hidden' value='.$_GET['id'].'/>



Spoko, dzięki jeszcze raz, teraz już będe wiedział!

Cytat(Kshyhoo @ 6.05.2010, 19:25:54 ) *
Oczywiście pamiętaj o dodaniu odpowiedniego filtrowania danych, szczególnie tych przychodzących z linka ;P


Dzięki wielkie Kshyhoo, będe pamiętała smile.gif

Cytat(Kshyhoo @ 6.05.2010, 19:25:54 ) *
Oczywiście pamiętaj o dodaniu odpowiedniego filtrowania danych, szczególnie tych przychodzących z linka ;P


Dzieki wielkie Kshyhoo raz jeszcze, pozdrawiam:)
Kshyhoo
Cytat(yogitubadzin @ 6.05.2010, 19:27:30 ) *
Spoko, dzięki jeszcze raz, teraz już będe wiedział!

Dzięki wielkie Kshyhoo, będe pamiętała smile.gif

Kurde, to Ty jakiej płci jesteś? A może rozdwojenie jaźni? aaevil.gif
yogitubadzin
Cytat(Kshyhoo @ 6.05.2010, 19:25:54 ) *
Oczywiście pamiętaj o dodaniu odpowiedniego filtrowania danych, szczególnie tych przychodzących z linka ;P

Dzieki raz jeszce raz Kshyhoo, 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.