初投稿です。
#はじめに
大学生が求めがちな楽単。サークルや部活に所属しているとその情報は手に入れやすいですが、そういったところに所属していない人にはあまりその情報は回ってこないものです。さらに今年の新入生には例のあのウイルスの影響で授業の情報が入ってきません。この状況では学生によって不利が生まれると思ったので授業のクチコミサイトを作りました。
実際はプログラミング初心者が最初に作りがちな典型的な掲示板です。しかし、思いの外需要があり、 いや、本当は需要あるとわかってた。 2万アクセスを得ました。
これを観ている方の中で大学生の方がおりましたらコピペして作ってみてはいかがでしょうか。
#リンク
https://ishiike.matrix.jp
#開発環境
macOS Catalina (10.15.4)
Visual Studio Code (1.35.1)
PHP (7.3.16)
#各曜日のPHPのコード
index.htmlは割愛
<?php
//書き込まれたテキストの関数と何も書き込まれなかった場合のエラーメッセージの関数を最初に定義
$error_message1 = "";
$error_message2 = "";
$error_message3 = "";
$error_message4 = "";
$posted_message ="";
$class_name = ( isset( $_POST["class_name"] ) === true ) ?$_POST["class_name"]: "";
$timetable = ( isset( $_POST["timetable"] ) == true ) ?$_POST["timetable"]: "";
$teacher_name = ( isset( $_POST["teacher_name"] ) == true ) ?$_POST["teacher_name"]: "";
$comment = ( isset( $_POST["comment"] ) === true ) ? trim($_POST["comment"]) : "";
//改行を削除
//テキストデータを1行ずつ取得して表示するため改行不可(改善したい)
$comment = str_replace(array("\r\n", "\r", "\n"), '', $comment);
//すべての項目に書き込まれたか判定
//足りている場合テキストファイルに保存
//足りない場合エラーメッセージを代入
if ( isset($_POST["send"] ) === true ) {
if ( $class_name === "" ) $error_message1 = "授業の名前を入力してください";
if ( $timetable === "" ) $error_message2 = "何時間目か入力してください";
if ( $teacher_name === "" ) $error_message3 = "先生の名前を入力してください";
if ( $comment === "" ) $error_message4 = "コメントを入力してください";
if( $error_message1 === "" && $error_message2 === "" && $error_message3 === "" && $error_message4 === "" ){
$fp = fopen( "[曜日名].txt" ,"a" );
fwrite( $fp , $class_name."\t".$timetable."\t".$teacher_name."\t".$comment."\n");
$posted_message = "書き込みに成功しました。";
}
}
//テキストファイルの読み込み
$fp = fopen("[曜日名].txt","r");
//テキストデータを1行ずつ取得し空白で分けて配列に
$dataArr = array();
while( $res = fgets( $fp)){
$tmp = explode("\t",$res);
$arr = array(
"class_name"=>$tmp[0],
"timetable"=>$tmp[1],
"teacher_name"=>$tmp[2],
"comment"=>$tmp[3]
);
$dataArr[]= $arr;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>石池|Ishiike [曜日名]</title>
<link rel="icon" href="ishiike_logo.png" type="image/png">
</head>
<body>
<header>
<h1><a href="https://ishiike.matrix.jp"><img src="ishiike_logo.png" width="210px" height="100px"></a>【曜日名】</h1>
</header>
<?php echo $posted_message; ?>
<form method="post" action="">
授業名:<input type="text" name="class_name" value="<?php echo $class_name; ?>" style="font-size:1em;">
<?php echo $error_message1; ?><br>
時間:<input type="text" name="timetable" value="<?php echo $timetable; ?>" style="font-size:1em;">
<?php echo $error_message2; ?><br>
先生の名前:<input type="text" name="teacher_name" value="<?php echo $teacher_name; ?>" style="font-size:1em;">
<?php echo $error_message3; ?><br>
コメント:<textarea name="comment" rows="4" cols="80" style="font-size:1em;"><?php echo $comment; ?></textarea>
<?php echo $error_message4; ?><br>
<br>
<input type="submit" name="send" value="投稿" rows="2" cols="4" style="font-size:2em;">
</form>
<dl>
<!-- 配列をそれぞれ表示 -->
<?php foreach( $dataArr as $data ):?>
<p><span style="font-size:20px;">★<?php echo htmlspecialchars($data["class_name"]); ?> : <?php echo htmlspecialchars($data["timetable"]); ?> : <?php echo htmlspecialchars($data["teacher_name"]); ?><br>
<?php echo htmlspecialchars($data["comment"]); ?></span></p>
<?php endforeach;?>
</dl>
<br>
<a href="https://ishiike.matrix.jp/">ホーム</a>
</body>
</html>
※サークルのページは[サークル名]と[コメント]の2項目
#最後に
開設当初は授業だけでしたがサークルのページを追加したらもっとアクセスが増えました。
実はこれを作ろうとしたときPHPにはそれまで触れたことはなく学びながら探り探りで作ったものです。
セキュリティ的にもたくさんの不安を抱えてるものとなっていると思います。
そういった点はご指摘いただけると幸いです。
##追記
github
https://github.com/basyakue/Ishiike