2016年9月20日 星期二

Laravel 新手等級學習筆記(四) 加入Form

在Laravel中  表格的建制也有不同的方法

因為Laravel加了防盜連機制 會自動產生一組特殊碼來判別

若用原本HTML Form來建立

Laravel會顯示錯誤訊息

應該是可以把這個機制關閉 但.....我不會

開啟之前的helloworld的樣板檔案

 .\resources\views\ helloworld.blade.php

把<body>   </body>中間改成

{{Form::open(['url'=>'post', 'method'=>'post'])}}
{{Form::label('title', '標題')}}
{{Form::text('title')}}
{{Form::submit('送出')}}
{{Form::close()}}

執行之後 畫面會出現錯誤訊息

FatalThrowableError in................
Class 'Form' not found

因為Laravel根本沒有支援Form

所以接下來就要安裝上去


安裝 Form

進入laravelcollective.com 裡面有說明

打開命令提示字元

進入安裝目錄 我之前設定的是 c:\www\www_laravel

打上

php c:\xampp\php\composer require "laravelcollective/html":"^5.2.0"

php 是windows 版本 安裝plugin之前都要加php

c:\xampp\php\composer 因為是在不同目錄安裝 所以要打完整的路徑才能執行

後面就是照著網站上的指令打上去

輸入完按下enter會自動安裝

最後 按照網站上的指示 開啟 config/app.php

在兩個地方加上




'providers' => [
                    // ...
                       Collective\Html\HtmlServiceProvider::class,
                   // ...
],



'aliases' => [
                   // ...
                      'Form' => Collective\Html\FormFacade::class,
                      'Html' => Collective\Html\HtmlFacade::class,
                  // ...
],



完成安裝

重新整理之後 發現中文字都不見了



這是老問題  要把文件要改成UTF8編碼即可


其他樣式 和 用途  等稍待再繼續說明


2016年8月28日 星期日

Laravel 新手等級學習筆記(三) 資料庫連結

Laravel 5.2有個資料庫遷移檔的功能

好像是為了能夠版本控管 可以一指還原

還會多加一個時間戳記(可取消)

這裡就不先討論

先使用phpmyadmin 建立一個資料庫 testdbs

後面要多加一個s 後面會說明

再建立一個testtbs的資料表

按照慣例取個 id  主鍵  increments 是唯一值的遞增數字

再來個 name 資料型態︰字元

並手動新增二筆資料 已備後續程式測試用

編輯資料庫設定

如果是用xampp預設模式的話  資料庫的帳號是root  沒有密碼

所以要改一個是根目錄底下的  .env 檔案
DB_DATABASE=testdb

DB_USERNAME=root


一個是在 config/database.php

'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'testview'),
            'username' => env('DB_USERNAME', 'root'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix' => '',
            'strict' => false,
            'engine' => null,
        ],


建立模組

在根目錄任何地方  建一個Models的目錄

這邊是建立在 app\底下  M最好要大寫

在app\Models 底下 建立一個Testtb.php的檔案

namespace App\Models;
use Illuminate\Database\Eloquent\Model;

class Testtb extends Model
{
protected $table = "testtbs";
}


前面兩行一定要  路徑要設對

app\Models 是之前自己設定的路徑唷!!!

檔名Testdb.php、class的名稱  都要設成一樣

Laravel會自動去抓 開頭小寫  後面加s的資料表

所以 class Testtb 就對應資料表testdbs

資料讀取

打開 app\Http\routes.php

新增另一行

Route::get('/testdata','TestbaseController@printdata');

由上得知 這邊取名方式不一定要全部一樣

養成良好習慣 程式擺放的檔案名稱記得後面加Controller

新增TestbaseController.php的檔案

打上

namespace App\Http\Controllers;
use App\Models\Testtb;

class TestbaseController extends Controller
{
     public function printdata() {
          $test = new Testtb;
          $test = Testtb::all();
          foreach ($test as $te) {
                echo $te->name;
          }
     }
}


use App\Models\Testtb;  就是剛剛建立的Models

$test = new Testtb;   新建類別

$test = Testtb::all();  讀取所有資料

foreach ($test as $te)  把資料表裡的資料 一筆一筆讀出來

echo $te->name;    列印出來

這樣就完成 資料庫連結及讀取資料






資料來源

2016年8月18日 星期四

Laravel 新手等級學習筆記(二) Hello World

編輯routes.php


Laravel 是把程式 資料庫 以及畫面分開來進行

由一個 routes.php 的檔案決定程序該送到何處進行

打開(已經有內建好了)

.\app\Http\routes.php

把原本的程式碼改成

Route::get('/', 'TestController@testview');

有三個參數

第一個  / 為網址 / 代表的是根目錄 本機跑的網址是 127.0.0.1

             若打上 /abc 網址要打上127.0.0.1/abc 就能進入該程序

              所以這個參數在往後是不能重複的一個網址就對應到一個程序

第二個  TestController 是連到哪個檔案 TestController為檔案名稱

              儲存路徑在 .\app\Http\Controllers\目錄裡面 有個TestController.php的檔案

               檔案名稱第一位需大寫 跟Controller的C 也大寫

第三個  testview就是擺放程式的function

所以這整句話的意思是

Route::get('/', 'TestController@testview');

在網址 127.0.0.1 的畫面對應到 TestController.php裡的testview裡的程式碼

編輯程式

規定好 route 後 就在.\app\Http\Controllers\ 新增TestController.php 檔案

打上

namespace App\Http\Controllers;

class TestController extends Controller
{
     public function testview() {
          return view('helloworld');
     }
}


namespace  很像是避免有重複名稱的class 所以特定指定一個路徑 去繼承

                    通常程式裡有extends 就必須設定namespace

class TestController extends Controller

這是固定寫法 TestController檔案名稱

extends Controller 繼承目錄裡的Controller.php

這裡就很清楚  比照Route::get('/', 'TestController@testview'); 的意思

注意的是

view('helloworld');

裡的helloworld不是輸出的文字  而是檔案名稱

輸出樣板

程式寫好 要把結果輸出到頁面上

Laravel是透過樣板的功能呈現頁面

而樣板檔案放置的位置就是在 .\resources\views\

在 .\resources\views\ 裡面已存在welcome.blade.php

把改名成helloworld.blade.php

 打開裡面內容  就是很熟悉的HTML

裡面有一行是

    <body>
        <div class="container">
            <div class="content">
                <div class="title">
Laravel
            </div>
        </div>
    </body>

把Laravel 改成Hello World 重新讀取首頁



helloworld 就是view('helloworld'); 的檔案名稱

後面一定要加.blade 這樣 laravel 就會把裡面的HTML呈現在網頁上



資料來源

2016年8月16日 星期二

Laravel 新手等級學習筆記(一) 安裝 for Windows 7

安裝資料來源
長島冰茶的工程筆記

下載
XAMPP PHP + Apache + MySql


我是選PHP 7.0.8 Laravel要求是PHP >= 5.5.9

下載後安裝 下一步下一步結束

安裝 Composer

Composer是安裝各種Plugin的必要元件

打開命令提示字元

進入預設XAMPP目錄

c:\xampp\php

打上

php -r "readfile('https://getcomposer.org/installer');" | php

會顯示安裝成功

composer 將被下載在 C:\xampp\php\composer.phar 並重新命名為 composer

rename composer.phar composer

測試是否安裝成功

打上

php composer

則出現以下圖片 已安裝成功


在windows的path加上c:\xampp\php\ 路徑

在往後安裝Laravel必須要設定 不然無法成功




安裝Laravel 5.2

在命令提示字元  c:\xampp\php 下

打上

php composer global require "laravel/installer"

這需要一點時間

安裝成功後  建立第一個網站

打上以下指令, c:\www\www_laravel 網站檔案放置的位置!可隨意調整

php composer create-project laravel/laravel C:\www\www_laravel --prefer-dist


這也是需要跑一段時間

最後如果出現

Application key [XXXXXXXXXXXXXXXXXXXXX] set successfully.
表示安裝成功  只差最後一步  把路徑指向剛剛設定的目錄底下

用管理者身分開啟記事本

開啟 C:\Windows\System32\drivers\etc\hosts 

加上 127.0.0.1 localhost
localhost可自訂


在 C:\xampp\apache\conf\extra\httpd-vhosts.conf 最後加上

<VirtualHost *>
     DocumentRoot "C:\www\www_laravel\public"
     ServerName laravel
     <Directory "C:\www\www_laravel\public">
          AllowOverride All
          Require all granted
     </Directory>
</VirtualHost>
     

重開apache

在瀏覽器輸入127.0.0.1

出現  表示安裝成功







資料來源

2013年4月27日 星期六

EXCEL圖表中加入卷軸

OFFSET(C2,2,-1,1,1) 為以定位為基準 上下左右移動到相對應的位置
  • C2 定位儲存格。
  • 2  移動垂直(列)  +(正數)是下移 -(負數)是上移
  • -1 移動水平(行) +(正數)是右移 -(負數)是左移
  • (第二個最後的值) 1 (可省略)是移動到(C2,2,-1)位置再往右移幾個欄位 省略為原地儲存格 必定為正數字
  • 1 (最後一個值) -(可省略)是移動到(C2,2,-1)位置在往下移幾個欄位 省略為原地儲存格 必定為正數字


教學

excel2007版本中  名稱的定義在公式裡的名稱管理員

顯示捲軸方法2007

2010顯示捲軸的方法

2012年5月29日 星期二

檢查array 元素 內容

while(list($key , $val) = each($exif['IFD0'])) {

echo "$key => $val
";

}

2011年10月29日 星期六

重複資料欄位數量

SELECT partno, COUNT( * )
FROM partnoinfo
GROUP BY partno
HAVING (
COUNT( * ) >1
)

2011年7月4日 星期一

控制 select 所有javascript的程式碼

1判斷select選項中 是否存在Value="paraValue"的Item

2向select選項中 加入一個Item

3從select選項中 刪除一個Item

4刪除select中選中的項

5修改select選項中 value="paraValue"的text為"paraText"

6設置select中text="paraText"的第一個Item為選中

7設置select中value="paraValue"的Item為選中

8得到select的當前選中項的value

9得到select的當前選中項的text

10得到select的當前選中項的Index

11清空select的項

js 代碼

// 1.判斷select選項中是否存在Value="paraValue"的Item

HTML 呼叫 jsSelectIsExitItem(document.frm(form name).c_id(select name), document.frm(form name).c_id(select name).value 或者this.value)

function jsSelectIsExitItem(objSelect, objItemValue) {

var isExit = false;

for (var i = 0; i < objSelect.options.length; i++) {

if (objSelect.options[i].value == objItemValue) {

isExit = true;

break;

}

}

return isExit;

}

// 2.向select選項中加入一個Item

function jsAddItemToSelect(objSelect, objItemText, objItemValue) {

//判斷是否存在

if (jsSelectIsExitItem(objSelect, objItemValue)) {

alert("該Item的Value值已經存在");

} else {

var varItem = new Option(objItemText, objItemValue);

objSelect.options.add(varItem);

alert("成功加入");

}

}

// 3.從select選項中刪除一個Item

function jsRemoveItemFromSelect(objSelect, objItemValue) {

//判斷是否存在

if (jsSelectIsExitItem(objSelect, objItemValue)) {

for (var i = 0; i < objSelect.options.length; i++) {

if (objSelect.options[i].value == objItemValue) {

objSelect.options.remove(i);

break;

}

}

alert("成功刪除");

} else {

alert("該select中 不存在該項");

}

}

// 4.刪除select中選中的項

function jsRemoveSelectedItemFromSelect(objSelect) {

var length = objSelect.options.length - 1;



for(var i = length; i >= 0; i--){

if(objSelect[i].selected == true){

objSelect.options[i] = null;

}

}

}

// 5.修改select選項中 value="paraValue"的text為"paraText"

function jsUpdateItemToSelect(objSelect, objItemText, objItemValue) {

//判斷是否存在

if (jsSelectIsExitItem(objSelect, objItemValue)) {

for (var i = 0; i < objSelect.options.length; i++) {

if (objSelect.options[i].value == objItemValue) {

objSelect.options[i].text = objItemText;

break;

}

}

alert("成功修改");

} else {

alert("該select中 不存在該項");

}

}

// 6.設置select中text="paraText"的第一個Item為選中

function jsSelectItemByValue(objSelect, objItemText) {

//判斷是否存在

var isExit = false;

for (var i = 0; i < objSelect.options.length; i++) {

if (objSelect.options[i].text == objItemText) {

objSelect.options[i].selected = true;

isExit = true;

break;

}

}

//Show出結果

if (isExit) {

alert("成功選中");

} else {

alert("該select中 不存在該項");

}

}

// 7.設置select中value="paraValue"的Item為選中

document.all.objSelect.value = objItemValue;

// 8.得到select的當前選中項的value

var currSelectValue = document.all.objSelect.value;

// 9.得到select的當前選中項的text

var currSelectText = document.all.objSelect.options[document.all.objSelect.selectedIndex].text;

// 10.得到select的當前選中項的Index

var currSelectIndex = document.all.objSelect.selectedIndex;

// 11.清空select的項

document.all.objSelect.options.length = 0;

2011年6月8日 星期三

按下連結出現確認畫面(副程式版本)

function confirm_link(caid,sdid,type) {

if(confirm('確認嗎?')) {

window.location.href="searchdata_add.php?act=3&caid="+caid+"&sdid="+sdid+"&type="+type;

}

}

2011年4月7日 星期四

開啟session_start()之後 變數會跑掉

例如 $abc=123 echo $abc session_start(); echo $abc就變成456 因為$_session['abc']同樣名稱的abc 所以開啟後會占用! 要去php.ini把register_globals 原本的on 改成 off即可

2009年3月25日 星期三

設定時間跳頁

CONTENT:秒數

URL:連結網頁

2008年7月23日 星期三

sprintf 和 printf 之用法

sprintf只格式化不印出來

printf格式化後印出來

格式為printf("abcde%'a-20s fgh %01.2f ijk",$a,$b)

從%開始依序為

說明使用何種字元來填塞結果成為適當的字串長度,它可以是個空白字元或是 0(字元 0),
它預設上是使用空白來填塞。要替換填塞字元,可以在字首前面加上單引號( ' )來指定。

指定對齊方式,說明結果應該要靠左對齊還是靠右對齊,預設是靠右對齊,可以使用字元 "-" 來使它靠左對齊。

指定寬度,說明這個轉換要產生出多少(最少)字元。

指定精準度,說明要顯示到小數點第幾位,這個選項對於浮點數以外的型態沒有影響。

指定型態說明要將參數看待成何種型態,可能的型態有 :

% - 百分比字元,不需要參數

b - 將參數看待成整數,而且結果為二進制的值

c - 將參數看待成整數,而且結果為此ASCII值的字元

d - 將參數看待成整數,而且結果為十進位的數值

f - 將參數看待成浮點數,而且結果為浮點數

o - 將參數看待成整數,而且結果為八進制的數值

s - 將參數和結果都看待成字串

x - 將參數看待成整數,而且結果為十六進制的數值(小寫字母)

X - 將參數看待成整數,而且結果為十六進制的數值(大寫字母)

範例:

$a=13.1

printf("%010.2f",$a);

結果:0000000013.10

$b=abcd

printf("%'_-10s",$b);

結果:abcd______

備註:替代字元通常是空格,但列印出來卻無空格,是因為列印在網頁上會把空格省略

所以要加str_replace()函示,把空格轉成& nbsp;

以上面的範例改成str_replace(' ','& nbsp;',sprintf("%10s",$b));即可

2008年6月25日 星期三

XAJAX初探(四)範例

程式碼

XAJAX初探(三)執行

現在要進入重點了,就是該如何執行與發佈

就呼叫副程式一樣

function myFunction($i,$j....) {

但要先創建一個xajaxResponse物件,這就是發佈所需要的

$objResponse = new xajaxResponse();

}

前面提到有個函示可以把表格內的所有數值傳回來

xajax_myFunction(xajax.getFormValues('myForm'));

它是陣列的形式回傳

function myFunction($aFormValues) {

$step2 = $aFormValues['step2'];

來承接表格內所有的數值

}

其他就像寫一般的php程式一樣

等到要輸入、發佈的時候,XAJAX有提供幾個函示

這邊先提供基本的概念,函示的介紹等下一章節

因為XAJAX講求的是及時,所以當事件觸發的時候,就呼叫副程式做運算

然後及時把結果展現在現有的網頁上,所以得規定在展現網頁上的哪一個部位

就用id來設定

<div id="output">(展現結果)</div>

<span id="output">(展現結果)</span>

<div>和<span>的差別在於div會跳行span不會

然後在副程式用

function myFunction($aFormValues) {

$objResponse->addAssign("output","innerHTML",$val);

$objResponse->addAssign是一個函示就是把變數$val所帶的值,插入到表格裡面id叫做output的中間

回傳xajaxResponse物件

return $objResponse;

XAJAX初探(二)使用

雖然XAJAX已經盡力把複雜的AJAX改成熟悉PHP的寫法

但在即時處理上,還是得靠JAVASCRIPT來協助,就是著名的【觸發事件】

先舉各常常用到的事件

觸發事件像是踩到地雷就爆炸的情形一樣

只是在這邊,觸發事件有很多情況

以上面表格為例

當希望在step2的表格內,能立即做反應,就必須考慮到有幾種事件是會影響到step 2

第一種:直接用滑鼠點選step 2,所以就必須使用<input type="text" name="step2" onclick="">

第二種:先選step 1,然後用tab鍵移到step 2,就必須使用<input type="text" name="step2" onfocus="">

第三種:輸入完step2,使用tab鍵移到step 3或者用滑鼠點開,就必須使用<input type="text" name="step2" onblur="">

當然以下還有很多的觸發事件,例如:onchange=""

單看要在什麼時候呼叫程式立即做處理

決定好事件之後,就要開始呼叫副程式來處理,我們剛剛輸入的數值,語法是

<input type="text" name="step2" onclick="xajax_myFunction(xajax.getFormValues('myForm'));" >

我們拆開來看onclick=""是事件類別

xajax_myFunction()是呼叫剛剛註冊好的副程式($xajax->registerFunction("myFunction");)

當然可以取別的名字,只要前面註冊就OK

xajax.getFormValues('myForm')這個就是傳回表格(myForm)裡面所有值

所以記得在寫<form method="POST" action="" name="myForm">給它一個名字

xajax_myFunction(xajax.getFormValues('myForm')); 請把它看成呼叫一段副程式

當然也可以只傳變數xajax_myFunction($i,$j);

如果一個事件不過癮,可以多加幾個

<input type="text" name="step2" onclick="xajax_myFunction(xajax.getFormValues('myForm'));" onBlur="xajax_myFunction3($i,$j'');" onFocus="xajax_myFunction(xajax.getFormValues('myForm'),$i,$j);">

xajax初探(一)安裝

下載網址

目前穩定版本為0.2.5

下載下來,解壓縮後,在程式所在目錄建立目錄,例如xajax

在程式開頭引入xajax函式

require_once( 'xajax/xajax.inc.php' );

———————————————————————————————————————————————

然後底下建立xajax物件

$xajax=new xajax();

———————————————————————————————————————————————

提供額外的除錯功能,決定是否要使用 xajax debug

$xajax->debugOn();

每一步驟,會用alert方式跳出來,可以省略

———————————————————————————————————————————————

註冊在php中所要呼叫的函式

$xajax->registerFunction("myFunction");

xajax就是省略javascript程式碼,看似直接用PHP的架構寫出AJAX

而這段語法就是呼叫PHP的副程式一般,所以底下會有

function myFunction() {

    程式碼

}

可以註冊很多個$xajax->registerFunction("functionname1");

———————————————————————————————————————————————

處理呼叫

$xajax->processRequests();

———————————————————————————————————————————————

在<html><head>

中間填入

<!--產生xajax初始化所需的代碼-->
<?php $xajax->printJavascript('xajax/'); ?>

</head>

———————————————————————————————————————————————

所以綜合起來,如果要使用XAJAX的功能,必須有以下的步驟

require_once( 'xajax/xajax.inc.php' );

$xajax=new xajax();

$xajax->registerFunction("myFunction");

$xajax->processRequests();

<html><head>

<?php $xajax->printJavascript('xajax/'); ?>

</head>

額外一提,建議使用UTF-8,用big5會有意想不到的問題

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

2008年5月30日 星期五

按下submit出現確認視窗



input type="submit" value="送出" onclick="return confirm('yes or no');"

2008年5月21日 星期三

在PHP使用header

使用header("Location:");前

先去php.ini

把output_buffering改成On 即可

2008年4月29日 星期二

徹底解決phpmyadmin亂碼問題

UTF8的中文編碼是解決中文的最後一張王牌

所以MYSQL跟PHP都以UTF8為主

但就出現一個問題,瀏覽phpmyadmin的時候就會出現亂碼

簡單的說phpmyadmin不管輸出、輸入、匯出、匯入都是以latin1為編碼原則

為什麼要以這個為主,我也不知道,但確實困擾我很久

所以,接下來的步驟總歸一句話就是把所有的latin1都改成UTF8

以windows環境,AppServ套件,是在/windows/my.ini 裡面

把default-character-set=latin1這行

改成default-character-set=UTF8 然後重開

接下來進入每個表單的結構,原本是latin1_swedish_ci修改成utf8_general_ci



再進入上面該資料表的管理界面,要更改資料表的編碼



進入管理



也是一樣把latin1_swedish_ci修改成utf8_general_ci

然後進入資料庫的資料表列表,要改資料庫的編碼



也是進入管理把改成default-character-set=UTF8



這樣一來!也可以用匯入的功能!也不會有亂碼出現囉!

記得匯入的文件也是要編成UTF8

2008年4月21日 星期一

表格中按tab的順序

< input type="text" tabindex="1">