<?php
	print <<<html_end
<!DOCTYPE html>
<html lang=ja>
	<head>
		<meta charset=UTF-8>
		<title>MySQL DataBase Used PHP Scripts</title>
	</head>
	<body>

html_end;
	if($_POST['task']!='1' && $_POST['task']!='2' && $_POST['task']!='3'){
		print <<<html_end
		<script>
			var s=[];
			s[0]="";
			s[1]="処理　①：自分のデータベース（DBXX）に対するクエリの発行<br><br><form method=POST>自分の学籍番号の下二桁（半角数字）：<input type=text name=no size=4><br><br>フルアクセス権限を持つユーザ(sXX)のパスワード<input type=password  name=fpass size=16><br><br>下のテキストエリアに発行したいクエリを入力して下さい<br><textarea name=query rows=10 cols=160></textarea><br><br><input type=hidden name=task value=1><input type=submit value=Go><br><br>◇テーブルを新規作成する例<br>CREATE TABLE t1(code char(5) not null primary key,<br>name varchar(30),<br>post int<br>);<br><br>◇テーブルを削除する例<br>DROP TABLE t1;<br><br>◇指定したテーブルに指定したCSVデータをインポートする例<br>※このケースは、この「usedb.php」スクリプトと同一のディレクトリにあらかじめ「t1.csv」ファイルが置かれている前提の例です<br>LOAD DATA LOCAL INFILE './t1.csv' INTO TABLE t1 FIELDS TERMINATED BY ',' LINES TERMINATED BY '&#x5c;n';<br><br>◇データを抽出する例<br>SELECT * FROM t1;</form>";
			s[2]="処理　②：自分のデータベース（DBXX）と、DBXXのフルアクセス権限を持つユーザ(sXX)と、DBXXの読み取り権限だけを持つユーザ(rXX)を作成<br><br><form method=POST>usedb管理者パスワード：<input type=password name=admn size=4><br><br>自分の学籍番号の下二桁（半角数字）：<input type=text name=no size=4><br><br>フルアクセス権限を持つユーザのパスワード（８桁以上６４桁未満、半角英数字・ハイフン・アンダースコア）：<input type=text name=fpass size=16><br><br>読み取り権限だけを持つユーザのパスワード（８桁以上６４桁未満、半角英数字・ハイフン・アンダースコア）：<input type=text name=rpass size=16><input type=hidden name=task value=2><input type=submit value=Go></form>";
			s[3]="処理　③：自分のデータベース（DBXX）と、DBXXのフルアクセス権限を持つユーザ(sXX)と、DBXXの読み取り権限だけを持つユーザ(rXX)を削除<br><br><form method=POST>usedb管理者パスワード：<input type=password name=admn size=4><br><br>自分の学籍番号の下二桁（半角数字）：<input type=text name=no size=4><input type=hidden name=task value=3><input type=submit value=Go></form>";
			function seltask(){
				var tno = document.task.changetask.value;
				document.getElementById("t").innerHTML=s[tno];
			}
		</script>
		<form name=task>
			<p>
				処理を下記プルダウンメニューで選択して下さい<br><br>
				処理　①：自分のデータベース（DBXX）に対するクエリの発行<br>
				処理　②：自分のデータベース（DBXX）と、DBXXのフルアクセス権限を持つユーザ(sXX)と、DBXXの読み取り権限だけを持つユーザ(rXX)を作成<br>
				処理　③：自分のデータベース（DBXX）と、DBXXのフルアクセス権限を持つユーザ(sXX)と、DBXXの読み取り権限だけを持つユーザ(rXX)を削除<br>
			</p>
			<p>
				<select name=changetask onChange=seltask();>
					<option value=0>処理選択</option>
					<option value=1>処理　①</option>
					<option value=2>処理　②</option>
					<option value=3>処理　③</option>
				</select>			
			</p>
		</form>
		<p id=t></p>

html_end;

	}else{
		if($_POST['task']=='2' || $_POST['task']=='3'){
			if($_POST['admn']!='****************')die("userdbパスワードが不正です");
		}
		if($_POST['no']=='')die("学籍番号のの下二桁が入力されていません");					//学籍番号下二桁の入力チェック
		$url = "localhost";	//SQLサーバのアドレス
		$no= $_POST['no'];
		$db="DB".$no;		//データベース名の生成
		$fu="s".$no;		//フルアクセスユーザ名の生成
		$ru="r".$no;		//読み取りユーザ名の生成

		if(strlen($no)!=2)die("学籍番号の下二桁の桁数が不正です");						//学籍番号下二桁の桁数チェック
		if(!preg_match("/^[0-9]+$/",$no))die("学籍番号の下二桁が数字ではありません");				//学籍番号下二桁の数字チェック
		if($no<0 || $no>28 || $no==8 || $no==11 || $no==12 || $no==19)die("学籍番号の下二桁が不正です");	//学籍番号下二桁の数字が適切な数字かどうかのチェック
		if($_POST['task']=='1'){
			$user = $fu;											//学生フルアクセス用MySQLログインユーザ名
			$pass = $_POST['fpass'];									//学生フルアクセス用MySQLログインパスワード
			$link = mysql_connect($url,$user,$pass,true,128) or die("MySQLへの接続に失敗しました");	//MySQLへの接続
			$sdb = mysql_select_db($db,$link) or die("データベースの選択に失敗しました");			//データベースの選択
			mysql_query("set names utf8") or die("言語セットの指定に失敗しました");			//言語セットの指定
			$sql = $_POST['query'];									//クエリの生成
			$result = mysql_query($sql,$link) or die("クエリの送信に失敗しました<br />SQL:".$sql);	//クエリの送信

			if($result==1){
				print "クエリ「".$sql."」は正常に実行されました<br><br>\n";
			}else{
				$flds=mysql_num_fields($result);
				print "クエリ「".$sql."」の実行結果は下記の通りです<br><br>\n";
				$tempHtml="<table border=1>";
				while($row = mysql_fetch_array($result)) {
					$tempHtml.="<tr><td>".$row[0];
					for($i=1;$i<$flds;$i++){
						$tempHtml.="</td><td>".$row[$i];
					}
					$tempHtml .= "</td></tr>\n";
				}
				$tempHtml.="</table><br><br>";
				print $tempHtml;
			}
			mysql_free_result($result);									//結果保持用メモリの開放
			mysql_close($link) or die("MySQLの切断に失敗しました");					//MySQLの切断
		}else if($_POST['task']=='2'){
			$user = "dbowner";										//userdb管理者用MySQLログインユーザ名
			$pass = "yg5963";										//userdb管理者用MySQLログインパスワード
			if($_POST['fpass']=='')die("フルアクセスユーザ用パスワードが入力されていません");		//パスワード文字列の入力チェック
			$fp=$_POST['fpass'];
			if(!preg_match("/^[a-zA-Z0-9_-]+$/",$fp))die("フルアクセスユーザパスワードが不正です");	//半角英数字・ハイフン・アンダースコアだけで構成されているかチェック
			if(strlen($fp)<8 && strlen($fp)>64)die("フルアクセスユーザ用パスワードの桁数が不正です");	//パスワードの桁数をチェック
			if($_POST['rpass']=='')die("読み取り権限ユーザ用パスワードが入力されていません");		//パスワード文字列の入力チェック
			$rp=$_POST['rpass'];
			if(!preg_match("/^[a-zA-Z0-9_-]+$/",$rp))die("読み取り権限ユーザパスワードが不正です");	//半角英数字・ハイフン・アンダースコアだけで構成されているかチェック
			if(strlen($rp)<8 && strlen($fp)>64)die("読み取り権限ユーザ用パスワードの桁数が不正です");	//パスワードの桁数をチェック
			
			$link = mysql_connect($url,$user,$pass) or die("MySQLへの接続に失敗しました");		//MySQLへの接続
			$sql = "CREATE DATABASE $db;";									//データベース作成クエリの生成
			$result = mysql_query($sql,$link) or die("データベース作成に失敗しました<br />SQL:".$sql);	//データベース作成クエリの送信
			$sql = "GRANT ALL PRIVILEGES ON $db.* TO $fu@localhost IDENTIFIED BY '$fp'";			//フルアクセス権限を持つユーザ作成クエリの生成
			$result = mysql_query($sql,$link) or die("ユーザ作成に失敗しました<br />SQL:".$sql);		//フルアクセスユーザ作成クエリの送信
			$sql = "GRANT SELECT ON $db.* TO $ru@localhost IDENTIFIED BY '$rp'";				//読み取り権限だけを持つユーザ作成クエリの生成
			$result = mysql_query($sql,$link) or die("ユーザ作成に失敗しました<br />SQL:".$sql);		//読み取りユーザ作成クエリの送信
			mysql_free_result($result);									//結果保持用メモリの開放
			mysql_close($link) or die("MySQLの切断に失敗しました");					//MySQLの切断
		}else if($_POST['task']=='3'){
			$user = "dbowner";										//userdb管理者用MySQLログインユーザ名
			$pass = "yg5963";										//userdb管理者用MySQLログインパスワード
			$link = mysql_connect($url,$user,$pass) or die("MySQLへの接続に失敗しました");		//MySQLへの接続
			$sql = "DROP DATABASE $db;";									//データベース削除クエリの生成
			$result = mysql_query($sql,$link) or die("データベース削除に失敗しました<br />SQL:".$sql);	//データベース削除クエリの送信
			$sql = "REVOKE ALL PRIVILEGES ON $db.* FROM $fu@localhost";					//フルアクセス権限を持つユーザ権限削除クエリの生成
			$result = mysql_query($sql,$link) or die("Fユーザ権限削除に失敗しました<br />SQL:".$sql);	//フルアクセスユーザ権限削除クエリの送信
			$sql = "DROP USER $fu@localhost";								//フルアクセス権限を持つユーザ削除クエリの生成
			$result = mysql_query($sql,$link) or die("Fユーザ削除に失敗しました<br />SQL:".$sql);		//フルアクセスユーザ削除クエリの送信
			$sql = "REVOKE SELECT ON $db.* FROM $ru@localhost";						//読み取り権限だけを持つユーザ権限削除クエリの生成
			$result = mysql_query($sql,$link) or die("Rユーザ権限削除に失敗しました<br />SQL:".$sql);	//読み取りユーザ権限削除クエリの送信
			$sql = "DROP USER $ru@localhost";								//読み取り権限だけを持つユーザ削除クエリの生成
			$result = mysql_query($sql,$link) or die("Rユーザ削除に失敗しました<br />SQL:".$sql);		//読み取りユーザ削除クエリの送信
			mysql_free_result($result);									//結果保持用メモリの開放
			mysql_close($link) or die("MySQLの切断に失敗しました");					//MySQLの切断
		}
		print "<a href=usedb.php>戻る</a>";
	}
		print <<<html_end
	</body>
</html>
html_end;
?>
