シート間の差分を出すやつ
先日Excelを購入したこともあり、vbaを最近使用している。
シート間の差分を出すコードを書いてみた。差分があった行をマーキングするようにした。
※コードの中には、途中経過を把握するためにイミディエイトウィンドウに表示する情報もそのまま残している。
Option Explicit Sub sample() Application.ScreenUpdating = False Dim num As Long num = Cells(Rows.Count, 2).End(xlUp).Row Dim i As Integer i = 0 Dim j As Integer j = 0 Dim k As Integer k = 0 Dim m As Variant m = 0 i = 8 j = 3 k = 4 Dim ans As Variant ans = 0 Dim arr() As Variant ReDim arr(100) Dim l As Integer l = 0 For i = 8 To 12 With ActiveSheet Debug.Print i - 7 Debug.Print "-----" For k = 4 To 10 On Error GoTo Err_Label m = WorksheetFunction.Match(Cells(i, j), Worksheets(.Previous.Name).Cells(3, 3).EntireColumn, 0) ans = WorksheetFunction.Index(Worksheets(.Previous.Name).Range("$A$1:$Z$20"), m, k) arr(k - 4) = WorksheetFunction.CountIf(Worksheets(.Previous.Name).Cells(m, k), Cells(m, k)) If arr(k - 4) >= 1 Then l = l + 1 ElseIf arr(k - 4) = 0 Then ' End If Debug.Print ans Debug.Print "arr:" & arr(k - 4) Debug.Print "wwww" Next Debug.Print "-----" If l = 7 Then Debug.Print "完全一致" l = 0 Else For k = 4 To 11 Cells(i, k - 1).Interior.Color = RGB(255, 255, 0) Debug.Print "新規" Next l = 0 End If End With Next Exit Sub Err_Label: MsgBox "見つかりませんでした。エラーコードは次の通りです。" & Err.Number & "," & Err.Description On Error GoTo 0 Resume Next End Sub
電卓作ってる
Python入門ということで電卓作ってる。とりあえず画面表示ができた。(このページも逐次更新していく予定)
#!/usr/bin/env/python # -*- coding: utf8 -*- # -*- coding: ascii -*- import sys import Tkinter as Tk import numpy as np i = 0 j = 0 array = [['7','8','9','*'],['4','5','6','-'],['1','2','3','+'],['0','.','/','=']] strings = 0 def CulcValue(event): count = 0 if count == 0: if array[i][j] == array[0][3] : mul = 0 mul += 1 #* count += 1 elif array[i][j] == array[1][3] : sub = 0 sub += 1 #- count += 1 elif array[i][j] == array[2][3] : add = 0 add += 1 #+ count += 1 elif array[i][j] == array[3][1] : dec = 0 dec += 1 #. count += 1 elif array[i][j] == array[3][2] : div = 0 div += 1 #/ count += 1 elif array[i][j] == array[3][3] : equ = 0 equ += 1 #= count += 1 if mul == 1: strings = value1*value2 var.set(strings) elif sub == 1: strings = value1-value2 var.set(strings) elif add == 1: strings = value1+value2 var.set(strings) elif div ==1: strings = value1/value2 var.set(strings) else: pass else: value1 = array[i][j] elif count == 1: value2 = array[i][j] else: pass class Frame(Tk.Frame): def __init__(self,master=None): Tk.Frame.__init__(self,master,height=200,width=200) self.master.title('Nested Frames') var = Tk.StringVar() var.set("0") f_display = Tk.Frame(self,relief=Tk.RIDGE,bd=4) f_display.pack(fill=Tk.X,expand=1) display = Tk.Label(f_display, text=var,width=10, relief=Tk.SUNKEN, bd=2, anchor = Tk.E,font=('Helvetica', '24'), bg='white') display.grid(row=0, column=1, rowspan=2, sticky=Tk.N+Tk.S) #Second Frame f2 = Tk.Frame(self,relief=Tk.RIDGE,bd=2) f2.pack(pady=2) # array = [['7','8','9','*'],['4','5','6','-'],['1','2','3','+'],['0','.','/','=']] for i in range(4): for j in range(4): button = Tk.Button(f2,text=array[i][j]) button.grid(row=i,column=j) #f2.place(relx=0,rely=0) button.bind("<Button-1>", CulcValue) if __name__ == '__main__': f = Frame() f.place() # f.pack() f.grid() f.mainloop()
FizzBuzzに関する5つの問題を解いた
Qiitaを眺めていたら、面白い記事を見つけた。 qiita.com ということで、僕も解いてみた(発展質問はまだ解いてない)
[質問1] 1から100までの数をプリントするプログラムを書けるか?
#include<stdio.h> int main(void) { int i; for (i=1;i<=100;i++) { printf("%d\n",i); } return 0; }
[質問2] 3の倍数なら「Fizz」 5の倍数なら「Buzz」 両方の倍数なら「FizzBuzz」
1 #include<stdio.h> 2 3 int main(void) 4 { 5 6 int i=1; 7 8 while(i<100) 9 { 10 if((i%3 == 0)&&(i%5 == 0)) printf("FizzBuzz\n"); 11 else if(i%3 == 0) printf("Fizz\n"); 12 else if(i%5 == 0) printf("Buzz\n"); 13 else printf("%d\n",i); 14 i++; 15 } 16 return 0; 17 18 }
[質問3] FizzBuzzを関数に分割できるか?
1 #include<stdio.h> 2 3 void toFizzBuzz(int n); 4 5 int main(void) 6 { 7 int i = 1; 8 9 while(i<=100) 10 { 11 toFizzBuzz(i); 12 i++; 13 } 14 return 0; 15 } 16 17 18 19 void toFizzBuzz(int n) 20 { 21 if ((n%3 == 0)&&(n%5 == 0)) printf("FizzBuzz\n"); 22 else if(n%3 == 0) printf("Fizz\n"); 23 else if(n%5 == 0) printf("Buzz\n"); 24 else printf("%d\n",n); 25 }
#include<stdio.h> #include<assert.h> #include<stdlib.h> #include<string.h> #define N 256 char fizzbuzz[30]="FizzBuzz"; char fizz[30]="Fizz"; char buzz[30]="Buzz"; char *toFizzBuzz(int n); int main(void) { int i = 1; while(i<=100) { assert(toFizzBuzz(2)=="FizzBuzz"); toFizzBuzz(i) printf("%s\n",toFizzBuzz(i)); i++; } return 0; } char *toFizzBuzz(int n) { if ((n%3 == 0)&&(n%5 == 0)){ return "FizzBuzz"; }else if(n%3 == 0){ return "Fizz"; }else if(n%5 == 0){ return "Buzz"; }else{ static int tes; tes = n; static char s1[N] = {'\0'}; sprintf(s1,"%d",tes); return s1; } }
[質問5] HTML出力とテキスト出力を簡単にスイッチできるようにできるか?
これに関しては、元の記事の関数の処理のsprintfの出力文字列に指定してある記法で表記できることをゴールとした。 また、実行した際に、scanfでどちらにスイッチするか聞けるようにした。
#include<stdio.h> #include<assert.h> #include<stdlib.h> #include<string.h> #define N 256 static int flag1=0; static int flag2=0; static int flag3=0; //char ans[30]={'\0'}; char fizzbuzz[30]="FizzBuzz"; char fizz[30]="Fizz"; char buzz[30]="Buzz"; //int num = 0; char *toFizzBuzz(int n); char *html_printer(char *elements); char *text_printer(char *elements); int main(void) { int i = 1; char s[N]; char text[50] = {'\0'}; printf("html出力?:Y/N"); scanf("%s",text); while(i<=100) { if(text[0] == 'Y') { char *ans = toFizzBuzz(i); //ここはhtml出力用 printf("%s\n",html_printer(ans)); }else{ char *ans = toFizzBuzz(i); //ここはtext出力用 printf("%s\n",text_printer(ans)); } i++; } return 0; } char *toFizzBuzz(int n) { if ((n%3 == 0)&&(n%5 == 0)){ return "FizzBuzz"; }else if(n%3 == 0){ return "Fizz"; }else if(n%5 == 0){ return "Buzz"; }else{ static int tes; tes = n; static char s1[N] = {'\0'}; sprintf(s1,"%d",tes); return s1; } } char *html_printer(char *elements) { static char s[] = {'\0'}; int len = 0; int i = 0; len = strlen(elements);//文字列の要素数取得 for(i=0; i<len; i++) { sprintf(s,"<li>%s</li>\n",elements); } return s; } char *text_printer(char *elements) { static char s2[] = {'\0'}; int len = 0; int i = 0; len = strlen(elements);//文字列の要素数取得 for(i=0; i<len; i++) { sprintf(s2,"{%s}\n",elements); } return s2; }
ひとこと掲示板作成(PDO接続編)
前回http://ma-swan.hatenablog.com/entry/2019/02/22/013654、パーフェクトPHPの6章の「ひとこと掲示板作成」をlaravelのクエリビルダを用いて作成した。
ところで、僕が読んでいるパーフェクトPHP(第5刷)ではPHP5.3.2を使用することを前提に書かれている。
そのため、この「ひとこと掲示板作成」では、mysql_connect()を用いてDBに接続するようにコーディングされている。
しかし、mysql_ で始まる関数は、PHP 5.5.0 で非推奨になり、PHP 7.0.0 で削除された。現在では生PHPでDBに接続するためには、PDOまたはMySQLiを使用する。
そこで今回は、laravel使用環境だが勉強のためあえてPDO接続でDB接続をしてみた。
(※勿論、第5刷の時点でPDOについては11章で触れている。サンプルプログラムではmysql_connect()を使用しているという意味。最新版は未確認。)
また、PDOのクラスが存在しないというエラーが表示されることがあり、調べていると、php.iniを編集して、extension=php_pdo.dllを追記すべきという記事が多々見つかる。しかし、PHP 5.3 以降はこの工程が不要となっている。PHP公式マニュアル参照:
http://php.net/manual/ja/pdo.installation.php このエラーはOnelinebbsController2.phpのnamespaceの後にuse PDO;を追記することで解決した。
C:\xampp\htdocs\laravelapp>php --version PHP 7.1.9 (cli) (built: Aug 30 2017 18:37:35) ( ZTS MSVC14 (Visual C++ 2015) x86 ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies C:\xampp\htdocs\laravelapp>php artisan --version Laravel Framework 5.5.12
OnelinebbsController2.php <?php //OnelinebbsControllerのデータベースPDO接続版 namespace App\Http\Controllers; use PDO; use Illuminate\Http\Request; use App\Http\Requests\RubihuriRequest; use Validator; use Illuminate\Support\Facades\DB; use App\Http\Requests\OnelinebbsRequest; class OnelinebbsController2 extends Controller { public function bbs_index2(Request $request) { //echo phpinfo(); try{ $dbh = new PDO( 'sqlite:C:\xampp\htdocs\laravelapp\database\keijiban_database.sqlite', '', '', array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_EMULATE_PREPARES => false, ) ); //全体表示処理 $prepare = $dbh->prepare('SELECT * FROM bbs'); $prepare->execute(); $result = $prepare->fetchAll(PDO::FETCH_ASSOC); } catch (PDOException $e) { $error = $e->getMessage(); } //var_dump($result); return view('layouts.bbs2',['items'=>$result]); $dbh = null; } public function bbs_post(OnelinebbsRequest $request) { /* bbs_postでは実際の画面表示はしない。画面遷移の処理である。 最終的にリダイレクトして全体表示している。 */ date_default_timezone_set('Asia/Tokyo'); try{ $dbh = new PDO( 'sqlite:C:\xampp\htdocs\laravelapp\database\keijiban_database.sqlite', '', '', array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_EMULATE_PREPARES => false, ) ); $date= date("Y/m/d H:i:s"); //insert処理 $prepare = $dbh->prepare('INSERT INTO bbs VALUES(:name,:comment,:date)'); $prepare->bindValue(':name',(int)$request->name,PDO::PARAM_STR); $prepare->bindValue(':comment',(int)$request->comment,PDO::PARAM_STR); $prepare->bindValue(':date',(int)$date,PDO::PARAM_INT); $prepare->execute(); $result = $prepare->fetchAll(PDO::FETCH_ASSOC); } catch (PDOException $e) { $error = $e->getMessage(); } return redirect('/onelinebbs'); $dbh = null; } }
bbs2.blade.php <!DOCTYPE html> <html lang="ja"> <head> <title>ひとこと掲示板</title> </head> <body> <h1>ひとこと掲示板</h1> @if(count($errors)>0) <p>入力に問題があります。再入力してください。</p> @endif <table> <form action="/onelinebbs2" method="post"> {{ csrf_field() }} @if($errors->has('name')) <tr><th>ERROR</th><td>{{$errors->first('name')}}</td></tr> @endif <tr><th align="left" valign="middle">名前:</th><td><input type="text" name="name" value="{{old('name')}}"></td></tr><!--入力値はnameとして扱われる--> @if($errors->has('comment')) <tr><th>ERROR</th><td>{{$errors->first('comment')}}</td></tr> @endif <tr><th align="left" valign="middle">ひとこと:</th><td><input type="text" name="comment" size="60" value="{{old('comment')}}"></td></tr> <tr><th></th><td><input type="submit" name="submit" value="送信"></td></tr> </form> </table> <table border="0"> @foreach ($items as $key => $value) <ul> <li> {{$value['id']}} : {{$value['name']}} {{$value['comment']}} - {{$value['date']}}; </li> </ul> @endforeach </table> </body> </html>
web.php Route::get('onelinebbs_pdo','OnelinebbsController2@bbs_index2');
参考文献
Outlookで選択したアイテムを任意のフォルダ作成して格納したい
表題通り。普段メーラーはOutlookを使っている。ファイルを別ディレクトリの中に分別して格納することがあるのだが、これを自動化した。
Sub sample() ' Application.ScreenUpdating = False Dim path As String Dim fso As Object Dim sunday As Date Dim monday As Date Dim foldername As String Dim inumber As Integer Dim i As Integer 'Dim oFolder As Outlook.Folder 'フォルダ Dim nowitem As MailItem 'メールアイテム Dim nowdate As String Dim nowsbjct As String Dim ary As Variant '不可文字削除用配列 Dim r As Integer Dim flname As String Dim PathAry As Variant 'path用配列 Dim outlookObj As Outlook.Application 'サブフォルダの設定 Dim myNameSpace, objmailItem As Object Dim InboxFolder, subfolder As Long ' Set outlookObj = CreateObject("Outlook.Application") ' Set myNameSpace = outlookObj.GetNamespace("MAPI") ' Set InboxFolder = myNameSpace.GetDefaultFolder(6) ' Set subfolder = InboxFolder.Folders("******") ary = Array("RE: ", "FW: ", "\", "/", ":", "*", "?", "<", ">", "|", """", "[", "]", ",") 'Date減算 monday = now - 7 sunday = now - 1 foldername = Format(monday, "yyyy年mm月dd日") & "~" & Format(sunday, "yyyy年mm月dd日") ' Debug.Print foldername Set fso = CreateObject("Scripting.FileSystemObject") 'フォルダを作成するための専用のオブジェクト(インスタンス) ' ' PathAry = Array("test", "\test", "\test", "\test", "\test", "test", "\", "") PathAry(UBound(PathAry)) = foldername ' path = Join(PathAry, "") 'Debug.Print path fso.CreateFolder path 'フォルダの作成 ' inumber = Application.ActiveExplorer.Selection.Count '選択中のアイテム数を取得 'Debug.Print inumber For i = 0 To inumber - 1 ' Set nowitem = Application.ActiveExplorer.Selection.Item(i + 1) 'i番目のアイテムの定義 ' nowsbjct = nowitem.Subject '件名(?) 'nowdate = nowitem.ReceivedTimeここは関係ない 'Debug.Print nowsbjct For r = 0 To UBound(ary) nowsbjct = Replace(nowsbjct, ary(r), "") Next r flname = nowsbjct & ".msg" 'ファイル名生成 ' Debug.Print flnam 'nowitem.SaveAs path & flname, olMSG nowitem.SaveAs path & "\" & flname, olMSG 'ファイル保存 Next i Set fso = Nothing Set nowitem = Nothing End Sub
ひとこと掲示板作成
パーフェクトPHPhttps://www.amazon.co.jp/dp/B00P0UDWQY/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1を読んでいると、6章で「ひとこと掲示板作成」を行うことになる。せっかくlaravelも同時に学んでいることだし、これをlaravelで作成しなおしてみた。
C:\xampp\htdocs\laravelapp>php --version PHP 7.1.9 (cli) (built: Aug 30 2017 18:37:35) ( ZTS MSVC14 (Visual C++ 2015) x86 ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies C:\xampp\htdocs\laravelapp>php artisan --version Laravel Framework 5.5.12
OnelinebbsController.php <?php //パーフェクトPHP6章のlaravel版 namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests\RubihuriRequest; use Validator; use Illuminate\Support\Facades\DB; use App\Http\Requests\OnelinebbsRequest; class OnelinebbsController extends Controller { public function bbs_index(Request $request) { $items = DB::table('bbs')->get(); return view('layouts.bbs',['items'=>$items]); } public function bbs_post(OnelinebbsRequest $request) { /* bbs_postでは実際の画面表示はしない。画面遷移の処理である。 最終的にリダイレクトして全体表示している。 */ date_default_timezone_set('Asia/Tokyo'); $param = [ 'name' => $request->name, 'comment' => $request->comment, 'date' => date("Y/m/d H:i:s"), ]; DB::table('bbs')->insert($param); // DB::table('bbs')->insert($param); return redirect('/onelinebbs'); } }
bbs.blade.php <!DOCTYPE html> <html lang="ja"> <head> <title>ひとこと掲示板</title> </head> <body> <h1>ひとこと掲示板</h1> @if(count($errors)>0) <p>入力に問題があります。再入力してください。</p> @endif <table> <form action="/onelinebbs2" method="post"> {{ csrf_field() }} @if($errors->has('name')) <tr><th>ERROR</th><td>{{$errors->first('name')}}</td></tr> @endif <tr><th align="left" valign="middle">名前:</th><td><input type="text" name="name" value="{{old('name')}}"></td></tr> @if($errors->has('comment')) <tr><th>ERROR</th><td>{{$errors->first('comment')}}</td></tr> @endif <tr><th align="left" valign="middle">ひとこと:</th><td><input type="text" name="comment" size="60" value="{{old('comment')}}"></td></tr> <tr><th></th><td><input type="submit" name="submit" value="送信"></td></tr> </form> </table> <table border="0"> @foreach ($items as $item) <ul> <li> {{$item->name}}:{{$item->comment}}-{{$item->date}} </li> </ul> @endforeach </table> </body> </html>
OnelinebbsRequest.php <?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class OnelinebbsRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { if ($this->path() == 'onelinebbs2') { return true; }else{ return false; } } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'name' => 'required', 'comment' => 'required', ]; } public function messages() { return [ 'name.required' => '名前は必ず入力してください。', 'comment.required' => 'コメントが必要です。', ]; } }
web.php Route::get('onelinebbs','OnelinebbsController@bbs_index'); Route::post('onelinebbs','OnelinebbsController@bbs_post');
実行結果
ルビ振りAPIを使ってみる
最近PHPを勉強している。どうせなら何か作ってみたいなと思っていたところ、ルビ振りAPIhttps://developer.yahoo.co.jp/webapi/jlp/furigana/v1/furigana.htmlというものを見つけたのでこれを用いてMVCモデルを作成した。
C:\xampp\htdocs\laravelapp>php --version PHP 7.1.9 (cli) (built: Aug 30 2017 18:37:35) ( ZTS MSVC14 (Visual C++ 2015) x86 ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies C:\xampp\htdocs\laravelapp>php artisan --version Laravel Framework 5.5.12
RubihuriController8.php <?php //RubihuriController7.phpのクエリビルダ版 namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests\RubihuriRequest; use Validator; use Illuminate\Support\Facades\DB; class RubihuriController8 extends Controller { public function rubihuri_index(Request $request) { $items = DB::table('rubihuri')->get(); return view('yahoo.rubihuri_index',['items'=>$items]); } public function rubihuri_post(Request $request) { $items = DB::table('rubihuri')->get(); return view('yahoo.rubihuri_index',['items'=>$items]); } public function add(RubihuriRequest $request) { return view('yahoo.rubihuri7'); //$items = DB::table('rubihuri')->get(); //return view('yahoo.rubihuri5',['items' => $items]); } public function create(RubihuriRequest $request) { $api = 'http://jlp.yahooapis.jp/FuriganaService/V1/furigana'; $appid = '*****************************'; $msg = $request->input_value; $params = array( 'sentence' => $msg ); $ch = curl_init($api.'?'.http_build_query($params)); //curl_init() cURL セッションを初期化する curl_setopt_array($ch, array( CURLOPT_RETURNTRANSFER => true, CURLOPT_USERAGENT => "Yahoo AppID: $appid" )); //CURL 転送用の複数のオプションを設定する $result = curl_exec($ch); curl_close($ch); $obj = simplexml_load_string($result); $json = json_encode($obj,JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES); //取得したxmlをjsonに変換している $array = json_decode($json ,true); $string1 = $array["Result"]["WordList"]["Word"][0]["Furigana"]; $string2 = $array["Result"]["WordList"]["Word"][1]["Furigana"]; $string_linking = $string1 . $string2; $param = [ 'input_value' => $request->input_value, 'string_linking' => $string_linking, ]; DB::table('rubihuri')->insert($param); return redirect('/rubihuri8'); } public function edit(Request $request) { $item = DB::table('rubihuri')->where('id',$request->id)->first(); return view('yahoo.edit2',['form'=>$item]); } public function update(Request $request) { $param = [ 'string_linking' => $request->string_linking ]; DB::table('rubihuri')->where('id',$request->id)->update($param); return redirect('/rubihuri8'); } }
rubihuri_index.blade.php @extends('layouts.helloapp2') @section('title','ルビ振りAPI -test') @section('menubar') @parent インデックスページ @endsection @section('content') <table border="0"> <tr><th>input_value</th><th>string_linking</th></tr> @foreach ($items as $item) <tr> <td>{{$item->input_value}}</td> <td>{{$item->string_linking}}</td> </tr> @endforeach </table> @endsection @section('content2') @component('components.message') @slot('msg_title') mainページ @endslot @slot('msg_content') ここはデータ全体を表示するページです。 @endslot @endcomponent @endsection @section('footer') copyright 2019 ma_swan @endsection
helloapp2.blade.php <!DOCTYPE html> <html lang="ja"> <head> <title>@yield('title')</title> <link rel="stylesheet" href="css/styles.css"> </head> <body> <h1>@yield('title')</h1> @section('menubar') <ul> <p class="menutitle">helloapp2.blade.php(親)/rubihuri_index.blade.php(子)使用</p> <li>@show</li> </ul> <hr size="1"> <div class="content" align="center"> @yield('content') </div> <div class="content2"> @yield('content2') </div> <div class="footer"> @yield('footer') </div> </body> </html>
rubihuri7.blade.php @extends('layouts.helloapp3') @section('title','ルビ振りAPI -test') @section('menubar') @parent 新規フィールド追加ページ @endsection @section('content') <table border="0"> <form action="/rubihuri8/add" method="POST"> {{csrf_field()}} @if($errors->has('input_value')) <tr><th>ERROR</th><td>{{$errors->first('input_value')}}</td></tr> @endif <tr><th>input_value: </th><td><input type="text" name="input_value"></td></tr> <tr><th></th><td><input type="submit" value="send"></td></tr> </form> </table> @endsection @section('content2') @component('components.message') @slot('msg_title') Addページ @endslot @slot('msg_content') ここは新規フィールド追加のページです。 @endslot @endcomponent @endsection @section('footer') copyright 2019 ma_swan @endsection
helloapp3.blade.php <!DOCTYPE html> <html lang="ja"> <head> <title>@yield('title')</title> <link rel="stylesheet" href="../css/styles.css"> </head> <body> <h1>@yield('title')</h1> @section('menubar') <ul> <p class="menutitle">helloapp3.blade.php(親)/rubihuri7.blade.php(子)使用</p> <li>@show</li> </ul> <hr size="1"> <div class="content" align="center"> @yield('content') </div> <div class="content2"> @yield('content2') </div> <div class="footer"> @yield('footer') </div> </body> </html>
edit2.blade.php @extends('layouts.helloapp4') @section('title','Edit') @section('menubar') @parent 更新ページ @endsection @section('content') <table border="0"> <form action="/rubihuri8/edit" method="post"> {{ csrf_field() }} <input type="hidden" name="id" value="{{$form->id}}"> <tr> <th>string_linking: </th> <td><input type="text" name="string_linking" value="{{$form->string_linking}}"></td> </tr> <tr> <th></th> <td><input type="submit" value="send"></td> </tr> </form> </table> @endsection @section('content2') @component('components.message') @slot('msg_title') Editページ @endslot @slot('msg_content') ここは入力値の修正用のページです。 @endslot @endcomponent @endsection @section('footer') copyright 2019 ma_swan @endsection
helloapp4.blade.php <!DOCTYPE html> <html lang="ja"> <head> <title>@yield('title')</title> <link rel="stylesheet" href="../css/styles.css"> </head> <body> <h1>@yield('title')</h1> @section('menubar') <ul> <p class="menutitle">helloapp4.blade.php(親)/edit2.blade.php(子)使用</p> <li>@show</li> </ul> <hr size="1"> <div class="content"> @yield('content') </div> <div class="content2"> @yield('content2') </div> <div class="footer"> @yield('footer') </div> </body> </html>
RubihuriValidator.php <?php namespace App\Http\Validators; use Illuminate\Validation\Validator; class RubihuriValidator extends Validator { //このメソッドではマッチしなかったら1を返す。 public function validateRubihuri($attribute,$value,$parameters) { if(preg_match("/^[a-zA-Z0-9]+$/", $value)===0) return 1; } }
message.blade.php <style> .message{ border: double 4px #ccc; margin: 10px; padding:10px; background-color:#fafafa; } .msg_title{ margin: 10px 20px; color:#333; font-size:16pt; font-weight: bold; } .msg_content{ margin: 10px 20px; color:#333; font-size: 12pt; } </style> <div class="message"> <p class="msg_title">{{$msg_title}}</p> <p class="msg_content">{{$msg_content}}</p> </div>
styles.css body{ font-size: 16pt; font-family: Verdana,sans-serif; /*color:#999; */ /*color: rgb(0,255,0);*/ color:#333; margin:5px; } h1{ /*ここは「ルビ振りAPIてすと」のところ*/ font-size: 30pt; /*text-align: right; */ text-align: center; /*color: #f6f6f6; */ /*color: rgb(0,255,0);*/ color: #333; /*margin:-20px 0px -30px 0px; */ margin:0px 0px 0px 0px; letter-spacing: -4pt; } ul{ /*ここは「インデックスページ」のところ。*/ font-size: 20pt; text-align: center; list-style: none; } hr{ margin: 25px 100px; border-top:1px dashed #ddd; } .menutitle{/*※メニューのところ。classには.で対応する。*/ font-size: 20pt; font-weight: bold; margin: 0px; color: #333; } .content{ /*content全体の設定*/ margin:0px; /*text-align: right;*/ } table{/*テーブルを表示しているところ*/ margin:0px; } .footer{ text-align: right; font-size: 10pt; margin: 10px; border-bottom: solid 1px #ccc; color: #ccc; } th{ background-color:#999; color:#fff; padding:5px 10px; } td{ border: solid 1px #aaa; color:#999; color:#333; padding:5px 10px; font-size: 15px; } td:hover{ color:crimson; } input:hover{ color:royalblue; }
RubihuriServiceProvider.php <?php namespace App\Providers; use Illuminate\Support\Facades\View; use Illuminate\Support\ServiceProvider; use Validator; use App\Http\Validators\RubihuriValidator; class RubihuriServiceProvider extends ServiceProvider { /** * Bootstrap the application services. * * @return void */ public function boot() { $validator = $this->app['validator']; $validator->resolver(function($translator, $data, $rules, $messages)//オリジナルバリデータを追加 { return new RubihuriValidator($translator, $data, $rules, $messages); }); } /** * Register the application services. * * @return void */ public function register() { // } }
RubihuriRequest.php <?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class RubihuriRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { if($this->path() == 'rubihuri8/add') { return true; }else{ return false; } } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'input_value'=>'rubihuri', ]; } public function messages() { return [ 'input_value.rubihuri'=>'日本語で入力してね。', ]; } }
web.php <?php use App\Http\Middleware\HelloMiddleware; Route::get('rubihuri8','RubihuriController8@rubihuri_index'); Route::post('rubihuri8','RubihuriController8@rubihuri_post'); Route::get('rubihuri8/add','RubihuriController8@add'); Route::post('rubihuri8/add','RubihuriController8@create'); Route::get('rubihuri8/edit','RubihuriController8@edit'); Route::post('rubihuri8/edit','RubihuriController8@update');