:::

16-1 上課範例:admin/index.php

<?php

/*-----------引入檔案區--------------*/
include_once "header_admin.php";
include_once "../up_file.php";
/*-----------function區--------------*/
//contact編輯表單
function contact_form($sn=""){
	global $xoopsDB,$xoopsUser;

	//抓取預設值
	if(!empty($sn)){
		$DBV=get_contact($sn);
	}else{
		$DBV=array();
	}

	//預設值設定

	//設定「tel」欄位預設值
	$tel=(!isset($DBV['tel']))?"":$DBV['tel'];

	//設定「email」欄位預設值
	$email=(!isset($DBV['email']))?"":$DBV['email'];

	//設定「name」欄位預設值
	$name=(!isset($DBV['name']))?"":$DBV['name'];

	//設定「gsn」欄位預設值
	$gsn=(!isset($DBV['gsn']))?null:$DBV['gsn'];

	//設定「sn」欄位預設值
	$sn=(!isset($DBV['sn']))?$sn:$DBV['sn'];

	//設定「birthday」欄位預設值
	$birthday=(!isset($DBV['birthday']))?"":$DBV['birthday'];

	//設定「zip」欄位預設值
	$zip=(!isset($DBV['zip']))?"":$DBV['zip'];

	//設定「county」欄位預設值
	$county=(!isset($DBV['county']))?"":$DBV['county'];

	//設定「city」欄位預設值
	$city=(!isset($DBV['city']))?"":$DBV['city'];

	//設定「addr」欄位預設值
	$addr=(!isset($DBV['addr']))?"":$DBV['addr'];

	$op=(empty($sn))?"insert_contact":"update_contact";


  $jquery=get_jquery();
  
  include_once XOOPS_ROOT_PATH."/modules/tadtools/formValidator.php";
  $formValidator= new formValidator("#myForm",false);
  $formValidator_code=$formValidator->render();

	$main="
	$jquery
	$formValidator_code
  <script type='text/javascript' src='".TADTOOLS_URL."/My97DatePicker/WdatePicker.js'></script>
  <script language='javascript' src='../class/twzipcode-1.3.1.js'></script>
	<script type='text/javascript'>
  $(document).ready(function(){
    $.post('ajax.php' , function(data){
      $('#menu1').html(data);
      $.post('ajax.php' , {parent_gsn: $('#menu1').val()} , function(data){
        $('#menu2').html(data);
      });
    });
    
    $('#menu1').change(function(){
      $.post('ajax.php' , {parent_gsn: $('#menu1').val()} , function(data){
        $('#menu2').html(data);
      });
    });
    
    $('#AddrForm').twzipcode({
      countyName: 'county',
      areaName: 'city',
      zipName: 'zip',
      countySel: '$county',
      areaSel: '$city',
      zipSel: '$zip',
      zipReadonly: false
    });
  });
  </script>
	<script src='".TADTOOLS_URL."/multiple-file-upload/jquery.MultiFile.js'></script>
	<form action='{$_SERVER['PHP_SELF']}' method='post' id='myForm' enctype='multipart/form-data'>
	
	<table class='form_tbl'>

	<!--群組-->
	<tr><td class='title' nowrap>群組</td>
	<td class='col'>
	<select id='menu1'></select>
	<select name='gsn' id='menu2'></select>
	</td></tr>

	<!--姓名-->
	<tr><td class='title' nowrap>姓名</td>
	<td class='col'><input type='text' name='name' size='20' value='{$name}' id='name' class='validate[required,minSize[2],maxSize[10]]'></td></tr>


	<!--電話-->
	<tr><td class='title' nowrap>電話</td>
	<td class='col'><input type='text' name='tel' size='20' value='{$tel}' id='tel' class='validate[required,custom[phone]]'></td></tr>

	<!--信箱-->
	<tr><td class='title' nowrap>信箱</td>
	<td class='col'><input type='text' name='email' size='20' value='{$email}' id='email'  class='validate[required,custom[email]]'></td></tr>
	
	
	<!--生日-->
	<tr><td class='title' nowrap>生日</td>
	<td class='col'><input type='text' name='birthday' size='20' value='{$birthday}' id='birthday' onClick=\"WdatePicker({dateFmt:'yyyy-MM-dd' , isShowWeek:true , skin:'whyGreen' , maxDate:'%y-%M-%d' , readOnly: true , isShowClear: false , firstDayOfWeek:1})\" class='Wdate'></td></tr>

	<!--上傳-->
	<tr><td class='title' nowrap>上傳圖片</td>
	<td class='col'>
  <input type='file' name='upfile[]' class='multi' maxlength='1' accept='gif|jpg|png|GIF|JPG|PNG'>".
list_del_file('photo',$sn)."
  </td></tr>


	<!--上傳-->
	<tr><td class='title' nowrap>上傳相關檔案</td>
	<td class='col'>
  <input type='file' name='docs[]' class='multi' >".
list_del_file('files',$sn)."
  </td></tr>



	<!--地址-->
	<tr><td class='title' nowrap>地址</td>
	<td class='col'>
	<div style='position:relative;'>
   <span id='AddrForm'></span>
   <input type='text' name='addr' size='30' value='{$addr}' id='addr'>
  </div>
  </td></tr>

	<tr>
		<td class='bar' colspan='2'>

    	<!--編號-->
    	<input type='hidden' name='sn' value='{$sn}'>

			<input type='hidden' name='op' value='{$op}'>
			<input type='submit' value='儲存'>
		</td>
	</tr>
	</table>
	</form>";

	//raised,corners,inset
	$main=div_3d("通訊錄管理",$main,"raised");

	return $main;
}



//新增資料到contact中
function insert_contact(){
	global $xoopsDB,$xoopsUser;


	$myts =& MyTextSanitizer::getInstance();
	$_POST['tel']=$myts->addSlashes($_POST['tel']);
	$_POST['email']=$myts->addSlashes($_POST['email']);
	$_POST['name']=$myts->addSlashes($_POST['name']);
	$_POST['birthday']=$myts->addSlashes($_POST['birthday']);
	$_POST['zip']=$myts->addSlashes($_POST['zip']);
	$_POST['county']=$myts->addSlashes($_POST['county']);
	$_POST['city']=$myts->addSlashes($_POST['city']);
	$_POST['addr']=$myts->addSlashes($_POST['addr']);


	$sql = "insert into `".$xoopsDB->prefix("contact")."`
	(`tel` , `email` , `name` , `gsn` , `birthday` , `zip` , `county` , `city` , `addr`)
	values('{$_POST['tel']}' , '{$_POST['email']}' , '{$_POST['name']}' , '{$_POST['gsn']}' , '{$_POST['birthday']}' , '{$_POST['zip']}' , '{$_POST['county']}' , '{$_POST['city']}' , '{$_POST['addr']}')";
	$xoopsDB->query($sql) or redirect_header($_SERVER['PHP_SELF'],3, mysql_error());

	//取得最後新增資料的流水編號
	$sn = $xoopsDB->getInsertId();
	
	upload_file('photo' , $sn , '400');
	upload_file('files' , $sn , '400' , 'docs');
	return $sn;
}

//更新contact某一筆資料
function update_contact($sn=""){
	global $xoopsDB,$xoopsUser;


	$myts =& MyTextSanitizer::getInstance();
	$_POST['tel']=$myts->addSlashes($_POST['tel']);
	$_POST['email']=$myts->addSlashes($_POST['email']);
	$_POST['name']=$myts->addSlashes($_POST['name']);
	$_POST['birthday']=$myts->addSlashes($_POST['birthday']);
	$_POST['zip']=$myts->addSlashes($_POST['zip']);
	$_POST['county']=$myts->addSlashes($_POST['county']);
	$_POST['city']=$myts->addSlashes($_POST['city']);
	$_POST['addr']=$myts->addSlashes($_POST['addr']);


	$sql = "update `".$xoopsDB->prefix("contact")."` set
	 `tel` = '{$_POST['tel']}' ,
	 `email` = '{$_POST['email']}' ,
	 `name` = '{$_POST['name']}' ,
	 `gsn` = '{$_POST['gsn']}' ,
	 `birthday` = '{$_POST['birthday']}' ,
	 `zip` = '{$_POST['zip']}' ,
	 `county` = '{$_POST['county']}' ,
	 `city` = '{$_POST['city']}' ,
	 `addr` = '{$_POST['addr']}'
	where `sn` = '$sn'";
	$xoopsDB->queryF($sql) or redirect_header($_SERVER['PHP_SELF'],3, mysql_error());
	

	upload_file('photo' , $sn , '400');
	upload_file('files' , $sn , '400' , 'docs');
	return $sn;
}

//列出所有contact資料
function list_contact($show_function=1){
	global $xoopsDB , $xoopsModule , $isAdmin;
	
  //製作選項
	$sql = "select gsn,title from `".$xoopsDB->prefix("contact_cate")."` where parent_gsn!='0' order by sort";
	$result = $xoopsDB->query($sql) or redirect_header($_SERVER['PHP_SELF'],3, mysql_error());
	while(list($gsn,$title)=$xoopsDB->fetchRow($result)){
    $cate_arr[]="'$gsn':'$title'";
  }
	$cate_option=implode(" , ",$cate_arr);

	
	include_once XOOPS_ROOT_PATH."/modules/tadtools/jeditable.php";
  $file="save.php";
  $jeditable = new jeditable();
  //$jeditable->setTextCol("#id",$file,'140px','12px',"{'sn':$sn,'op' : 'save'}","點擊編輯");
  //$jeditable->setTextAreaCol("#id",$file,'140px','12px',"{'sn':$sn,'op' : 'save'}","點擊編輯");
  //$jeditable->setSelectCol("#id",$file,"{'boy':'男生' , 'girl':'女生'}","{'sn' : $sn , 'op' : 'save'}","點擊編輯");
  
	

	$sql = "select * from `".$xoopsDB->prefix("contact")."` ";
	$result = $xoopsDB->query($sql) or redirect_header($_SERVER['PHP_SELF'],3, mysql_error());

	$function_title=($show_function)?"<th>功能</th>":"";

	$all_content="";

	while($all=$xoopsDB->fetchArray($result)){
		//以下會產生這些變數: $tel , $email , $name , $gsn , $sn , $birthday , $zip , $county , $city , $addr
		foreach($all as $k=>$v){
			$$k=$v;
		}

		$fun=($show_function)?"
		<td>
		<a href='{$_SERVER['PHP_SELF']}?op=contact_form&sn=$sn' class='link_button'>編輯</a>
		<a href=\"javascript:delete_contact_func($sn);\" class='link_button'>刪除</a>
		</td>":"";

    $jeditable->setSelectCol("#gsn_{$sn}",$file,"{{$cate_option}}","{'sn' : $sn , 'col' : 'gsn'}");
    $jeditable->setTextCol("#name_{$sn}",$file,'100px','12px',"{'sn':$sn , 'col' : 'name'}");
    $jeditable->setTextCol("#email_{$sn}",$file,'100px','12px',"{'sn':$sn , 'col' : 'email'}");

		$cate=get_contact_cate_all();

    $file_counter1=get_file_amount('photo' , $sn);
    $file_counter2=get_file_amount('files' , $sn);
    
		$all_content.="
		<tr>
			<td id='gsn_{$sn}'>{$cate[$gsn]['title']}</td>
			<td id='name_{$sn}'>{$name}</td>
			<td>{$tel}</td>
			<td id='email_{$sn}'>{$email}</td>
			<td>{$birthday}</td>
			<td>{$zip}</td>
			<td>{$county}</td>
			<td>{$city}</td>
			<td>{$addr}</td>
			<td>{$file_counter1}</td>
			<td>{$file_counter2}</td>
			$fun
		</tr>
		";
	}

  $jeditable_set=$jeditable->render();
  
	//if(empty($all_content))return "";

	$add_button=($show_function)?"<a href='{$_SERVER['PHP_SELF']}?op=contact_form' class='link_button_r'>新增</a>":"";

	//刪除確認的JS
	$main="
	$jeditable_set
	
	<script>
	function delete_contact_func(sn){
		var sure = window.confirm('確定刪除此資料?');
		if (!sure)	return;
		location.href=\"{$_SERVER['PHP_SELF']}?op=delete_contact&sn=\" + sn;
	}
	</script>
	
	
  批次匯入:
  <form action='index.php' method='post' enctype='multipart/form-data'>
  <INPUT type='file' name='userfile'>
  <INPUT type='hidden' name='op' value='import'>
  <INPUT type='submit' value='匯入 CSV'>
  <INPUT type='button' value='匯出 CSV' onClick=\"location.href='index.php?op=export'\">

  </form>


  <form action='index.php' method='post' enctype='multipart/form-data'>
  <INPUT type='file' name='importfile'>
  <INPUT type='hidden' name='op' value='import_excel'>
  <INPUT type='submit' value='匯入 Excel'>
  <INPUT type='button' value='匯出 Excel' onClick=\"location.href='excel.php'\">
  </form>

  <INPUT type='button' value='匯出 PDF' onClick=\"location.href='pdf.php'\">

	<table summary='list_table' id='tbl' style='width:100%;'>
	<tr>
		<th>群組</th>
		<th>姓名</th>
		<th>電話</th>
		<th>信箱</th>
		<th>生日</th>
		<th>郵遞區號</th>
		<th>縣市</th>
		<th>鄉鎮市區</th>
		<th>地址</th>
		<th>相片</th>
		<th>檔案數</th>
		$function_title
	</tr>

	<tbody>
	$all_content
	</tbody>

	<tr>
		<td colspan=11 class='bar'>
		{$add_button}
		</td>
	</tr>
	</table>";

	//raised,corners,inset
	$main=div_3d("",$main,"corners");

	return $main;
}


//以流水號取得某筆contact資料
function get_contact($sn=""){
	global $xoopsDB;
	if(empty($sn))return;
	$sql = "select * from `".$xoopsDB->prefix("contact")."` where `sn` = '{$sn}'";
	$result = $xoopsDB->query($sql) or redirect_header($_SERVER['PHP_SELF'],3, mysql_error());
	$data=$xoopsDB->fetchArray($result);
	return $data;
}

//刪除contact某筆資料資料
function delete_contact($sn=""){
	global $xoopsDB , $isAdmin;
	$sql = "delete from `".$xoopsDB->prefix("contact")."` where `sn` = '{$sn}'";
	$xoopsDB->queryF($sql) or redirect_header($_SERVER['PHP_SELF'],3, mysql_error());
	
	del_files('' , 'photo' , $sn);
	del_files('' , 'files' , $sn);
}


//取得所有contact_cate分類選單的選項(模式 = edit[編輯用] or show[顯示用],目前分類編號,目前分類的所屬編號)
function get_contact_cate_options($mode='show' , $default_gsn="0" , $default_parent_gsn="0" , $unselect_level="" , $start_search_sn="0" , $level=0){
	global $xoopsDB , $xoopsModule;
	$sql = "select `gsn` , `title` from `".$xoopsDB->prefix("contact_cate")."` where `parent_gsn` = '{$start_search_sn}' order by `sort`";
	$result = $xoopsDB->query($sql) or redirect_header($_SERVER['PHP_SELF'] , 3, mysql_error());

	$prefix=str_repeat("&nbsp;&nbsp;" , $level);
	$level++;

	$unselect=explode("," , $unselect_level);

	$main="";
	while(list($gsn , $title)=$xoopsDB->fetchRow($result)){
		if($mode=="edit"){
			$selected=($gsn==$default_parent_gsn)?"selected=selected":"";
			$selected.=($gsn==$default_gsn)?"disabled=disabled":"";
			$selected.=(in_array($level , $unselect))?"disabled=disabled":"";
		}else{
			$selected=($gsn==$default_gsn)?"selected=selected":"";
			$selected.=(in_array($level , $unselect))?"disabled=disabled":"";
		}
		$main.="<option value=$gsn $selected>{$prefix}{$title}</option>";
		$main.=get_contact_cate_options($mode , $default_gsn , $default_parent_gsn , $unselect_level , $gsn , $level);

	}
	return $main;
}


//匯入
function import(){
  global $xoopsDB;
  
  //$main="<table>";
  $handle = fopen($_FILES['userfile']['tmp_name'], "r") or die("無法開啟");

  while (($data = __fgetcsv($handle, 1000)) !== FALSE) {

    //判斷格式
    if(!is_numeric($data[0])){
      continue;
    }
    
    $data[1]=mb_convert_encoding($data[1], "UTF-8" , "Big5");
    $data[6]=iconv("Big5" , "UTF-8" , $data[6]);
    $data[7]=iconv("Big5" , "UTF-8" , $data[7]);
    $data[8]=iconv("Big5" , "UTF-8" , $data[8]);
    
    /*
    $main.="
    <tr>
    <td>{$data[0]}</td>
    <td>{$data[1]}</td>
    <td>{$data[2]}</td>
    <td>{$data[3]}</td>
    <td>{$data[4]}</td>
    <td>{$data[5]}</td>
    <td>{$data[6]}</td>
    <td>{$data[7]}</td>
    <td>{$data[8]}</td>
    </tr>
    ";
    */
    
    $sql = "insert into `".$xoopsDB->prefix("contact")."` (`gsn` , `name` , `tel` , `email` , `birthday` , `zip` , `county` , `city` , `addr`) values('{$data[0]}' , '{$data[1]}' , '{$data[2]}' , '{$data[3]}' , '{$data[4]}' , '{$data[5]}' , '{$data[6]}' , '{$data[7]}' , '{$data[8]}')";
    $xoopsDB->queryF($sql) or die($sql);
  }
  fclose($handle);
  //$main.="</table>";
  
  return $main;
}

function __fgetcsv(&$handle, $length = null, $d = ",", $e = '"') {
    $d = preg_quote($d);
    $e = preg_quote($e);
    $_line = "";
    $eof=false;
    while ($eof != true) {
        $_line .= (empty ($length) ? fgets($handle) : fgets($handle, $length));
        $itemcnt = preg_match_all('/' . $e . '/', $_line, $dummy);
        if ($itemcnt % 2 == 0)
            $eof = true;
    }
   $_csv_line = preg_replace('/(?: |[ ])?$/', $d, trim($_line));

    $_csv_pattern = '/(' . $e . '[^' . $e . ']*(?:' . $e . $e . '[^' . $e . ']*)*' . $e . '|[^' . $d . ']*)' . $d . '/';
    preg_match_all($_csv_pattern, $_csv_line, $_csv_matches);
    $_csv_data = $_csv_matches[1];

    for ($_csv_i = 0; $_csv_i < count($_csv_data); $_csv_i++) {
        $_csv_data[$_csv_i] = preg_replace("/^" . $e . "(.*)" . $e . "$/s", "$1", $_csv_data[$_csv_i]);
        $_csv_data[$_csv_i] = str_replace($e . $e, $e, $_csv_data[$_csv_i]);
    }
    return empty ($_line) ? false : $_csv_data;
}

//匯出函數
function export(){
  global $xoopsDB;

	$sql = "select * from `".$xoopsDB->prefix("contact")."` ";
	$result = $xoopsDB->query($sql) or redirect_header($_SERVER['PHP_SELF'],3, mysql_error());

  $main="gsn,name,tel,email,birthday,zip,county,city,addr\n";
	while($all=$xoopsDB->fetchArray($result)){
		//以下會產生這些變數: $tel , $email , $name , $gsn , $sn , $birthday , $zip , $county , $city , $addr
		foreach($all as $k=>$v){
			$$k=$v;
		}

    $name=iconv("UTF-8" , "Big5" , $name);
    $county=iconv("UTF-8" , "Big5" , $county);
    $city=iconv("UTF-8" , "Big5" , $city);
    $addr=iconv("UTF-8" , "Big5" , $addr);
		
		$main.="$gsn,$name,$tel,$email,$birthday,$zip,$county,$city,$addr\n";
  }
  
  header("Content-type: text/x-csv");
  header("Content-Disposition: attachment; filename=contact.csv");
  echo $main;
  exit;
}

//匯入Excel
function import_excel(){
  global $xoopsDB;

  include_once '../class/PHPExcel/IOFactory.php';
  $reader = PHPExcel_IOFactory::createReader('Excel5');
  $PHPExcel = $reader->load( $_FILES['importfile']['tmp_name'] ); // 檔案名稱
  $sheet = $PHPExcel->getSheet(0); // 讀取第一個工作表(編號從 0 開始)
  $highestRow = $sheet->getHighestRow(); // 取得總列數
  // 一次讀取一列
  for($row = 1; $row <= $highestRow; $row++) {
    $v="";
    //讀取一列中的每一格
    for ($col = 0; $col <= 8; $col++) {
    
      //格式檢查
      if( PHPExcel_Shared_Date::isDateTime( $sheet->getCellByColumnAndRow($col , $row ) )){
        $val = PHPExcel_Shared_Date::ExcelToPHPObject( $sheet->getCellByColumnAndRow( $col , $row )->getValue())->format('Y-m-d');
      }else{
        $val =  $sheet->getCellByColumnAndRow($col, $row)->getCalculatedValue();
      }
      
      
      if(!get_magic_quotes_runtime()) {
        $v[$col]=addSlashes($val);
      }
      
    }
    
    if(!is_numeric($v[0]) or empty($v[0]))continue;
    
    $sql = "insert into `".$xoopsDB->prefix("contact")."` (`gsn` , `name` , `tel` , `email` , `birthday` , `zip` , `county` , `city` , `addr`) values('{$v[0]}' , '{$v[1]}' , '{$v[2]}' , '{$v[3]}' , '{$v[4]}' , '{$v[5]}' , '{$v[6]}' , '{$v[7]}' , '{$v[8]}')";
    $xoopsDB->queryF($sql) or die($sql);
  }
}

/*-----------執行動作判斷區----------*/
$op = empty($_REQUEST['op'])? "":$_REQUEST['op'];
$sn=empty($_REQUEST['sn'])?"":intval($_REQUEST['sn']);
$gsn=empty($_REQUEST['gsn'])?"":intval($_REQUEST['gsn']);
$files_sn=empty($_REQUEST['files_sn'])?"":intval($_REQUEST['files_sn']);


switch($op){
	/*---判斷動作請貼在下方---*/

  //新增資料
  case "insert_contact":
  $sn=insert_contact();
  header("location: {$_SERVER['PHP_SELF']}?sn=$sn");
  break;

  //更新資料
  case "update_contact":
  update_contact($sn);
  header("location: {$_SERVER['PHP_SELF']}");
  break;

  //輸入表格
  case "contact_form":
  $main=contact_form($sn);
  break;

  //刪除資料
  case "delete_contact":
  delete_contact($sn);
  header("location: {$_SERVER['PHP_SELF']}");
  break;
  
  //匯入
  case "import":
  import();
  header("location: {$_SERVER['PHP_SELF']}");
  break;
  
  //匯出
  case "export":
  export();
  break;
  
  
  //匯入Excel
  case "import_excel":
  import_excel();
  header("location: {$_SERVER['PHP_SELF']}");
  break;

  //預設動作
  default:
  $main=list_contact();
  break;

	
	/*---判斷動作請貼在上方---*/
}

/*-----------秀出結果區--------------*/
module_admin_footer($main,0);

?>

 


:::

搜尋


書籍目錄

展開 | 闔起

線上使用者

37人線上 (9人在瀏覽線上書籍)

會員: 0

訪客: 37

更多…