Portal:siro

ダイレクトマーケティングブログ

同村チェッカーについて技術的な話3

またまた続きから。
といってもここはSQLの挿入だけなのです。

<?php
	// SQLの挿入
	$db_conn = db_conn();
	if($db_conn !== false){
		// 村情報の登録
		// 一度登録した村は登録しない
		$exists_vil = mysql_query("SELECT * FROM douson_vil WHERE vil_server = '" . $server_name . "'
			AND vil_no = '" . $vil_no . "'");
		if(mysql_num_rows($exists_vil) > 0){
			// 既にデータのある村なのでスキップ
			echo $vil_no . "already exists<br>";
			return;
		}
		mysql_query("INSERT INTO douson_vil (vil_name,vil_url,vil_server,vil_no,vil_date) 
			VALUES ('" . mysql_real_escape_string($vil_name) . "','" . $vil_url . "','" . $server_name . "','" . $vil_no . "','" . $SS00000_time . "')");
		// idの保持
		$vil_id = mysql_insert_id();
		// PL情報の登録
		foreach($data as $userdata){
			mysql_query("INSERT INTO douson_user (user_id,vil_id,character_name) 
				VALUES ('" . $userdata['id'] . "','" . $vil_id . "','" . $userdata['character'] ."')");
		}
	}
?>
<?php
	$db_conn = db_conn();
?>

ただのmysql_connectのwrapper関数です。mysql接続が$db_connに格納されます。
※今から新規に作る場合はPDO使うか、mysqli_constractを使いましょう。

<?php
		// 一度登録した村は登録しない
		$exists_vil = mysql_query("SELECT * FROM douson_vil WHERE vil_server = '" . $server_name . "'
			AND vil_no = '" . $vil_no . "'");
		if(mysql_num_rows($exists_vil) > 0){
			// 既にデータのある村なのでスキップ
			echo $vil_no . "already exists<br>";
			return;
		}
?>

同一村の二重登録を防止するために、登録前に既にその州・村番号の組み合わせがないかを検索して調べます。
実はこのやり方は議事国の「廃村からの復活*1」機能に対応しないやり方なので、実装としてはポンコツです。が、現在廃村からの復活が使われることは稀のため、スルーしている感あります。


<?php
		mysql_query("INSERT INTO douson_vil (vil_name,vil_url,vil_server,vil_no,vil_date) 
			VALUES ('" . mysql_real_escape_string($vil_name) . "','" . $vil_url . "','" . $server_name . "','" . $vil_no . "','" . $SS00000_time . "')");
		// idの保持
		$vil_id = mysql_insert_id();
		// PL情報の登録
		foreach($data as $userdata){
			mysql_query("INSERT INTO douson_user (user_id,vil_id,character_name) 
				VALUES ('" . $userdata['id'] . "','" . $vil_id . "','" . $userdata['character'] ."')");
		}
?>

ここからようやく挿入処理。INSERT文を書いて、まずは村情報をdouson_vilテーブルに追加します。
で、ここでmysql_insert_id()関数を使い、追加した時のID(いわゆる主キー)を取得します。
そして、先程連想配列の中にぶちこんだ各ユーザのデータをforeach文で次々とINSERTしていくという形。


勝敗とか死因とか役職とかを入れようとするともうちょっと複雑になるのですが
(議事国だけでも「複数役職」「複数絆」「勝敗表示の有無」など色々州や村設定によって変わってくる)
同村の有無に特化するならとりあえずここまでで完了です。



あれ?長くねーぞ!誰だ昨日長くなるって言ったの!!!!!!

僕ですね。ははは。
では次はどうしようか……。
終了済の村一覧からエピローグURLを抽出する部分の解説でもしようかと思います。あでゅ☆

*1:廃村した村の設定等を引き継ぎ、同一村番号の村として新たにやり直す機能。この機能を使うと、旧い村(つまり廃村時)のデータは失われる