ここまで習ってきたニュース(お知らせ)にファイルアップロードを追加しました。
また、SQLを利用して、2つのテーブルにデータ登録しています。
機能概要
プログラミングコード
「newsAdd_v2.php」お知らせ新規登録ページファイル
データベースにニュース情報を登録(投稿)します。また、ファイルアップロード用のテーブルにもレコードを登録します。
- 4行目:「config.php」を読み込み、その中の変数情報を使用することができるようになります。
- 9行目:変数「$newid」の初期化。新しく発番された番号を取得するための変数です。
- 48行目:「lastInsertId()」は、最後に登録した主キーの連番を取得します。
- 53行目:「isset($newid)」で、連番が取得できた場合のみ動作します。
- 55~59行目:保存先のフォルダを作成します。
- 61行目:保存先フォルダと保存ファイル名を変数「$save」に保存します。
- 64行目:ファイルを保存します。
- 65~90行目:テーブル「news_fileuploads_tbl」に保存先情報を登録します。
- 92行目:「newslist_v2.php」に自動的に遷移します
- 107行目:「formタグ」のプロパティを設定します。
- action:ファイル名やURL
- method:POSTを入力(※その他、GETも利用可)
- enctype:multipart/form-data
<?php
//データベース接続情報を格納
include("config.php");
if($_SERVER['REQUEST_METHOD'] === 'POST'){
//新しい番号を保存するための変数
$newid = "";
//POSTデータの取得
$txt_title_kj = $_POST['txt_title_kj'];
$txt_article_kj = $_POST['txt_article_kj'];
$err = "";
if($txt_title_kj == ""){
$err .= "【件名】";
}
if($txt_article_kj == ""){
$err .= "【内容】";
}
if($err == ""){
$sql = "insert into news_tbl("
."title_kj"
.",article_kj"
.",delete_ku"
.",insert_at"
.",update_at"
.") values ("
.":title_kj"
.",:article_kj"
.",'0'"
.",now()"
.",now()"
.");";
$dbh = new PDO($dsn, $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try{
$stmt = $dbh->prepare($sql);
$stmt->bindValue(':title_kj', $txt_title_kj, PDO::PARAM_STR);
$stmt->bindValue(':article_kj', $txt_article_kj, PDO::PARAM_STR);
$stmt->execute();
//$dbh->lastInsertId()は、最後に登録した番号を取得
$newid = $dbh->lastInsertId();
} catch(Exception $e){
echo "データの書き込みに失敗しました。". $e->getMessage();
}
if(isset($newid)){
//フォルダ名を日付+ランダム文字列(4桁)で生成する//
if(isset($_FILES['up_file'])){
//ASCIIコードによる文字変換は65がA、90がZとなります。
$folder = date(ymd).chr(mt_rand(65,90)).chr(mt_rand(65,90)).chr(mt_rand(65,90)).chr(mt_rand(65,90));
mkdir('uploads/'.$folder);
}
$save = 'uploads/'.$folder.'/'.basename($_FILES['up_file']['name']);
//move_uploaded_fileで、一時ファイルを保存先ディレクトリに移動させる
if(move_uploaded_file($_FILES['up_file']['tmp_name'], $save)){
$sql = "insert into news_fileuploads_tbl("
."news_no"
.",folder_name"
.",file_name"
.",delete_ku"
.",insert_at"
.",update_at"
.") values ("
.":news_no"
.",:folder_name"
.",:file_name"
.",'0'"
.",now()"
.",now()"
.");";
$dbh = new PDO($dsn, $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try{
$stmt = $dbh->prepare($sql);
$stmt->bindValue(':news_no', $newid, PDO::PARAM_INT);
$stmt->bindValue(':folder_name', $folder, PDO::PARAM_STR);
$stmt->bindValue(':file_name', basename($_FILES['up_file']['name'], PDO::PARAM_STR));
$stmt->execute();
} catch(Exception $e){
echo "データの書き込みに失敗しました。". $e->getMessage();
}
header("Location:newslist_v2.php");
}else{
echo 'アップロード失敗!';
}
}
}else{
echo $err."を修正してください。";
}
}
?>
<html>
<body>
<h1>ニュース登録</h1>
<form action="newsAdd_v2.php" method="POST" enctype="multipart/form-data">
件名<br>
<input type="text" name="txt_title_kj" /><br>
内容<br>
<textarea name="txt_article_kj" style="width:300px;height:150px;"></textarea><br>
画像<br>
<input type="file" name="up_file"><br><br>
<input type="submit" value="投稿">
</form>
</body>
</html>
演習問題
- 上記のコードを使用して、ファイル作成し、動作するようにしてみよう。
- データベースやテーブルを変更し、違う情報を利用して、動作するようにしてみよう。