Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Podmiana zmiennej w zależności od zmiennej w linku strony
Forum PHP.pl > Forum > Przedszkole
Sheshelo
Robię stronę i chciałbym aby wartość zmiennej $x zmieniala się w zależności od podstrony w której się znajdujemy. Myślę, że zaoszczędziłoby to trochę miejsca, a przy tym bym się czegoś nauczył. Niestety mam pewien problem.

  1. <a href="index.php?s=1">Pierwsza Strona</a> <br>
  2. <a href="podstrona.php?s=2">Druga Strona</a> <br>
  3. <?php
  4. $s = $_GET['s'];
  5. if($s==1){$x = ":)";}
  6. if($s==2){$x = ":(";}
  7. ?>


Na początek pobieram zmienną z linku strony, potem nadaję zmiennej $x wartość w zależności od tego ile jest warta zmienna s. Niestety nie wiem jak sprawić aby przy pierwszym uruchomieniu strony zmienna już się tam znajdowała i wyskakuje mi błąd mówiący że zmienna s nie istnieje :/ Nie mam pomysłu jak to zrobić. Może ktoś poradzić?
markonix
Zmienna $s istnieje zawsze. Nie istnieje indeks 's' w tablicy $_GET.
Skoro nie istnieje to dodaj tam warunek if, który obsłuży ten przypadek.
Sheshelo
W jaki sposób? Wybacz, ale nie za bardzo to rozumiem :/ mam dodać warunek do tych istniejących czy gdzieś w tym GET?
markonix
Przed przypisaniem wartości do $s musisz sprawdzić czy $_GET['s'] w ogóle istnieje.
lukash82
Po co chcesz rozbijać każdą podstronę do osobnego pliku? W przyszłości jak Ci się uzbiera kilkanaście kolejnych podstron to zmiana czegokolwiek będzie wymagała za każdym razem edycji każdego pliku...

Nie lepiej zrobić to powiedzmy na index.php i includować to co potrzebne w danym momencie po tych zmiennych s=coś tam. Dzięki temu mod-rewrite w htaccess obskoczysz +- jedną linijką...

Wrzucam to tak do przemyślenia zanim Ci się kod rozrośnie;)
Sheshelo
Tak, mniej więcej o to mi chodziło, ale trochę źle to napisalem haha.gif Ale tak czy siak dziękuję za radę smile.gif
EDIT:
Teraz znowu mam problem haha.gif
mógłby mi ktoś w najprostszy sposób wytłumaczyć jak wstawić na przykład isset tak aby nie wyskakiwał mi dalej ten błąd?
viking
http://php.net/manual/en/migration70.new-f...ull-coalesce-op

Poza tym ja bym tu zastosował switch.
Sheshelo
Zrozumiałem, że
  1. $username = $_GET['user'] questionmark.gif 'nobody';
to to samo co
  1. $username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

czyli musiałbym zamienić te 'user' na 's', ale co z 'nobody'? Dziękuję, że chce wam się tyle mi odpowiadać wink.gif
viking
Tak, to to samo. Pomyśl troszkę. Co chcesz tam mieć? Pusty string, wartość domyślną np. 1? Później to podstaw.
Sheshelo

  1. <?php
  2.  
  3. $s = isset($_GET['s']) ? $_GET['s'] : '1';
  4. if($s==1){$x = ":)";}
  5. if($s==2){$x = ":(";}
  6.  
  7. echo "$x";
  8. ?>


Napisalem to tak, i mi nie wyskakuje żaden error, a jak nie ma niczego w linku to pokazuje że zmienna $x to wesoła buźka, dobrze to zrobiłem? Potem oczywiście podmienię te zmienne na nazwy plików a potem użyję include wink.gif
viking
Teraz jeszcze poczytaj czym się w PHP różni == od === i dlaczego jak zamienisz w linii czwartej == na === będzie warunek niespełniony.
I niech ci do głowy nie przyjdzie podstawiać nazwę pliku do include bezpośrednio z $_GET
Sheshelo
=== jest pozytywnywtedy kiedy dwie liczby są tego samego typu i są równe, tak? Czyli powinienem jakoś zmienić typ którejś ze zmiennych?
viking
W 4 linii sprawdzasz integer a co ustawiłeś w 3?
Sheshelo
Chyba stringa, w jaki sposób mogę zrobić z niego inta?
viking
Naucz się korzystać z dokumentacji http://php.net/manual/pl/language.types.integer.php
Sheshelo
  1. $s = isset($_GET['s']) ? $_GET['s'] : 1;
  2. if($s===1){$x = ":)";}
  3. if($s===2){$x = ":(";}

zauwazyłem, że napisałem przy jedynce '1', zamieniłem to, ale nadal mam błąd :/

Undefined variable: x
viking
Chociaż sporo się nauczysz a może nawet zrozumiesz na przyszłość smile.gif
var_dump($_GET);

http://php.net/manual/en/reserved.variables.get.php

A rzutowanie miałeś opisane w linku o integerach.

Czytaj zawsze dokumentację ze szczególnym uwzględnieniem zwracanych typów. Większość osób które tu piszą nie ma o tym pojęcia więc liczę że coś wyniesiesz z tej lekcji.
Sheshelo
Jeżeli dobrze zrozumiałem, to mam to wkleić pomiędzy $s = [...] a ifami? Mam to jakoś jeszcze modyfikować?
viking
$_GET jest zmienną globalną dostępną wszędzie, nie ma znaczenia gdzie to wkleisz. Chodzi żebyś zrozumiał na jakich typach danych pracujesz.

Z dokumentacji Note:
The GET variables are passed through urldecode().

urldecode - Returns the decoded string.
Sheshelo
Czyli równie dobrze mogłem to zrobić w taki sposób? haha.gif Kompletnie o tym nie pomyślałem

  1. $s = isset($_GET['s']) ? $_GET['s'] : '1';
  2. if($s==='1'){$x = ":)";}
  3. if($s==='2'){$x = ":(";}
viking
Albo zostawić == smile.gif

A teraz myk który może się jeszcze wiele razy przydać:
  1. $a = (int) '';
  2. $b = (int) '1';
  3.  
  4. var_dump($a, $b);
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.