PHP多選下拉式清單的處理____PHP

來源:互聯網
上載者:User
在asp中,多選下拉式清單已經被處理成一個數組,如: 

  <select name="slType" id="slType" multiple="multiple">
    <option value="news">news</option>
   <option value="product">product</option>
   <option value="user">user</option>
  </select>
按Ctrl選中news和product選項後,點擊提交按鈕,用request("slType")返回slType的值,得到news,product。

然而在php中,當按住CTRL   多選時, 用$_POST['slType']每次總返回選中的最後一個值,怎麼才能取得所有的值?

第一,將多選下拉式清單命名為一個數組,如:

  <select name="slType[]" id="slType[]" multiple="multiple">
    <option value="news">news</option>
   <option value="product">product</option>
   <option value="user">user</option>
  </select>

第二,用foreach迴圈

$temp="," //為什麼將temp變數初始化為 “,”,後面說明原因

foreach($_POST['strType']   as   $key=>$value)
  {
   $temp=$temp . $value . ",";
  }

如果多選項被全選,最終$temp傳回值為,news,product,user,,即通過這一步就可以將多選下拉式清單中的值整合成 ,news,product,user, ,然後將這個值輸入到資料庫中,是不是很方便。

在編輯多選框的時候,當從資料庫中讀取出多選項,如何讓有的選項被選中。通過explode函數可以很好的解決這個問題。

 

比如從資料庫中slType的值是 “,product,user,”,將其賦給$temp,

  <select name="slType[]" id="slType[]" multiple="multiple">
    <option value="news" <? if($count=count(explode(",news,",$temp)) > 1) { echo "selected";}?>>news</option>
   <option value="product" <? if($count=count(explode(",product,",$temp)) > 1) { echo "selected";}?>>product</option>
   <option value="user" <? if($count=count(explode(",user,",$temp)) > 1) { echo "selected";}?>>user</option>
  </select>

這樣在編輯的時候,product和user選項預設被選中。為什麼要在前面加一個“,”,因為這樣分割數組的時候準確性要高一些,如果不加這個符號,在分割字串的時候,將以“user,”作為分割,這樣如果資料庫中有一個選項為vipuser時,下拉式清單在編輯的時候不僅vipuser會被選中,user選項也會被選中。

附:

foreach( as $key=>$value)函數,遍曆array_expression數組,每次迴圈中,當前單元的值被賦給 $value,當前單元的索引值被賦給變數 $key, 並且數組內部的指標向前移一步。

explode

explode

(PHP 4, PHP 5)

explode — 使用一個字串分割另一個字串

說明

array explode ( string $separator, string $string [, int $limit] )

此函數返回由字串組成的數組,每個元素都是 string 的一個子串,它們被字串 separator 作為邊界點分割出來。如果設定了 limit 參數,則返回的數組包含最多 limit 個元素,而最後那個元素將包含string 的剩餘部分。

如果 separator 為空白字串(""),explode() 將返回 FALSE。如果 separator 所包含的值在 string 中找不到,那麼 explode() 將返回包含 string 單個元素的數組。

如果 limit 參數是負數,則返回除了最後的 -limit 個元素外的所有元素。此特性是 PHP 5.1.0 中新增的。

由於曆史原因,雖然 implode() 可以接收兩種參數順序,但是 explode() 不行。你必須保證 separator參數在 string 參數之前才行。

注意: 參數 limit 是在 PHP 4.0.1 中加入的。

例 2301. explode() 例子

<?php

// 樣本 1

$pizza  = "piece1 piece2 piece3 piece4 piece5 piece6";

$pieces = explode(" ", $pizza);

echo $pieces[0]; // piece1

echo $pieces[1]; // piece2

// 樣本 2

$data = "foo:*:1023:1000::/home/foo:/bin/sh";

list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data);

echo $user; // foo

echo $pass; // *

?>

例 2302. limit 參數例子

<?php

$str = 'one|two|three|four';

// 正數的 limit

print_r(explode('|', $str, 2));

// 負數的 limit(自 PHP 5.1 起)

print_r(explode('|', $str, -1));

?>

上例將輸出:

Array( [0] => one [1] => two|three|four)Array( [0] => one [1] => two [2] => three)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.