# PHP05 ## 授業資料 [ダウンロードリンク](https://drive.google.com/drive/folders/12SYBsZr_y_gFPQ7HbOdOpggLSyzQ_NXs?usp=sharing) ## 1章:環境準備(DBの準備) ### まずはphpMyAdminを開いて授業用のDBを作成する #### 1. MAMPを起動 #### 2. WebStartボタンから起動トップページを表示 #### 3. ページの真ん中MySQLのタブからphpMyAdminのリンクをクリック #### 4. 起動した画面がMySQLを管理するphpMyAdminの画面が表示されます。 #### 5. データベースタブをクリック #### 6. データベースを作成から以下の名前で作成 ``` データベース名:gs_db5 照合順序:utf8_unicode_ci ``` #### 7. 作成ボタンをクリック 左側にgs_db5というデータベースができていると思います。 現在は空っぽです。 ### SQLファイルからインポートしてみよう 〇〇.sqlというSQLファイルをインポートしてデータを作成します。 #### 1. gs_db4を選択した状態でインポートタブをクリック #### 2. ファイルを選択をクリックして配布した資料内のSQLフォルダ内のgs_db5.sqlを選択 #### 3. 実行する #### 4. 今日の授業用DB完成 ## 2章:Ajax(非同期通信) AjaxとはJavascriptによってブラウザ上での動作を主に必要なデータのみをサーバー側とやりとりを行い通信量の負担を減らす。 よく見る機能:インクリメンタルサーチ(インスタグラムのユーザー検索) ### ajax.htmlからjQueryを使ってデータを送る処理を見てみる #### 1.ajax.htmlの処理を追記 ``` $.ajax({ type: 'POST', //GET,POST url: 'ajax.php', //通信先URL data: { //Dataプロパティはデータを送信(渡す)役目 id: 1, name: '名前', age: '27', sleep: 2 //Timeoutテスト用 }, dataType: 'json', //text, html, xml, json, jsonp, script timeout: 5000,//データの返答を待つ時間(ミリ秒) success: function(data) { $("#ajax_status").text("通信完了!"); console.log(data); }, error: function(error) { console.log(error); //戻り値Allオブジェクト }, complete: function() { //成功&エラー処理後に必ず実行したい処理を記述する $("body").append("完了"); //戻り値Allオブジェクト } }); ``` #### 2.ajax.phpにてデータを受け取る ``` //POSTパラメータを取得 $id = $_POST["id"]; $name = $_POST["name"]; $age = $_POST["age"]; $sleep = $_POST["sleep"]; sleep($sleep); //Timeoutテスト用 echo "<div>$id</div><div>$name</div><div>$age</div>"; ``` #### 3.ajax.htmlの検証ツールでconsoleを確認するとHTMLが受け取れているはずです。 #### 4.ajax.phpのHTMLのechoをコメントアウトしてjson変数のコメントアウト解除 ``` $json = '[ { "id":"'.$id.'", "mode":"'.$mode.'", "type":"'.$type.'" }, { "id":"'.$id.'", "mode":"'.$mode.'", "type":"'.$type.'" } ]'; echo $json; ``` ### ajax_inputでajaxを使ったデータ登録を実装 #### 1.index.phpのajax処理の部分を設定しdataの部分をformのデータをjsで取得 ``` type: "post", url: "insert.php", data: { name: $("#name").val(), email: $("#email").val(), naiyou: $("#naiyou").val() }, ``` #### 2.insert.phpでデータを取得 ``` //1. POSTデータ取得 $name = $_POST["name"]; $email = $_POST["email"]; $naiyou = $_POST["naiyou"]; ``` #### 3.登録の処理は通常と同じです ## 3章:fileUpload(ファイルアップロード) #### 1.fileupload.htmlのformを作成する ``` <form method="POST" action="fileupload.php" enctype="multipart/form-data"> <input type="file" name="upfile"> <input type="submit" class="btn btn-success btn-sm" value="Fileアップロード"> </form> ``` #### 2.fileupload.phpで受け取ったファイルを保存する ``` if (isset($_FILES["upfile"] ) && $_FILES["upfile"]["error"] ==0 ) { //ファイル名を取得 $file_name = $_FILES["upfile"]["name"]; //一時保存パス作成 $tmp_path = $_FILES["upfile"]["tmp_name"]; //拡張子取得 $extension = pathinfo($file_name, PATHINFO_EXTENSION); //ユニークなファイル名を生成 $file_name = date("YmdHis").md5(session_id()) . "." . $extension; // FileUpload [--Start--] $img="";//空の変数 $file_dir_path = "upload/".$file_name;//uploadフォルダにファイルを移動 if ( is_uploaded_file( $tmp_path ) ) { if ( move_uploaded_file( $tmp_path, $file_dir_path ) ) { chmod( $file_dir_path, 0644 ); $img = '<img src="'.$file_dir_path.'">'; } else { // echo "Error:アップロードできませんでした。"; } } }else{ $img = "画像が送信されていません"; } //[FileUploadCheck--END--] ``` #### 3.fileupload.phpにDBへファイル名の保存処理を追記 ``` chmod( $file_dir_path, 0644 );//ファイルの権限を設定 require_once("funcs.php"); //2. DB接続します $pdo = db_conn(); $sql = "INSERT INTO gs_img_table(id,img)VALUES(null,:img)"; $stmt = $pdo->prepare($sql); $stmt->bindValue(':img', $file_name, PDO::PARAM_STR); //Integer(数値の場合 PDO::PARAM_INT) $status = $stmt->execute(); //4.データ登録処理後 if ($status == false) { sql_error($stmt); } else { $img = '<img src="'.$file_dir_path.'">'; } ``` #### 4. file_view.phpに画像取得処理を記述 ``` // 1. DB接続 require_once('funcs.php'); $pdo = db_conn(); //2.データ登録SQL作成 $stmt = $pdo->prepare("SELECT * FROM gs_img_table"); $status = $stmt->execute(); //3.データ表示 $view=""; if($status==false) { sql_error(); }else{ while( $r = $stmt->fetch(PDO::FETCH_ASSOC)){ $view .= '<p><img src="upload/'.$r["img"].'"></p>'; } } ``` #### 4. file_view.phpのphotoareaに表示 ``` <div id="photarea"> <!-- ここにPHPの変数を記述 --> <?=$view?> </div> ```