如果引用或轉貼,麻煩註明出處與本網誌連結,否則視為侵權。

2020年8月20日

[輸入判斷] PHP判斷前端Checkbox欄位是否勾選

作者: Fred F.M. Wang (FW知識瑣記) 日期:20200820

 PHP程式接收前台網頁輸入的值,比較容易發生錯誤的是checkbox欄位,不像其他類型的輸入欄位

可以單純用$_POST['<field name >']接收輸入值那麼簡單。


前端的一個checkbox輸入欄,如果沒有勾選,則該表單submit後,後台PHP處理程式無法接收到此欄位的內容,因此判斷checkbox輸入欄是否有勾選,要用

isset($_POST['<field name >'])來判斷,如下面範例:


前端HTML

<form action="getcheckbox.php" method="post">

     Only Weekend<input type="checkbox" name="wkend" value="weekendonly">

     <input type="submit" value="submit">

</form>


後端PHP

<?php

$wkend = false;

if(isset($_POST['wkend'])) {

    $wkend = true;

    echo "weekly only checked";

} else {

    echo "Not check weekly only";    

}

?>

 

 

2020年7月31日

PHP二維key-value陣列根據特定欄位內容去除重複資料

作者: Fred F.M. Wang (FW知識瑣記) 日期: 2020-7-31

PHP一維陣列要移除重複的內容,很簡單只要使用array_unique函式即可

例如 :

$input = array("green", "red", "green", "blue", "red");

$result = array_unique($input);

結果$result內容為array( "green", "red", "blue");


二維的key-value陣列要根據特定欄位內容移除重複,要如何處理?


下面是多維(key-value)陣列 :  

items[0][“fieldname1”] = …;

items[0][“fieldname2”] = …;

items[0][“fieldname3”] = …;

items[0][“fieldname4”] = …;

…

items[0][“fieldnamen”] = …;


items[1][“fieldname1”] = …;

items[1][“fieldname2”] = …;

items[1][“fieldname3”] = …;

items[1][“fieldname4”] = …;

…

items[1][“fieldnamen”] = …;

….


要去除上面陣列 fieldname1, fieldname2, fieldname3欄位內容相同的item, 程式如下 :  


$new_items = array();

$keys = array();

if(!empty($items)) {

    foreach($items as $key => $rec) {

       $reckey = array($rec["fieldname1"],$rec["fieldname2"],$rec["fieldname3"]);

       if(!in_array($reckey,$keys)) {

           $keys[] = $reckey;

           $new_items[] = $rec;    

       }        

    }    

}

$items = $new_items;

2020年7月20日

PHP程式解決記憶體不足的錯誤 "Allowed memory size of ... bytes exhausted"

作者: Fred F.M. Wang (FW知識瑣記) 日期: 2020/7/20

PHP程式執行時發生下面錯誤
Fatal error: Allowed memory size of ... bytes exhausted (tried to allocate ... bytes) in  ….
表示是可用記憶體已耗盡。
可透過兩種方法解決 :
1、修改php.ini
例如 : memory_limit = 128
這種方法需要重啟web服務器。

2、在程式中使用ini_set函數修改設訂選項值
例如 : ini_set ('memory_limit', '128M')

如果一直加大記已體還解決不了問題,那麼可能程式中發生幾種無限耗用資源的情況
1 無窮的迴圈 : 迴圈中持續分配記憶體,例如增加陣列大小
2 無窮的遞迴程式 : 遞迴程式沒有寫好結束的條件。

3 使用了過大的陣列或過多的變數 (註 : 程式中不再用到陣列或變數,可使用unset()或$var = null釋放記憶)

好好檢查程式吧!

2020年7月2日

各大學人工智慧,機器人相關系所與學分學程 (包含大學,科大,研究所等)

作者: Fred F.M. Wang (FW知識瑣記) 日期:2019-09-30 最近修訂:2023-3-20

研究所博士班
 
 
研究所碩士班(一般生) 


研究所碩士班(在職進修)


大學
 
科技大學

學分學程

相關文章

2020年6月29日

PHPExcel如何在工作表內放入ㄧ個圖片(背景是透明的PNG檔)

作者: Fred F.M. Wang (FW知識瑣記) 日期:2020/6/29

前ㄧ篇文 "PHPExcel 無法儲存寫入內含圖片的Excel檔,問題如何解決?",解決在儲存有Logo圖片的工作表問題後,另一種情況就是除了Logo外,還要加入一張圖片,而且圖片為背景是透明的PNG檔。嘗試後,分享程式如下 :

private function addSignImage($objPHPExcelOut,$column,$row) {
    $signimgfile = dirname($_SERVER["SCRIPT_FILENAME"]) . "/資料夾名稱/檔名.png";           
    $gdImage = imagecreatefrompng($signimgfile);   
   
     // 保持PNG圖片背景透明
    imagealphablending($gdImage, false);  // 關閉alpha渲染
    imagesavealpha($gdImage, true); // 設置alpha標誌以在儲存PNG圖像時保存完整的alpha通道資訊
   
    $objDrawing = new PHPExcel_Worksheet_MemoryDrawing();               
    $objDrawing->setName("signimage");
    $objDrawing->setDescription("signimage");
    $objDrawing->setImageResource($gdImage);
    $objDrawing->setRenderingFunction(PHPExcel_Worksheet_MemoryDrawing::RENDERING_PNG); 
    $objDrawing->setMimeType(PHPExcel_Worksheet_MemoryDrawing::MIMETYPE_DEFAULT);
    $objDrawing->setCoordinates($column.$row);    // 圖片左上角放置在哪個儲存格的位置
    $objDrawing->setHeight(390);   // 設定圖片高度(寬度會等比例變寬)
    $objDrawing->setOffsetX(288);  // 向左位移幾個像素
    $objDrawing->setOffsetY(14);   // 向下位移幾個像素
    $objDrawing->setWorksheet($objPHPExcelOut->getActiveSheet());       
}

主程式
$objPHPExcelOut = PHPExcel_IOFactory::load($outfilepath);
$objPHPExcelOut->setActiveSheetIndex(0);    // 預設0是指第一個工作表
.....
$col = "D";
$row = 27;
$this->addSignImage($objPHPExcelOut,$col,$row);