php獲取設置下拉框的值,我們可以通過PHP foreach循環來實現,PHP foreach循環方法可以創建或填充HTML <select>框或任何下拉菜單形成數組的值。那么在日常項目開發中,也是常見的一種功能效果。
下面我們就結合具體的代碼示例給大家,介紹PHP設置下拉框的值的方法。
創建一個PHP文件:demo110.php
代碼示例如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>PHP設置下拉框值的示例</title>
</head>
<body>
<form>
<select>
<option selected="selected">選一個</option>
<?php
$arr=array("PHP", "HTML", "CSS", "JavaScript");
foreach($arr as $v){
?>
<option value="<?php echo strtolower($v); ?>"><?php echo $v; ?></option>
<?php
}
?>
</select>
<input type="submit" value="提交">
</form>
</body>
</html>
這里我們直接在HTML代碼中,嵌入PHP代碼。首先創建了一個選擇框,并在選擇框<select>標簽中,定義了一段PHP代碼,然后在其中聲明了一個PHP數組變量。最后通過foreach循環輸出每個選項框的值。
提示:含有HTML和PHP代碼混合的文件,只有保存為PHP格式,才可以解析其中的PHP代碼。
效果如下:
注:
foreach 語法結構提供了遍歷數組的簡單方式。foreach 僅能夠應用于數組和對象,如果嘗試應用于其他數據類型的變量,或者未初始化的變量將發出錯誤信息。
foreach有兩種語法:
foreach (array_expression as $value)
statement
foreach (array_expression as $key=> $value)
statement
第一種格式遍歷給定的 array_expression 數組。每次循環中,當前單元的值被賦給 $value 并且數組內部的指針向前移一步(因此下一次循環中將會得到下一個單元)。
第二種格式做同樣的事,只除了當前單元的鍵名也會在每次循環中被賦給變量 $key。
本篇文章就是關于PHP設置下拉框的值的方法介紹,非常簡單易懂,希望對需要的朋友有所幫助!
以上就是php怎么設置下拉框的值的詳細內容,更多請關注其它相關文章!
更多技巧請《轉發 + 關注》哦!
HP 中的 $_GET 和 $_POST 變量用于檢索表單中的信息,比如用戶輸入。
PHP 表單處理
有一點很重要的事情值得注意,當處理 HTML 表單時,PHP 能把來自 HTML 頁面中的表單元素自動變成可供 PHP 腳本使用。
實例
下面的實例包含了一個 HTML 表單,帶有兩個輸入框和一個提交按鈕。
form.html 文件代碼:
<pre><html><head><metacharset="utf-8"><title>菜鳥教程(runoob.com)</title></head><body><formaction="welcome.php"method="post">名字: <inputtype="text"name="fname">年齡: <inputtype="text"name="age"><inputtype="submit"value="提交"></form></body></html>
當用戶填寫完上面的表單并點擊提交按鈕時,表單的數據會被送往名為 "welcome.php" 的 PHP 文件:
welcome.php 文件代碼:
<pre>歡迎 <?phpecho $_POST["fname"]; ?>!<br>你的年齡是 <?phpecho $_POST["age"]; ?> 歲。
通過瀏覽器訪問演示如下:
PHP 獲取下拉菜單的數據
PHP 下拉菜單單選
以下實例我們設置了下拉菜單三個選項,表單使用 GET 方式獲取數據,action 屬性值為空表示提交到當前腳本,我們可以通過 select 的 name 屬性獲取下拉菜單的值:
php_form_select.php 文件代碼:
<?php$q=isset($_GET['q'])? htmlspecialchars($_GET['q']) : '';if($q){if($q=='RUNOOB'){echo'菜鳥教程<br>http://www.runoob.com'; }elseif($q=='GOOGLE'){echo'Google 搜索<br>http://www.google.com'; }elseif($q=='TAOBAO'){echo'淘寶<br>http://www.taobao.com'; }}else{?>
<formaction=""method="get"><selectname="q"><optionvalue="">選擇一個站點:</option><optionvalue="RUNOOB">Runoob</option><optionvalue="GOOGLE">Google</option><optionvalue="TAOBAO">Taobao</option></select><inputtype="submit"value="提交"></form>
<?php}?>
PHP 下拉菜單多選
如果下拉菜單是多選的( multiple="multiple"),我們可以通過將設置 select name="q[]" 以數組的方式獲取,以下使用 POST 方式提交,代碼如下所示:
php_form_select_mul.php 文件代碼:
<?php$q=isset($_POST['q'])? $_POST['q'] : '';if(is_array($q)){$sites=array('RUNOOB'=> ' http://www.runoob.com', 'GOOGLE'=> 'Google 搜索: http://www.google.com', 'TAOBAO'=> '淘寶: http://www.taobao.com', ); foreach($qas$val){// PHP_EOL 為常量,用于換行echo$sites[$val] . PHP_EOL; }}else{?>
<formaction=""method="post"><selectmultiple="multiple"name="q[]"><optionvalue="">選擇一個站點:</option><optionvalue="RUNOOB">Runoob</option><optionvalue="GOOGLE">Google</option><optionvalue="TAOBAO">Taobao</option></select><inputtype="submit"value="提交"></form>
<?php}?>
單選按鈕表單
PHP 單選按鈕表單中 name 屬性的值是一致的,value 值是不同的,代碼如下所示:
php_form_radio.php 文件代碼:
<?php$q=isset($_GET['q'])? htmlspecialchars($_GET['q']) : '';if($q){if($q=='RUNOOB'){echo'菜鳥教程<br>http://www.runoob.com'; }elseif($q=='GOOGLE'){echo'Google 搜索<br>http://www.google.com'; }elseif($q=='TAOBAO'){echo'淘寶<br>http://www.taobao.com'; }}else{
?><formaction=""method="get"><inputtype="radio"name="q"value="RUNOOB"/>Runoob <inputtype="radio"name="q"value="GOOGLE"/>Google <inputtype="radio"name="q"value="TAOBAO"/>Taobao <inputtype="submit"value="提交"></form>
<?php}?>
checkbox 復選框
PHP checkbox 復選框可以選擇多個值:
php_form_select_checkbox.php 文件代碼:
<?php$q=isset($_POST['q'])? $_POST['q'] : '';if(is_array($q)){$sites=array('RUNOOB'=> http://www.runoob.com', 'GOOGLE'=> 'Google 搜索: http://www.google.com', 'TAOBAO'=> '淘寶: http://www.taobao.com', ); foreach($qas$val){// PHP_EOL 為常量,用于換行echo$sites[$val] . PHP_EOL; }}else{
?><formaction=""method="post"><inputtype="checkbox"name="q[]"value="RUNOOB"> Runoob<br><inputtype="checkbox"name="q[]"value="GOOGLE"> Google<br><inputtype="checkbox"name="q[]"value="TAOBAO"> Taobao<br><inputtype="submit"value="提交"></form>
<?php}?>
表單驗證
應該在任何可能的時候對用戶輸入進行驗證(通過客戶端腳本)。瀏覽器驗證速度更快,并且可以減輕服務器的負載。
如果用戶輸入需要插入數據庫,您應該考慮使用服務器驗證。在服務器驗證表單的一種好的方式是,把表單傳給它自己,而不是跳轉到不同的頁面。這樣用戶就可以在同一張表單頁面得到錯誤信息。用戶也就更容易發現錯誤了。
HP代碼規范
本規范希望通過制定一系列規范化PHP代碼的規則,以減少在瀏覽不同作者的代碼時,因代碼風格的不同而造成不便。
當多名程序員在多個項目中合作時,就需要一個共同的編碼規范, 而本文中的風格規范源自于多個不同項目代碼風格的共同特性, 因此,本規范的價值在于我們都遵循這個編碼風格,而不是在于它本身。
關鍵詞 “必須”("MUST")、“一定不可/一定不能”("MUST NOT")、“需要”("REQUIRED")、 “將會”("SHALL")、“不會”("SHALL NOT")、“應該”("SHOULD")、“不該”("SHOULD NOT")、 “推薦”("RECOMMENDED")、“可以”("MAY")和”可選“("OPTIONAL")的詳細描述可參見 RFC 2119 。
以下例子程序簡單地展示了以上大部分規范:
<?php
namespace Vendor\Package;
use FooInterface;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
class Foo extends Bar implements FooInterface
{
public function sampleFunction($a, $b=null)
{
if ($a===$b) {
bar();
} elseif ($a > $b) {
$foo->bar($arg1);
} else {
BazClass::bar($arg2, $arg3);
}
}
final public static function bar()
{
// method body
}
}
代碼必須符合 PSR-1 中的所有規范。
所有PHP文件必須使用Unix LF (linefeed)作為行的結束符。
所有PHP文件必須以一個空白行作為結束。
純PHP代碼文件必須省略最后的 ?> 結束標簽。
行的長度一定不能有硬性的約束。
軟性的長度約束一定要限制在120個字符以內,若超過此長度,帶代碼規范檢查的編輯器一定要發出警告,不過一定不可發出錯誤提示。
每行不應該多于80個字符,大于80字符的行應該折成多行。
非空行后一定不能有多余的空格符。
空行可以使得閱讀代碼更加方便以及有助于代碼的分塊。
每行一定不能存在多于一條語句。
代碼必須使用4個空格符的縮進,一定不能用 tab鍵 。
備注: 使用空格而不是tab鍵縮進的好處在于, 避免在比較代碼差異、打補丁、重閱代碼以及注釋時產生混淆。 并且,使用空格縮進,讓對齊變得更方便。
PHP所有 關鍵字必須全部小寫。
常量 true 、false 和 null 也必須全部小寫。
namespace 聲明后 必須 插入一個空白行。
所有 use 必須 在 namespace 后聲明。
每條 use 聲明語句 必須 只有一個 use 關鍵詞。
use 聲明語句塊后 必須 要有一個空白行。
例如:
<?php
namespace Vendor\Package;
use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
// ... additional PHP code ...
此處的“類”泛指所有的class類、接口以及traits可復用代碼塊。
關鍵詞 extends 和 implements必須寫在類名稱的同一行。
類的開始花括號必須獨占一行,結束花括號也必須在類主體后獨占一行。
<?php
namespace Vendor\Package;
use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
// constants, properties, methods
}
implements 的繼承列表也可以分成多行,這樣的話,每個繼承接口名稱都必須分開獨立成行,包括第一個。
<?php
namespace Vendor\Package;
use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
class ClassName extends ParentClass implements
\ArrayAccess,
\Countable,
\Serializable
{
// constants, properties, methods
}
每個屬性都必須添加訪問修飾符。
一定不可使用關鍵字 var 聲明一個屬性。
每條語句一定不可定義超過一個屬性。
不要使用下劃線作為前綴,來區分屬性是 protected 或 private。
以下是屬性聲明的一個范例:
<?php
namespace Vendor\Package;
class ClassName
{
public $foo=null;
}
所有方法都必須添加訪問修飾符。
不要使用下劃線作為前綴,來區分方法是 protected 或 private。
方法名稱后一定不能有空格符,其開始花括號必須獨占一行,結束花括號也必須在方法主體后單獨成一行。參數左括號后和右括號前一定不能有空格。
一個標準的方法聲明可參照以下范例,留意其括號、逗號、空格以及花括號的位置。
<?php
namespace Vendor\Package;
class ClassName
{
public function fooBarBaz($arg1, &$arg2, $arg3=[])
{
// method body
}
}
參數列表中,每個逗號后面必須要有一個空格,而逗號前面一定不能有空格。
有默認值的參數,必須放到參數列表的末尾。
<?php
namespace Vendor\Package;
class ClassName
{
public function foo($arg1, &$arg2, $arg3=[])
{
// method body
}
}
參數列表可以分列成多行,這樣,包括第一個參數在內的每個參數都必須單獨成行。
拆分成多行的參數列表后,結束括號以及方法開始花括號 必須 寫在同一行,中間用一個空格分隔。
<?php
namespace Vendor\Package;
class ClassName
{
public function aVeryLongMethodName(
ClassTypeHint $arg1,
&$arg2,
array $arg3=[]
) {
// method body
}
}
需要添加 abstract 或 final 聲明時, 必須寫在訪問修飾符前,而 static 則必須寫在其后。
<?php
namespace Vendor\Package;
abstract class ClassName
{
protected static $foo;
abstract protected function zim();
final public static function bar()
{
// method body
}
}
4.6. 方法及函數調用
方法及函數調用時,方法名或函數名與參數左括號之間一定不能有空格,參數右括號前也 一定不能有空格。每個逗號前一定不能有空格,但其后必須有一個空格。
<?php
bar();
$foo->bar($arg1);
Foo::bar($arg2, $arg3);
參數可以分列成多行,此時包括第一個參數在內的每個參數都必須單獨成行。
<?php
$foo->bar(
$longArgument,
$longerArgument,
$muchLongerArgument
);
控制結構的基本規范如下:
每個結構體的主體都必須被包含在成對的花括號之中, 這能讓結構體更加結構話,以及減少加入新行時,出錯的可能性。
標準的 if 結構如下代碼所示,留意 括號、空格以及花括號的位置, 注意 else 和 elseif 都與前面的結束花括號在同一行。
<?php
if ($expr1) {
// if body
} elseif ($expr2) {
// elseif body
} else {
// else body;
}
應該使用關鍵詞 elseif 代替所有 else if ,以使得所有的控制關鍵字都像是單獨的一個詞。
標準的 switch 結構如下代碼所示,留意括號、空格以及花括號的位置。 case 語句必須相對 switch 進行一次縮進,而 break 語句以及 case 內的其它語句都 必須 相對 case 進行一次縮進。 如果存在非空的 case 直穿語句,主體里必須有類似 // no break 的注釋。
<?php
switch ($expr) {
case 0:
echo 'First case, with a break';
break;
case 1:
echo 'Second case, which falls through';
// no break
case 2:
case 3:
case 4:
echo 'Third case, return instead of break';
return;
default:
echo 'Default case';
break;
}
一個規范的 while 語句應該如下所示,注意其 括號、空格以及花括號的位置。
<?php
while ($expr) {
// structure body
}
標準的 do while 語句如下所示,同樣的,注意其 括號、空格以及花括號的位置。
<?php
do {
// structure body;
} while ($expr);
標準的 for 語句如下所示,注意其 括號、空格以及花括號的位置。
<?php
for ($i=0; $i < 10; $i++) {
// for body
}
標準的 foreach 語句如下所示,注意其 括號、空格以及花括號的位置。
<?php
foreach ($iterable as $key=> $value) {
// foreach body
}
標準的 try catch 語句如下所示,注意其 括號、空格以及花括號的位置。
<?php
try {
// try body
} catch (FirstExceptionType $e) {
// catch body
} catch (OtherExceptionType $e) {
// catch body
}
閉包聲明時,關鍵詞 function 后以及關鍵詞 use 的前后都必須要有一個空格。
開始花括號必須寫在聲明的同一行,結束花括號必須緊跟主體結束的下一行。
參數列表和變量列表的左括號后以及右括號前,必須不能有空格。
參數和變量列表中,逗號前必須不能有空格,而逗號后必須要有空格。
閉包中有默認值的參數必須放到列表的后面。
標準的閉包聲明語句如下所示,注意其 括號、逗號、空格以及花括號的位置。
<?php
$closureWithArgs=function ($arg1, $arg2) {
// body
};
$closureWithArgsAndVars=function ($arg1, $arg2) use ($var1, $var2) {
// body
};
參數列表以及變量列表可以分成多行,這樣,包括第一個在內的每個參數或變量都必須單獨成行,而列表的右括號與閉包的開始花括號必須放在同一行。
以下幾個例子,包含了參數和變量列表被分成多行的多情況。
<?php
$longArgs_noVars=function (
$longArgument,
$longerArgument,
$muchLongerArgument
) {
// body
};
$noArgs_longVars=function () use (
$longVar1,
$longerVar2,
$muchLongerVar3
) {
// body
};
$longArgs_longVars=function (
$longArgument,
$longerArgument,
$muchLongerArgument
) use (
$longVar1,
$longerVar2,
$muchLongerVar3
) {
// body
};
$longArgs_shortVars=function (
$longArgument,
$longerArgument,
$muchLongerArgument
) use ($var1) {
// body
};
$shortArgs_longVars=function ($arg) use (
$longVar1,
$longerVar2,
$muchLongerVar3
) {
// body
};
注意,閉包被直接用作函數或方法調用的參數時,以上規則仍然適用。
<?php
$foo->bar(
$arg1,
function ($arg2) use ($var1) {
// body
},
$arg3
);
以上規范難免有疏忽,其中包括但不僅限于:
本文制定了日志類庫的通用接口規范。
本規范的主要目的,是為了讓日志類庫以簡單通用的方式,通過接收一個 Psr\Log\LoggerInterface 對象,來記錄日志信息。 框架以及CMS內容管理系統如有需要,可以對此接口進行擴展,但需遵循本規范, 這才能保證在使用第三方的類庫文件時,日志接口仍能正常對接。
本文中的 實現者 指的是實現了 LoggerInterface 接口的類庫或者框架,反過來講,他們就是 LoggerInterface 的 使用者。
其中占位符必須與上下文數組中的鍵名保持一致。
占位符的名稱必須由一個左花括號 { 以及一個右括號 } 包含。但花括號與名稱之間一定不能有空格符。
占位符的名稱應該只由 A-Z、 a-z,0-9、下劃線 _、以及英文的句號 .組成,其它字符作為將來占位符規范的保留。
實現者可以通過對占位符采用不同的轉義和轉換策略,來生成最終的日志。 而使用者在不知道上下文的前提下,不該提前轉義占位符。
以下是一個占位符使用的例子:
/**
* 用上下文信息替換記錄信息中的占位符
*/
function interpolate($message, array $context=array())
{
// 構建一個花括號包含的鍵名的替換數組
$replace=array();
foreach ($context as $key=> $val) {
$replace['{' . $key . '}']=$val;
}
// 替換記錄信息中的占位符,最后返回修改后的記錄信息。
return strtr($message, $replace);
}
// 含有帶花括號占位符的記錄信息。
$message="User {username} created";
// 帶有替換信息的上下文數組,鍵名為占位符名稱,鍵值為替換值。
$context=array('username'=> 'bolivar');
// 輸出 "Username bolivar created"
echo interpolate($message, $context);
上述的接口、類和相關的異常類,以及一系列的實現檢測文件,都包含在 psr/log 文件包中。
<?php
namespace Psr\Log;
/**
* 日志記錄實例
*
* 日志信息變量 —— message, **必須**是一個字符串或是實現了 __toString() 方法的對象。
*
* 日志信息變量中**可以**包含格式如 “{foo}” (代表foo) 的占位符,
* 它將會由上下文數組中鍵名為 "foo" 的鍵值替代。
*
* 上下文數組可以攜帶任意的數據,唯一的限制是,當它攜帶的是一個 exception 對象時,它的鍵名 必須 是 "exception"。
*
* 詳情可參閱: https://github.com/PizzaLiu/PHP-FIG/blob/master/PSR-3-logger-interface-cn.md
*/
interface LoggerInterface
{
/**
* 系統不可用
*
* @param string $message
* @param array $context
* @return null
*/
public function emergency($message, array $context=array());
/**
* **必須**立刻采取行動
*
* 例如:在整個網站都垮掉了、數據庫不可用了或者其他的情況下,**應該**發送一條警報短信把你叫醒。
*
* @param string $message
* @param array $context
* @return null
*/
public function alert($message, array $context=array());
/**
* 緊急情況
*
* 例如:程序組件不可用或者出現非預期的異常。
*
* @param string $message
* @param array $context
* @return null
*/
public function critical($message, array $context=array());
/**
* 運行時出現的錯誤,不需要立刻采取行動,但必須記錄下來以備檢測。
*
* @param string $message
* @param array $context
* @return null
*/
public function error($message, array $context=array());
/**
* 出現非錯誤性的異常。
*
* 例如:使用了被棄用的API、錯誤地使用了API或者非預想的不必要錯誤。
*
* @param string $message
* @param array $context
* @return null
*/
public function warning($message, array $context=array());
/**
* 一般性重要的事件。
*
* @param string $message
* @param array $context
* @return null
*/
public function notice($message, array $context=array());
/**
* 重要事件
*
* 例如:用戶登錄和SQL記錄。
*
* @param string $message
* @param array $context
* @return null
*/
public function info($message, array $context=array());
/**
* debug 詳情
*
* @param string $message
* @param array $context
* @return null
*/
public function debug($message, array $context=array());
/**
* 任意等級的日志記錄
*
* @param mixed $level
* @param string $message
* @param array $context
* @return null
*/
public function log($level, $message, array $context=array());
}
<?php
namespace Psr\Log;
/**
* logger-aware 定義實例
*/
interface LoggerAwareInterface
{
/**
* 設置一個日志記錄實例
*
* @param LoggerInterface $logger
* @return null
*/
public function setLogger(LoggerInterface $logger);
}
<?php
namespace Psr\Log;
/**
* 日志等級常量定義
*/
class LogLevel
{
const EMERGENCY='emergency';
const ALERT='alert';
const CRITICAL='critical';
const ERROR='error';
const WARNING='warning';
const NOTICE='notice';
const INFO='info';
const DEBUG='debug';
}
本 PSR 是關于由文件路徑 自動載入 對應類的相關規范, 本規范是可互操作的,可以作為任一自動載入規范的補充,其中包括 PSR-0,此外, 本 PSR 還包括自動載入的類對應的文件存放路徑規范。
\<命名空間>(\<子命名空間>)*\<類名>
下表展示了符合規范完整類名、命名空間前綴和文件基目錄所對應的文件路徑。
無法復制加載中的內容
關于本規范的實現,可參閱 相關實例
注意:實例并不屬于規范的一部分,且隨時會有所變動。
參考:https://github.com/PizzaLiu/PHP-FIG
PHP項目體檢工具,根據你設定的標準(如單一文件代碼體積,未使用的參數個數,未使用的方法數)檢查PHP代碼,超出設定的標準時報警。
顧名思義,檢查冗余代碼的
看名字就知道了,檢查從未被調用過的方法
老牌代碼格式化工具,PHP寫的,Pear包,可自己hack,可集成到命令行里。
你還可以用jenkins把上述工具以plugins形式整合起來,做持續集成:http://jenkins-php.org/
你還可以用xinc+phing跟上述工具集成起來做持續集成后的自動化打包發布:http://code.google.com/p/xinc/
*請認真填寫需求信息,我們會在24小時內與您取得聯系。