20210502のPHPに関する記事は5件です。

PHPでpostできるAPIを作ろう!

はじめに Swiftを勉強し始めてからSwiftでの仕事をしたいとこだわり続けてきたんですけど、API作るためにPHPの勉強したらPHPちょっと楽しいかもと思っています。 今回は簡単なPOSTできるAPIを作ろう思います。 サーバーサイドはPHP、クライアントサイドはSwiftを使います。 PHPのコード 説明を挟みながら少しずつコードを加えていく書き方でいきます。 api.php if ($_SERVER['REQUEST_METHOD'] === 'POST') { // 処理 } こちらはリクエストがPOSTかどうかの判定です。 GETなどの他のリクエストの処理をしたい場合は 'POST'の部分を変えてください。 api.php $response = array(); if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (isset($_POST['post_message']) === false) { $response['error'] = true; $response['message'] = "エラーのメッセージ"; } else { // nullじゃないとき } } isset()は値がnullかどうかを調べてくれる関数です。 nullならfalse,そうでないならtrueを返してくれます。 今回の場合ポストで送信されてきたpost_messageというキーの連想配列の値がnullの時にレスポンスでエラーを出すようにしています。 以下のコードはnullじゃないときというコメントの下に書いています。 api.php $post_message = $_POST['post_message']; //データベースに接続して保存したり... $response['error'] = false; $response['message'] = "成功のメッセージ"; //スコープの一番外に print json_encode($response); $_POST["キー"]でpostで送信した値を取り出せます。 php側はこんな感じです。 実際は正規表現などを用いてバリデーションチェック等を挟むことになると思います。 Swiftのコード PostViewController.swift class PostViewController: UIViewController { viewdidLoad() { super.viewdidLoad() let url = URL(string: "apiのURL")! let request = NSMutableURLRequest(url: url) //httpMethodの設定 //ここをPOSTにしておくとpostできる(当たり前) request.httpMethod = "POST" //渡したい値をセットする //文字列だけど=の左の文字列がPHPの連想配列のキーになる。 //渡したい値が複数ある場合は&で繋げます。(web開発している人なら当たり前にわかる) let postParams = "post_message=swiftからのpost" request.httpBody = postParams.data(using: .utf8) let task = URLSession.shared.dataTask(with: request as URLRequest) { data, response, error in if error != nil { print("error is \(error!)") return } do { let myJSON = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary if let parseJSON = myJSON { var msg: String! msg = parseJSON["message"] as? String print(msg!) } } catch { print(error) } } task.resume() } } 今回はpostのAPIについての記事なのでswiftの説明はコメントのみとさせていただきます。 これでビルドしてみるとログに$response['message']で設定した文字列が表示されていると思います。 実際にちゃんと値が渡せているか確認するなら $response['error'] = false; $response['message'] = "post_message is ".$post_message ; で確認できると思います。 まとめ swiftを使う仕事をしたいと思いスキルを上げるために勉強を始めたphpですが割と楽しくなってきてswiftにこだわる気持ちが薄れてきました。 あと、全く関係ない話ですが最近スペースキーの反応が悪いので掃除したんですが直らなくてモヤモヤしてます。 今回は以上です。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

POSTリクエスト、isset・empty関数を用いた、フォームから受け取ったデータに返り値を表示

フォームで入力したデータを返り値を表示させるまでをまとめてみました。 同じ箇所で詰まっている人のヒントになれれば幸いです。 下の画像のように、入力フォームに名前と年齢を入力し送信ボタンを押すことで「年齢を入力してください」が「XXさんはXX歳です」と表示、または年齢が120歳以上なら「エラー」を表示される処理を実装していきます。 処理の全容 index.html <!DOCTYPE html> <html lang = “ja”> <head> <meta charset = “UTF-8”> <title>GET・POST練習</title> </head> <body> <h1>データの送信</h1> <form action="index.php" method="post"> <label>名前</label><input type="text" name="name"><br/> <label>年齢</label><input type="number" name="age"><br/> <input type="submit" value="送信"> </form> </body> </html> index.php if(empty($_POST["age"])){ if ($_POST["age"] == "") { echo "年齢を入力してください"; }; }elseif(isset($_POST["age"])){ if ($_POST["age"] < 120) { echo $_POST["name"] . "さんは" . $_POST["age"] . "歳です"; } else { echo "エラー"; } } index.html側のコード実装 <label>名前</label><input type="text" name="name"><br/> <label>年齢</label><input type="number" name="age"><br/> <input type="submit" value="送信"> labelタグで○○○とすることで入力フォームの左横にある「名前」「年齢」のフォームの項目を表示できます。 inputタグでとすることで入力フォーム(長方形部分)を作成できます。 inputタグ内のtype="○○○" とすることでフォームの各種の型を設定できる。ここでは、名前のフォームで直接手入力で行う"text"、年齢のフォームでは▲▼で数字を合わせる"number"としています。 nameで"name"、"age"としているのは、後のphp側のコード実装でPOSTメソッドを使う際に合わせて用います。 index.php側のコード実装 index.php if(empty($_POST["age"])){ if ($_POST["age"] == "") { echo "年齢を入力してください"; }; }elseif(isset($_POST["age"])){ if ($_POST["age"] < 120) { echo $_POST["name"] . "さんは" . $_POST["age"] . "歳です"; } else { echo "エラー"; } } 大枠のif文のelseifの前後の処理それぞれ分けて解説していきます。 if文のelseifの前の処理 index.php if(empty($_POST["age"])){ if ($_POST["age"] == "") { echo "年齢を入力してください"; }; この部分は、冒頭の画像にあった「年齢を入力してください」と表示させる際の処理です。 ここで用いるempty関数とは、引数に与えた変数や配列の中身が空であるか否かを確認する関数です。 この関数は、変数の値が0あるいは空、NULLである場合はTRUEを、それ以外である場合はFALSEを結果として返します。言い換えれば、存在しない場合や値がない場合にTRUEと返すものがempty関数です。 次にPOSTメソッドですが、これは入力した内容をサーバー(データベース等、ここの場合index.php)へ送るために用います。 具体的な処理として、メッセージボディ(入力フォーム)に入力した情報を記述してリクエストしサーバーへ送ります。このメッセージボディは、URLと異なり情報は残らないので比較的セキュリティの高く、ユーザー名やパスワードなど第3者に知られたくない情報はPOSTメソッドを用いて行います。 類似のものとしてGETメソッドというものがありますが、こちらはリクエストラインにクエリストリングとして、入力した情報を付与してサーバーへ送り、POSTメソッドよりも比較的セキュリティの低い情報を扱う際に用います。 これらを踏まえて処理を解説していくと、「年齢」のフォームに入力したものの引数「age」をPOSTメソッドでindex.php側へ送り込み、empty関数とif文を組み合わせて「もしageに存在しない場合・値がない場合はTRUE」という条件式を作ります。TRUEだった場合に何を返すかについては、インデントを下げたところにさらにif文で「もしageに値がない場合は『年齢を入力してください』を出力」という条件式を作ります。これにより、「年齢を入力してください」と表示させています。 if文のelseif以降の処理 次にelseif以降の処理の解説です。 index.php }elseif(isset($_POST["age"])){ if ($_POST["age"] < 120) { echo $_POST["name"] . "さんは" . $_POST["age"] . "歳です"; } else { echo "エラー"; } } 先ほどの「もしageに存在しない場合・値がない場合はTRUE」という条件式において、何かしら値がありempty関数がFalseと判断した場合、こちらの処理が実行されます。 ここで用いるisset関数とは、変数が宣言されている(値がある)こと・nullとは異なることを確認する関数です。 これらを踏まえて同様に処理を解説していくと、 isset関数を用いて「もしageに何かしら値がある場合・nullとは異なる場合はTRUE」とし、 TRUEだった場合の返すものとして一段下げたインデントにIf文を作り「もしageが120以下なら、引数nameを用いて『nameさんはage歳です』、そうでない場合は『エラー』と返す処理ができます。 こうして、入力フォームに名前と年齢を入力し送信ボタンを押すことで「年齢を入力してください」が「XXさんはXX歳です」と表示、または年齢が120歳以上なら「エラー」を表示される処理完成します。 以上になります。 説明不備・間違った解釈などありましたら、ご教授のほどお願いします。 参考 empty関数について:https://blog.codecamp.jp/programming-php-empty-howtouse POSTメソッドについて:https://qiita.com/7968/items/4bf4d6f28284146c288f#%E7%AC%AC3%E7%AB%A0-post%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6 isset関数について:https://www.php.net/manual/ja/function.isset.php
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PHP 関数呼び出し時に引数が指定されなかった場合のデフォルト値を設定する

目的 関数呼び出しされる時に引数を指定しなかった時のデフォルト値を設定する方法をメモ的にまとめる 説明 下記のようなPHPの関数があったとする。 public function foo($str_flag) { if (is_null($str_flag)) { echo "$str_flagにはnullが格納されています"; } else { echo "$str_flagにはnull以外が格納されています" } } 上記の関数を実行する際に$str_flagを引数として渡さないとエラーになってしまう。 下記のように記載することで関数を実行する際に引数として$str_flagを渡さなかった場合にデフォルト値を設定することが出来る(下記はデフォルト値をnullとしている) public function foo($str_flag = null) { if (is_null($str_flag)) { echo "$str_flagにはnullが格納されています"; } else { echo "$str_flagにはnull以外が格納されています" } } デフォルト値をtrueとしたいなら下記のように記載する。もちろんbool値以外もデフォルト値として設定することが可能である。 public function foo($str_flag = true)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravelのファイルについて

Laraelでアプリケーションを作成したときに一気にできるフォルダについて、何をどこに記載すればいいかわからなくなることがあるため、参考程度にフォルダやファイルの役割を記載しておきます。 動作環境 macOS Big Sur MacBook Air (M1, 2020) Laravelで新規プロジェクトを作成する terminalからコマンドを打つことでlaravelを使った新規プロジェクトを自動で作成することができます。 プロジェクトを作成したいディレクトリに移動し、以下のコマンドを打ちます。 新規プロジェクト作成 compsoer create-project laravel/laravel sampleapp --prefer-dist Laraelのフォルダ構成 作成したプロジェクトの直下のファイル群 ファイル名 ファイルの内容 [.editorconfig] テキストファイルを編集・保存する際にインデントや改行コードを設定したものに統一するための設定情報 [.env] [.env.example] 動作環境に関する設定情報 [.styleci.yml] PHPやJS、CSSのフォーマットをチェックし、自動で整形可能なサービスの設定情報 [.gitattributes] [.gitignore] git利用に関する情報 [artisan] artisanコマンド(php artisan serveで使ったもの) [composer.json] [composer.lock] composerの利用に関するもの [package.json] JavaScriptのパッケージ管理ツール(npm)で利用するもの [phpunit.xml] PHPUnit(ユニットテストプログラム)に関するもの [server.php] サーバー起動時に利用されるプログラム [webpack.mix.js] webpackというJavaScriptパッケージツールで使うもの 作成したプロジェクトの直下のフォルダ群 フォルダ名 フォルダの内容 app アプリケーションのプログラム部分がまとめられるところ。アプリケーションの開発時には、ここに必要なスクリプトファイルを追加していきます。 bootstrap アプリケーション実行時に最初に行われる処理がまとめられています。 config 設定関係のファイルがまとめられています。 database データベース関連のファイルがまとめられています。 public 公開フォルダです。JavaScriptやスタイルシートなど、外部にそのまま公開されるファイルはここにまとめられています。 resources リソース関係の配置場所です。プログラムが利用するリソースファイルが用意されます。プログラムのテンプレートファイルなどが用意されます。 routes ルート情報の保存場所です。アクセスするアドレスに割り当てられるプログラムの情報などがが記されています。 storage ファイルの保存場所です。アプリケーションのプログラムが保存するファイルなどが置かれます。ログファイルなどはここに保存されます。 tests ユニットテスト関係のファイルが用意されます。 vendor フレームワーク本体のプログラムがまとめられています。 appフォルダ直下のフォルダについて 主に作業することになるappフォルダについてはさらに詳しく記載しておきます。 フォルダ名 フォルダの内容 [Console] コンソールプログラムを配置するところです。 [Exceptions] 例外に関する処理を配置するところです。 [Http] これが、Webアプリケーションにアクセスしたときの処理をまとめておくところです。アプリケーションの基本的なプログラムはここに作成します。 [Providors] プロバイダと呼ばれるプログラムを配置します。 [Models] モデルと呼ばれるプログラムを配置します。 作成したプロジェクト直下のroutesフォルダについて apiを作るにあたって重要になるルーティングという機能についての設定情報はこちらにまとめます。 バックエンドの開発では頻繁に作業することになるので詳しく記載しておきます。 ファイル名 ファイルの内容 [api.php] APIのルーティングです。例えばユーザー認証などのように、プログラムないから利用するAPIの機能を特定のアドレスに割り当てるの利用されます。 [channels.php] ブロードキャストチャンネルのためのルーティングです。 [console.php] コンソールプログラムのためのルーティングです。 [web.php] これが、一般的なWebページとしてアクセスするためのルーティングです。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Goodby CSVライブラリのパース時のエラー

はじめに LaravelでCSVインポートし、DB登録する処理を実装するために、Goodby CSVライブラリを インストールし、いざ実装したところ、以下のようなエラーが出てしまった。 Column size should be 7, but 6 columns given エラー解決方法 CSVファイルの中身を確認したところ、列数が通常だと7列あるべきところ、6列となっている ところがあったため、エラーが返ってきたようだ。 githubにもしっかり書かれていました。英語読めるようになりたい、、、 解決方法① unstrict()を追加すると厳密な列数のチェックが行われないようになる。 $interpreter = new Interpreter(); $interpreter->unstrict(); //追加 解決方法② 例外を投げる。こちらの方法のほうがより現実的? use Goodby\CSV\Import\Standard\Exception\StrictViolationException ~省略~ try { $lexer->parse($tmpPath, $interpreter); } catch (StrictViolationException $e) { // 例外処理を書く } 参考 https://github.com/goodby/csv
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む