Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] pobieranie zmiennej z linku
mariuszzzzzz
post 12.03.2009, 22:45:37
Post #1





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 27.06.2005

Ostrzeżenie: (0%)
-----


mam problem z pobieraniem zmiennej z linku w wyniku czego nie pokazuje wszystkich rekordow.
Po kliknieciu na link ktory wyglada tak:

  1. <?php
  2. <a href="http://www.strona.pl/index.php?p=obiekt&amp;o='.$wiersz['id'].'">'.$wiersz['nazwa'].'</a>
  3. ?>


link odczytuje ten skrypt:

  1. <?php
  2. $o = $_GET['o'];
  3. if ($_GET['p'])
  4.    {
  5.          $q="SELECT * FROM `obiekty` WHERE id='$o'";
  6.            $r=mysql_query($q);
  7.            while ($wiersz = mysql_fetch_array($r))
  8.    {        
  9. ?>


czy jesto to prawidlowo napisane?
Go to the top of the page
+Quote Post
Foxx
post 12.03.2009, 22:57:02
Post #2





Grupa: Zarejestrowani
Postów: 896
Pomógł: 76
Dołączył: 15.11.2003
Skąd: Sosnowiec/Kraków

Ostrzeżenie: (0%)
-----


Konstrukcja linka jest poprawna tylko jeżeli jest wyświetlany za pomocą echo, czyli tak:
  1. <?php
  2. echo '<a href="http://www.strona.pl/index.php?p=obiekt&o='.$wiersz['id'].'">'.$wiersz['nazwa'].'</a>';
  3. ?>

W przeciwnym razie powienien wyglądać tak:
  1. <a href="http://www.strona.pl/index.php?p=obiekt&o=<?php echo $wiersz['id'];?>"><?php echo $wiersz['nazwa'];?></a>


Natomiast w zapytaniu nie powinieneś się odwoływać do zmiennej $o tylko do o jako elementu tablicy $_GET.
Poza tym inaczej należy zagnieżdżać zmienne php w zapytaniu sql.
  1. <?php
  2. $q="SELECT * FROM `obiekty` WHERE id='".$_GET['o']."'";
  3. ?>
Go to the top of the page
+Quote Post
mariuszzzzzz
post 13.03.2009, 00:10:05
Post #3





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 27.06.2005

Ostrzeżenie: (0%)
-----


dzieki, wpisy sie pokazuja ale wystapil jakis dziwny blad nowe wpisy ktore teraz dodaje to wogole nie pokazuje. Tzn znajduje je ale nie wyswietla szczegolow wpisu.
Naprawde dziwne to.
Go to the top of the page
+Quote Post
Foxx
post 13.03.2009, 00:13:52
Post #4





Grupa: Zarejestrowani
Postów: 896
Pomógł: 76
Dołączył: 15.11.2003
Skąd: Sosnowiec/Kraków

Ostrzeżenie: (0%)
-----


Bez odpowiednich fragmentów kodu nic nie wskóramy...
Go to the top of the page
+Quote Post
piaseq
post 13.03.2009, 00:15:45
Post #5





Grupa: Zarejestrowani
Postów: 161
Pomógł: 25
Dołączył: 6.09.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(Foxx @ 12.03.2009, 22:57:02 ) *
Natomiast w zapytaniu nie powinieneś się odwoływać do zmiennej $o tylko do o jako elementu tablicy $_GET.

Mógłbyś rozwinąć? Dlaczego odwoływanie się bezpośrednio do elementu tablicy $_GET jest lepsze? Moim zdaniem jest wręcz odwrotnie. Przed wykorzystaniem danych z $_GET powinno się je odpowiednio przefiltrować, aby być pewnym, że zawierają to czego się spodziewamy.
Go to the top of the page
+Quote Post
Foxx
post 13.03.2009, 00:25:59
Post #6





Grupa: Zarejestrowani
Postów: 896
Pomógł: 76
Dołączył: 15.11.2003
Skąd: Sosnowiec/Kraków

Ostrzeżenie: (0%)
-----


Cytat
Dlaczego odwoływanie się bezpośrednio do elementu tablicy $_GET jest lepsze?

Jeżeli dane pochodzą z tablic typu $_GET lub $_POST, a tak jest w przypadku mariuszzzzzz, to tak czy inaczej trzeba je przefiltrować, obojętnie czy odwołasz się do nich tak: $_GET['o'] czy tak: $o. Natomiast druga metoda jest nieużywana w nowszych wersjach php. Jeśli chcesz szczegółów to poszukaj tematów o register_globals. Teraz jeżeli w forularzu masz pole o nazwie "login" to dostęp do niego odbywa się przez tablicę $_POST['login'] lub $_GET['login'].

Ten post edytował Foxx 13.03.2009, 00:26:37
Go to the top of the page
+Quote Post
piaseq
post 13.03.2009, 00:30:21
Post #7





Grupa: Zarejestrowani
Postów: 161
Pomógł: 25
Dołączył: 6.09.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


W kontekście register_globals oczywiście się zgadzam. Chyba przeoczyłeś, że mariuszzzzzz na początku swojego kodu użył
  1. <?php
  2. $o=$_GET['o'];
  3. ?>

Najprawdopodobniej stąd wynika nieporozumienie smile.gif
Go to the top of the page
+Quote Post
Foxx
post 13.03.2009, 00:31:55
Post #8





Grupa: Zarejestrowani
Postów: 896
Pomógł: 76
Dołączył: 15.11.2003
Skąd: Sosnowiec/Kraków

Ostrzeżenie: (0%)
-----


Masz rację, przeoczyłem to worriedsmiley.gif
Go to the top of the page
+Quote Post
mariuszzzzzz
post 13.03.2009, 08:57:02
Post #9





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 27.06.2005

Ostrzeżenie: (0%)
-----


co zauwazylem jest to ze moj inny skrypt ktory ma wyswietlac 10 ostatnich wpisow tez nie pokazuje tych najnowszych tzn te ktore zostaly dodane po wprowadzeniu zmiany na serwerze (mianowicie ustawienie register_globals na off). Moze ten problem ma do czynienia z sama baza danych? Mieliscie juz takie przypadki?
Jesli chodzi o skrypt to jest dobry. Ale i tak popatrzcie:
  1. <?php
  2.  
  3.    $wynik=mysql_query("SELECT * FROM `obiekty` WHERE ok='yes' ORDER BY id DESC LIMIT 0, 5") or die('Blad zapytania');
  4.    while ($wiersz = mysql_fetch_array($wynik))
  5.    {
  6.    if ($wiersz['id']!=$tablica[0])
  7.    {
  8.    echo '
  9.    <div class="statniododane">
  10. <p class="ostatniododanetekst"><a href="index1.php?p=obiekt&amp;o='.$wiersz['id'].'">
  11.                                '.$wiersz['nazwa'].'</a><br />'.$wiersz['data'].'<br />
  12.                            
  13.  
  14.                        
  15. '.$wiersz['miasto'].'</p><br /><br style="line-height:20px" /></div>';
  16.    $tablica[0]=$wiersz['id'];
  17.    }
  18.    }
  19.    
  20. ?>
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2025 - 06:36