Sheshelo
20.06.2016, 22:25:20
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.
<a href="index.php?s=1">Pierwsza Strona</a> <br>
<a href="podstrona.php?s=2">Druga Strona</a> <br>
<?php
$s = $_GET['s'];
if($s==1){$x = ":)";}
if($s==2){$x = ":(";}
?>
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
20.06.2016, 23:32:56
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
20.06.2016, 23:44:04
W jaki sposób? Wybacz, ale nie za bardzo to rozumiem :/ mam dodać warunek do tych istniejących czy gdzieś w tym GET?
markonix
21.06.2016, 00:23:23
Przed przypisaniem wartości do $s musisz sprawdzić czy $_GET['s'] w ogóle istnieje.
lukash82
21.06.2016, 08:50:31
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
21.06.2016, 10:27:49
Tak, mniej więcej o to mi chodziło, ale trochę źle to napisalem

Ale tak czy siak dziękuję za radę

EDIT:
Teraz znowu mam problem
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
21.06.2016, 11:39:45
Sheshelo
21.06.2016, 11:48:54
Zrozumiałem, że
$username = $_GET['user']
'nobody';
to to samo co
$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ć
viking
21.06.2016, 12:08:01
Tak, to to samo. Pomyśl troszkę. Co chcesz tam mieć? Pusty string, wartość domyślną np. 1? Później to podstaw.
Sheshelo
21.06.2016, 12:38:05
<?php
$s = isset($_GET['s']) ?
$_GET['s'] : '1'; if($s==1){$x = ":)";}
if($s==2){$x = ":(";}
?>
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
viking
21.06.2016, 12:44:32
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
21.06.2016, 12:50:23
=== jest pozytywnywtedy kiedy dwie liczby są tego samego typu i są równe, tak? Czyli powinienem jakoś zmienić typ którejś ze zmiennych?
viking
21.06.2016, 12:59:48
W 4 linii sprawdzasz integer a co ustawiłeś w 3?
Sheshelo
21.06.2016, 13:15:33
Chyba stringa, w jaki sposób mogę zrobić z niego inta?
viking
21.06.2016, 13:44:56
Sheshelo
21.06.2016, 14:27:37
$s = isset($_GET['s']) ?
$_GET['s'] : 1; if($s===1){$x = ":)";}
if($s===2){$x = ":(";}
zauwazyłem, że napisałem przy jedynce '1', zamieniłem to, ale nadal mam błąd :/
Undefined variable: x
viking
21.06.2016, 14:40:38
Chociaż sporo się nauczysz a może nawet zrozumiesz na przyszłość
var_dump($_GET);
http://php.net/manual/en/reserved.variables.get.phpA 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
21.06.2016, 15:05:20
Jeżeli dobrze zrozumiałem, to mam to wkleić pomiędzy $s = [...] a ifami? Mam to jakoś jeszcze modyfikować?
viking
21.06.2016, 15:12:35
$_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
21.06.2016, 15:17:01
Czyli równie dobrze mogłem to zrobić w taki sposób?

Kompletnie o tym nie pomyślałem
$s = isset($_GET['s']) ?
$_GET['s'] : '1'; if($s==='1'){$x = ":)";}
if($s==='2'){$x = ":(";}
viking
21.06.2016, 15:22:06
Albo zostawić ==

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