2014-04-26 62 views
2

我有下面的表單,我在我的字段中輸入一個值,這取決於是否有任何GET或不是。PHP如果在GET值上未定義設置默認值

我有什麼作品,但我想知道是否有更有效的編碼方式,因爲我真正的形式將有大約10個輸入字段,我不想每次添加6行代碼時添加一個新的輸入字段?

 <?php 
     if (isset($_GET["name"])) { 
      $name = $_GET["name"]; 
     } 
     else { 
      $name = 0; 
     } 

     if (isset($_GET["type"])) { 
      $type = $_GET["type"]; 
     } 
     else { 
      $type = 0; 
     } 

     if (isset($_GET["other"])) { 
      $other = $_GET["other"]; 
     } 
     else { 
      $other = 0; 
     } 
     ?> 


     <input type="text" name="name" value="<?php echo $name; ?>"> 
     <input type="text" name="type" value="<?php echo $type; ?>"> 
     <input type="text" name="other" value="<?php echo $other; ?>"> 

我曾嘗試也做

 <?php 
      $name = $_GET["name"] ?: 0; 
     ?> 

這使得在值爲0到我的形式,但我得到的錯誤注意:未定義指數:命名

+0

在哪條線上出現錯誤? – dikesh

回答

3

使用isset()在三元運算符:

$name = isset($_GET["name"]) ? $_GET["name"] : 0; 

您會收到通知,因爲您直接評估$_GET['name'],而不使用isset()empty()包裝。

你可能更願意做一個resuble功能,只需將代碼:

function filterThing($key){ 
    return isset($_GET[$key]) ? $_GET[$key] : 0; 
} 

$name = filterThing('name'); 
$type = filterThing('type'); 
$other = filterThing('other'); 
1

試試這個:

$input_values = array('name','type','other'); 

foreach(input_values as $value){ 
    $$value = isset($_GET[$value]) ? $_GET[$value] : 0; 
} 
+0

這是一個不好的解決方案,因爲它允許覆蓋任何局部變量(這已經用更新的代碼修復了)。另外它不會解決'undefined index'問題。 – str

+0

我不是很確定我會在我的HTML表單中回顯我試圖回顯$ name和$ value,但得到未定義? – ak85

+0

'http://yoursite/page.php?sql = DROP DATABASE mydb' – MrCode

1

如果有人有興趣,使用這種簡單的方法,你也可以定義默認值如果GET鍵沒有找到或者它不是整數:

//?foo=ABC&x=40 

function tryGetInt($key, $def = 0){ 
    return isset($_GET[$key]) && is_numeric($_GET[$key]) ? $_GET[$key] : $def; 
} 

$value1 = tryGetInt("foo"); //value1 = 0; 
$value2 = tryGetInt("bar",20); //value2 = 20 
$value3 = tryGetInt("x",20); //value3 = 40