Undefined variable: Switch -Case

critrate

Registered
ето ми кода

Код:
<?php 
if (isset($_GET['page'])) 
{
$page = $_GET['page'];
}
switch($page) {
    case "register":
    include "register.php";
    break;
	case "addnews":
	include "addnews.php";
	break;
	case "addshow":
	include "addshow.php";
	break;
	case "series":
	include "series.php";
	break;
	case "news":
	include "news.php";
	break;
	case "editp":
	include "editprofila.php";
	break;
	case "logout":
	include "logout.php";
	break;
	case"allseries":
	include "allseries.php";
	break;
	default :
    include "default.php";
    break;
} 
?>

ето това показва каго грешки

Notice: Undefined variable: page in C:\xampp\htdocs\design\index.php on line 49

Notice: Undefined variable: page in C:\xampp\htdocs\design\index.php on line 52

Notice: Undefined variable: page in C:\xampp\htdocs\design\index.php on line 55

Notice: Undefined variable: page in C:\xampp\htdocs\design\index.php on line 58

Notice: Undefined variable: page in C:\xampp\htdocs\design\index.php on line 61

Notice: Undefined variable: page in C:\xampp\htdocs\design\index.php on line 64

Notice: Undefined variable: page in C:\xampp\htdocs\design\index.php on line 67

Notice: Undefined variable: page in C:\xampp\htdocs\design\index.php on line 70

грешките са на всеки ред include ... на други неща се оправям ,но тук просто не мога да ги оправя тези грешки и моля малко за помощ
 
Знаеш ли какво правиш ти ?

Правиш проверка дали има сетната стойност на GET и правиш нова променлива със стойността и продължаваш ИЗВЪН if. Обаче, ако няма сетната стойност, условието в if се пропуска, т.е. ти не създаваш променливата $page и реално нямаш такава променлива, а си продължаваш кода надолу, който изисква тази променлива.

Можеш да направиш следното:

PHP:
switch(isset($_GET['page']) ? $_GET['page'] : NULL){
       #тука си правиш блока
}

Но друг съвет ще ти дам също. Не е добра практика да правиш стотици case-ове за всяка страница. Ако имаш много страници, това на практика е голям фалш, защото образуваш спагети.

Ето я и идеята:

PHP:
$url = isset($_GET['page']) ? $_GET['page'] : NULL;

if(file_exists("{$url}.php") && !is_dir($url)){
          require_once "{$url}.php";
}
else{
          echo "Wrong page!";
}

това е идеята. Можеш да си оптимизираш по всякакъв начин.
 
Кажи каква ти е идеята, че искаш да създаваш отделна променлива ?
Избягвай да правиш за всяко нещо променливи.
Където можеш да ползваш директно стойности/методи, ги използвай директно, няма смисъл една стойност да я прехвърляш на отделна променлива.



Иначе, ако искаш така... направи го номера по този начин:

PHP:
switch($page = isset($_GET['page']) ? $_GET['page'] : NULL){
           #твоя блок
}

echo $page;
 
А защо просто не направиш така?
PHP:
	<?php
$page = $_GET['page'];
if($page) {
 switch($page) {
    case "register":
    include "register.php";
    break;
   case "addnews":
   include "addnews.php";
   break;
   case "addshow":
   include "addshow.php";
   break;
   case "series":
   include "series.php";
   break;
   case "news":
   include "news.php";
   break;
   case "editp":
   include "editprofila.php";
   break;
   case "logout":
   include "logout.php";
   break;
   case"allseries":
   include "allseries.php";
   break;
   default :
    include "default.php";
    break;
 }
} else {
  echo "Не е избрана страница";
}
?>
 
кода на TryMe работи,но не мога да разбера за какво се използва

isset($_GET['page']) ? $_GET['page'] : NULL

т.е. разбирам само първото но защо има ? и защо е : NULL ?!
 
Това за което питаш, че не разбираш е съкратен вариант на:

if( isset($_GET['page']) ) {
$page = $_GET['page'];
} else {
$page = NULL;
}

Тоест ето ти друг пример:

$page = (#условие ? #ако е вярно : #ако е грешно);

използва се за малки неща и така пестиш време и код.. #условие замества в горния разширен код isset($_GET['page']) а #ако е вярно замества $page = $_GET['page']; само дето не се пише $page = $_GET['page']; тъй като вече е зададено такова по-напред и #ако е грешно мисля, че се досещаш какво замества.
 
Както ти казаха, това е съкратен вариант на if-else(нарича се третичен оператор). В твоя случай, присвоявам стойността в променлива, която да ползваш и след това. А проверката е следната: АКО е зададена стойност на ГЕТ, то да връща ГЕТ, АКО НЕ, то да връща НИЩО(празна стойност).
Когато не е зададена стойност, връщаме NULL, за да може самия switch да хване default стойността.
 
TryMe +1 благодаря ти.Останалите също помогнахте,но за съжаление не мога да дам на всички
 

Горе