Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] pobieranie zmiennej z linku
Forum PHP.pl > Forum > Przedszkole
mariuszzzzzz
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?
Foxx
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. ?>
mariuszzzzzz
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.
Foxx
Bez odpowiednich fragmentów kodu nic nie wskóramy...
piaseq
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.
Foxx
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'].
piaseq
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
Foxx
Masz rację, przeoczyłem to worriedsmiley.gif
mariuszzzzzz
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. ?>
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.