PHP メールフォーム(お問い合わせフォーム)をプログラミングしてみる

PHPプログラミングの初級編、中級編を終えれば、メールフォームのプログラミングができる程度の知識は身についていると思います。
メールフォームの仕様
今回開発するメールフォームには
- お名前
- フリガナ
- メールアドレス
- メールアドレス(確認用)
- お問い合わせ内容
の項目があり、全項目必須入力、入力されたメールアドレス宛と管理者にメールが送信される。
ページは
- 入力画面
- 確認画面
- 完了画面
- エラー画面
を用意します。
セキュリティー
今回開発するメールフォームはXSSへの対策は行いますが、それ以外の機能はまだ実装しません。
後々、ブラッシュアップしていく過程で色々な機能を実装していきたいと思います。
HTMLでメールフォームで利用するページを作成する
それではHTMLでメールフォームをコーディングしてみます。
※今回はソースを簡素化してみやすくするためCSSは利用していません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>メールフォーム</title> <meta name="viewport" content="width=1020"> </head> <body> <h1>メールフォーム</h1> <h2>お問い合わせ内容入力</h2> <p>*は必須項目です。</p> <form action="" method="post"> <h3>*<label for="name01">お名前</label></h3> <div><input type="text" name="name01" value=""></div> <h3>*<label for="name02">フリガナ</label></h3> <div><input type="text" name="name02" value=""></div> <h3>*<label for="mail01">メールアドレス</label></h3> <div><input type="text" name="mail01" value=""></div> <h3>*メールアドレス<br><span>(確認用)</span></label></h3> <div><input type="text" name="mail02" value=""></div> <h3><label for="comment">お問い合わせ内容</label></h3> <div><textarea name="comment"></textarea></div> <div> <button type="submit" name="confirm">入力内容を確認する</button> </div> </form> </body> </html> |
こちらは入力された内容を確認するための確認画面として利用するHTMLです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>メールフォーム</title> <meta name="viewport" content="width=1020"> </head> <body> <h1>メールフォーム</h1> <h2>お問い合わせ入力内容のご確認</h2> <form action="" method="post"> <h3>お名前</h3> <div><!-- 入力された内容を表示 --></div> <h3>フリガナ</h3> <div><!-- 入力された内容を表示 --></div> <h3>メールアドレス</h3> <div><!-- 入力された内容を表示 --></div> <h3>お問い合わせ内容</h3> <div><!-- 入力された内容を表示 --></div> <div> <button type="submit" name="send">この内容で送信する</button> <button type="submit" name="return">修正する</button> </div> </form> </body> </html> |
送信完了後表示する完了画面(サンクスページ)のHTMLです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>メールフォーム</title> <meta name="viewport" content="width=1020"> </head> <body> <h1>メールフォーム</h1> <h2>お問い合わせ完了</h2> <p>正常にメールが送信されました。</p> </body> </html> |
送信時にエラーが発生した場合に表示するエラー画面のHTMLです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>メールフォーム</title> <meta name="viewport" content="width=1020"> </head> <body> <h1>メールフォーム</h1> <h2>エラーが発生しました。</h2> <p>時間を開けてお試しください。</p> </body> </html> |
初期設定部分やデータの受け渡し部分をプログラミングする
初期設定部分
では、<form></form>から送信されたデータの受け取りや初期設定部分をプログラミングしたいと思います。
- 今回データの一時保存で$_SESSIONを利用するので「session_start()」を記述
- 入力、確認、完了、エラーページを振り分けるための変数を用意
- メールアドレス設定用の変数を用意し、メールアドレスを代入
- 送信者名を表示するための変数を用意、代入
- ページタイトルを変数で管理するために用意、代入
- 自動返信メールの件名用の変数を用意、$page_titleと連結して件名を代入
- エラー確認用のフラグを用意、初期値は「false」=「エラー」、入力を確認できたら「true」=「入力確認済み」
- エラーのコメントを表示するための変数を用意、それぞれにエラーコメントを代入
上記が、プログラミングの内容となります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | <?php // セッションを利用する session_start(); // ページタイプ初期値 // 入力、確認、完了、エラーのページ振り分け用 $page_type = 'top'; // 各種メールアドレス設定 // $from、$cc、$bccに複数メールアドレスをせってする場合は「,」区切りで記述 $from = '任意の管理者用メールアドレスを入力'; $cc = ''; $bcc = ''; // $fromに設定したメールアドレスをリターンパスにも設定 $re_path = '-f'.$from; // 送信者名 $from_name = '送信社名'; // ページタイトル $page_title = 'お問い合わせ'; // 自動送信メール件名 $subject01 = $page_title.'ありがとうございます'; $subject02 = $page_title.'がありました。'; // 必須エラーフラグ初期値 // 初期値は「false」入力確認で「true」に変更 $err = false; $name01_err = false; $name02_err = false; $mail01_err = false; $mail02_err = false; $comment_err = false; // エラーコメント初期値 // それぞれの項目ごとにエラーの文言を用意 $err_str01 = '<div class="err">お名前を入力してください</div>'; $err_str02 = '<div class="err">フリガナを入力してください</div>'; $err_str03 = '<div class="err">メールアドレスを入力してください</div>'; $err_str04 = '<div class="err">メールアドレス(確認用)を入力してください</div>'; $err_str05 = '<div class="err">お問い合わせ内容を入力してください</div>'; |
データの受け渡し部分
POST形式で送信された場合に動作するように「$_SERVER[‘REQUEST_METHOD’] == ‘POST’」を用意し
入力画面から確認画面へ遷移時「isset( $_POST[‘confirm’] ) は name=”confirm” ボタンを押下した場合にtrueとなる」に$_SESSIONに$_POSTの値をそれぞれ代入する。
代入前に「$_SESSION = array()」でセッションを初期化する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | if( $_SERVER["REQUEST_METHOD"] == "POST" ){ if( isset( $_POST['confirm']) ){ // セッション初期化 $_SESSION = array(); // POSTをセッションに保存 $_SESSION['name01'] = $_POST['name01']; $_SESSION['name02'] = $_POST['name02']; $_SESSION['mail01'] = $_POST['mail01']; $_SESSION['mail02'] = $_POST['mail02']; $_SESSION['comment'] = $_POST['comment']; } } |
必須入力のチェック部分をプログラミングする
上記のデータ受け渡し後に、必須項目が入力されているかを確認する。
「empty」関数は引数の値がからの場合、trueを返すので、引数がからの場合は$err、$name01_errをそれぞれ「true」とし、未入力と判断する。
メールアドレスは、入力必須かつ「メールアドレス」と「メールアドレス(確認用)」が一致かつ、正しいメール形式かを確認する。
※正しいメール形式化の判断は正規表現で確認。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <?php // 必須エラーチェック if( empty( $_SESSION['name01'] ) ) $err = $name01_err = true; if( empty( $_SESSION['name02'] ) ) $err = $name02_err = true; if( empty( $_SESSION['mail02'] ) ) $err = $mail02_err = true; if( $_SESSION['mail01'] != $_SESSION['mail02'] ) { $err = $mail01_err = true; $err_str03 = '<div class="err">メールアドレスが一致しません</div>'; } if( !preg_match( '/^(?:[^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff])|"[^\\\\\x80-\xff\n\015"]*(?:\\\\[^\x80-\xff][^\\\\\x80-\xff\n\015"]*)*")(?:\.(?:[^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff])|"[^\\\\\x80-\xff\n\015"]*(?:\\\\[^\x80-\xff][^\\\\\x80-\xff\n\015"]*)*"))*@(?:[^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\\\x80-\xff\n\015\[\]]|\\\\[^\x80-\xff])*\])(?:\.(?:[^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\\\x80-\xff\n\015\[\]]|\\\\[^\x80-\xff])*\]))*$/', $_SESSION['mail01'] ) ) { $err = $mail01_err = true; $err_str03 = '<div class="err">メールアドレス形式で入力してください</div>'; } if( empty( $_SESSION['mail01'] ) ) { $err = $mail01_err = true; } ?> |
ページの振り分け
確認画面へ遷移時に入力必須のチェックを行い、問題なければ「確認ページ」を表示、エラーの場合は、ページ遷移せず入力画面のまま、入力エラーの内容を各項目に表示する
1 2 3 4 5 6 7 8 9 10 11 12 | <?php // 確認画面へ if( isset( $_POST['confirm']) ) { if( $err ) $page_type = 'top'; // 入力エラーのため入力画面のまま else $page_type = 'confirm'; // 入力確認ができたので確認画面へ遷移 } ?> |
確認画面から修正を行いたい場合のため、「入力ページ」へ戻るためのスクリプトを記述
1 2 3 4 5 6 7 8 9 | <?php // 修正画面へ else if( isset( $_POST['return'] ) ) { $page_type = 'top'; } ?> |
メール送信をクリックされた時のスクリプトを記述
確認画面からメール送信ボタンをクリックした際の処理を記述する。
確認画面から、送信押下時もエラーチェックを行い、エラーの場合は入力画面へ戻る。
問題なければ、メールの文面を生成しmb_send_mailで管理者、入力者にそれぞれメールを送信、me+senf_mailの戻り値「$retへ代入」が「true」の場合はサンクスページへ、エラーが来た場合は「エラー」ページへ遷移する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | <?php // メール送信 elseif( isset( $_POST['send'] ) ) { if( $err ){ $page_type = 'top'; } else{ // 入力内容作成 $msg = ''; $msg .= '■お名前'."\n"; $msg .= $_SESSION['name01']."\n"; $msg .= "\n"; $msg .= '■フリガナ'."\n"; $msg .= $_SESSION['name02']."\n"; $msg .= "\n"; $msg .= '■メールアドレス'."\n"; $msg .= $_SESSION['mail01']."\n"; $msg .= "\n"; $msg .= '■お問い合わせ内容'."\n"; $msg .= $_SESSION['comment']."\n"; $msg .= "\n"; // 入力者用メール本文 $body01 = $_SESSION['name01'].'様'."\n"; $body01 .= "\n"; $body01 .= $page_title.'ありがとうございます。'."\n"; $body01 .= "\n"; $body01 .= '▼以下は送信した内容です。'."\n"; $body01 .= '===ここから======================================='."\n"; $body01 .= "\n"; $body01 .= $msg."\n"; $body01 .= "\n"; $body01 .= '=======================================ここまで==='."\n"; $body01 .= 'ありがとうございました。'."\n"; $body01 .= '=================================================='."\n"; // 管理者用メール本文 $body02 = $page_title.'がありました。'."\n"; $body02 .= "\n"; $body02 .= '▼'.$page_title."内容\n"; $body02 .= '===ここから======================================='."\n"; $body02 .= "\n"; $body02 .= $msg."\n"; $body02 .= "\n"; $body02 .= '=======================================ここまで==='; // 入力者用メールヘッダ $head01 = 'From:'.$from_name.'<'.$from.'>'."\n"; $head01 .= 'Cc:'."\n"; $head01 .= 'Bcc:'; // 管理者用メールヘッダ $head02 = 'From:'.$_SESSION['mail01']."\n"; $head02 .= 'Cc:'.$cc."\n"; $head02 .= 'Bcc:'.$bcc; $ret = false; // 入力者にメール送信 $ret = mb_send_mail( $_SESSION['mail01'], $subject01, $body01, $head01, $re_path ); // 管理者にメール送信 if( $ret ) $ret = mb_send_mail( $from, $subject02, $body02, $head02, $re_path ); if( $ret ){ $page_type = 'complete'; // セッション初期化 $_SESSION = array(); } else{ $page_type = 'error'; } } } ?> |
個別に解説したスクリプトとHTMLをまとめる
ここまで個別に解説して来ましたが、これらを一つのファイルにまとめて記述したものが下記になります。
下記の内容を記述し〇〇.phpで保存しサーバーにアップロードし動作を確認してみてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 | <?php // セッションを利用する session_start(); // ページタイプ初期値 // 入力、確認、完了、エラーのページ振り分け用 $page_type = 'top'; // 各種メールアドレス設定 // $from、$cc、$bccに複数メールアドレスをせってする場合は「,」区切りで記述 $from = '任意の管理者用メールアドレスを入力'; $cc = ''; $bcc = ''; // $fromに設定したメールアドレスをリターンパスにも設定 $re_path = '-f'.$from; // 送信者名 $from_name = '送信社名'; // ページタイトル $page_title = 'お問い合わせ'; // 自動送信メール件名 $subject01 = $page_title.'ありがとうございます'; $subject02 = $page_title.'がありました。'; // 必須エラーフラグ初期値 // 初期値は「false」入力確認で「true」に変更 $err = false; $name01_err = false; $name02_err = false; $mail01_err = false; $mail02_err = false; $comment_err = false; // エラーコメント初期値 // それぞれの項目ごとにエラーの文言を用意 $err_str01 = '<div class="err">お名前を入力してください</div>'; $err_str02 = '<div class="err">フリガナを入力してください</div>'; $err_str03 = '<div class="err">メールアドレスを入力してください</div>'; $err_str04 = '<div class="err">メールアドレス(確認用)を入力してください</div>'; $err_str05 = '<div class="err">お問い合わせ内容を入力してください</div>'; if( $_SERVER["REQUEST_METHOD"] == "POST" ){ if( isset( $_POST['confirm']) ){ // セッション初期化 $_SESSION = array(); // POSTをセッションに保存 $_SESSION['name01'] = $_POST['name01']; $_SESSION['name02'] = $_POST['name02']; $_SESSION['mail01'] = $_POST['mail01']; $_SESSION['mail02'] = $_POST['mail02']; $_SESSION['comment'] = $_POST['comment']; } // 必須エラーチェック if( empty( $_SESSION['name01'] ) ) $err = $name01_err = true; if( empty( $_SESSION['name02'] ) ) $err = $name02_err = true; if( empty( $_SESSION['mail02'] ) ) $err = $mail02_err = true; if( $_SESSION['mail01'] != $_SESSION['mail02'] ) { $err = $mail01_err = true; $err_str03 = '<div class="err">メールアドレスが一致しません</div>'; } if( !preg_match( '/^(?:[^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff])|"[^\\\\\x80-\xff\n\015"]*(?:\\\\[^\x80-\xff][^\\\\\x80-\xff\n\015"]*)*")(?:\.(?:[^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff])|"[^\\\\\x80-\xff\n\015"]*(?:\\\\[^\x80-\xff][^\\\\\x80-\xff\n\015"]*)*"))*@(?:[^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\\\x80-\xff\n\015\[\]]|\\\\[^\x80-\xff])*\])(?:\.(?:[^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\\\x80-\xff\n\015\[\]]|\\\\[^\x80-\xff])*\]))*$/', $_SESSION['mail01'] ) ) { $err = $mail01_err = true; $err_str03 = '<div class="err">メールアドレス形式で入力してください</div>'; } if( empty( $_SESSION['mail01'] ) ) { $err = $mail01_err = true; } // 確認画面へ if( isset( $_POST['confirm']) ) { if( $err ) $page_type = 'top'; else $page_type = 'confirm'; } // 修正画面へ else if( isset( $_POST['return'] ) ) { $page_type = 'top'; } // メール送信 elseif( isset( $_POST['send'] ) ) { if( $err ){ $page_type = 'top'; } else{ // 入力内容作成 $msg = ''; $msg .= '■お名前'."\n"; $msg .= $_SESSION['name01']."\n"; $msg .= "\n"; $msg .= '■フリガナ'."\n"; $msg .= $_SESSION['name02']."\n"; $msg .= "\n"; $msg .= '■メールアドレス'."\n"; $msg .= $_SESSION['mail01']."\n"; $msg .= "\n"; $msg .= '■お問い合わせ内容'."\n"; $msg .= $_SESSION['comment']."\n"; $msg .= "\n"; // 入力者用メール本文 $body01 = $_SESSION['name01'].'様'."\n"; $body01 .= "\n"; $body01 .= $page_title.'ありがとうございます。'."\n"; $body01 .= "\n"; $body01 .= '▼以下は送信した内容です。'."\n"; $body01 .= '===ここから======================================='."\n"; $body01 .= "\n"; $body01 .= $msg."\n"; $body01 .= "\n"; $body01 .= '=======================================ここまで==='."\n"; $body01 .= 'ありがとうございました。'."\n"; $body01 .= '=================================================='."\n"; // 管理者用メール本文 $body02 = $page_title.'がありました。'."\n"; $body02 .= "\n"; $body02 .= '▼'.$page_title."内容\n"; $body02 .= '===ここから======================================='."\n"; $body02 .= "\n"; $body02 .= $msg."\n"; $body02 .= "\n"; $body02 .= '=======================================ここまで==='; // 入力者用メールヘッダ $head01 = 'From:'.$from_name.'<'.$from.'>'."\n"; $head01 .= 'Cc:'."\n"; $head01 .= 'Bcc:'; // 管理者用メールヘッダ $head02 = 'From:'.$_SESSION['mail01']."\n"; $head02 .= 'Cc:'.$cc."\n"; $head02 .= 'Bcc:'.$bcc; $ret = false; // 入力者にメール送信 $ret = mb_send_mail( $_SESSION['mail01'], $subject01, $body01, $head01, $re_path ); // 管理者にメール送信 if( $ret ) $ret = mb_send_mail( $from, $subject02, $body02, $head02, $re_path ); if( $ret ){ $page_type = 'complete'; // セッション初期化 $_SESSION = array(); } else{ $page_type = 'error'; } } } } ?><!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title><?php echo $page_title;?></title> <meta name="viewport" content="width=1020"> </head> <body> <h1><?php echo $page_title;?></h1> <?php if($page_type == 'top'){ ?> <h2><?php echo $page_title;?>内容入力</h2> <p>*は必須項目です。</p> <form action="<?php echo $_SERVER['SCRIPT_NAME'];?>" method="post"> <h3>*<label for="name01">お名前</label></h3> <div><?php if($name01_err) echo $err_str01;?><input type="text" name="name01" value="<?php echo $_SESSION['name01'];?>"></div> <h3>*<label for="name02">フリガナ</label></h3> <div><?php if($name02_err) echo $err_str02;?><input type="text" name="name02" value="<?php echo $_SESSION['name02'];?>"></div> <h3>*<label for="mail01">メールアドレス</label></h3> <div><?php if($mail01_err) echo $err_str03;?><input type="text" name="mail01" value="<?php echo $_SESSION['mail01'];?>"></div> <h3>*メールアドレス<br><span>(確認用)</span></label></h3> <div><?php if($mail02_err) echo $err_str04;?><input type="text" name="mail02" value="<?php echo $_SESSION['mail02'];?>"></div> <h3><label for="comment">お問い合わせ内容</label></h3> <div><?php if($comment_err) echo $err_str05;?><textarea name="comment"><?php echo $_SESSION['comment'];?></textarea></div> <div> <button type="submit" name="confirm">入力内容を確認する</button> </div> </form> <?php } elseif( $page_type == 'confirm' ){ ?> <h2><?php echo $page_title;?>入力内容のご確認</h2> <form action="<?php echo $_SERVER['SCRIPT_NAME'];?>" method="post"> <h3>お名前</h3> <div><?php echo htmlspecialchars( $_SESSION['name01'], ENT_QUOTES, 'UTF-8' );?></div> <h3>フリガナ</h3> <div><?php echo htmlspecialchars( $_SESSION['name02'], ENT_QUOTES, 'UTF-8' );?></div> <h3>メールアドレス</h3> <div><?php echo htmlspecialchars( $_SESSION['mail01'], ENT_QUOTES, 'UTF-8' );?></div> <h3>お問い合わせ内容</h3> <div><?php echo nl2br( htmlspecialchars( $_SESSION['comment'], ENT_QUOTES, 'UTF-8' ) );?></div> <div> <button type="submit" name="send">この内容で送信する</button> <button type="submit" name="return">修正する</button> </div> </form> <?php } elseif( $page_type == 'complete' ){ ?> <h2><?php echo $page_title;?>完了</h2> <p>正常にメールが送信されました。</p> <?php } else{ ?> <h2>エラーが発生しました。</h2> <p>時間を開けてお試しください。</p> <?php } ?> </body> </html> |
PHPでメールフォームを開発してみて
メールを送信するだけのページですが、中には色々な条件分岐があり多少複雑に見えるかもしれませんが、PHPでのメールフォームのスクリプトは大抵このような感じです。
自身で開発するときには、入力項目や選択項目を増やしたり、必須項目の有無を設定してみたり色々試してみてください。
S.E->お勧め記事;
- XSERVERにSSHを利用してLaravel環境を構築する
- CrowdWorks いつの間にか「プロクラウドワーカー」になっていた
- Panic Nova 購入から1年が過ぎライセンスの更新時期の注意点
- PHP フレームワーク Laravel ディレクティブ – ループ変数 $loop –
- プログラマー になる為に必要な プログラミング以外 の知識・スキル
- macOS Monterey にアップデート後、composerやhomebrewでenv: php: No such file or directoryが出る
- CrowdWorks 提案後、受注に繋がりました。提案〜契約までの流れを解説
- Shopify APIを利用して在庫管理を行う
- PHPフレームワーク「Laravel」ディレクティブ-繰り返し処理(ループ処理)-
S.E->PR;
チームのタスク管理ツール【backlog】
FREENANCE(フリーナンス)
S.E->Weekly Ranking;
S.E->プロフィール;

