登録画面を追加する

WordPress

前回までのソースコードを元に、新規登録画面の一連の動きを書きます。

	/**
	 * 登録
	 */
	function regist($error_message_flg = null)
	{
		if ($error_message_flg == false) {
			$sample_name = esc_attr($_REQUEST["sample_name"]);
		}

		if (isset($_REQUEST["form_id"])) {
			//確認画面の「戻る」ボタンから遷移してきた場合
			$form_id = esc_attr($_REQUEST["form_id"]);

			$sample_name = esc_attr($_REQUEST["sample_name"]);
			$sample_text = esc_attr($_REQUEST["sample_text"]);
			$sample_check = $_REQUEST["sample_check"];
			$sample_radio = esc_attr($_REQUEST["sample_radio"]);
			$sample_select = esc_attr($_REQUEST["sample_select"]);
			$sample_textarea = esc_attr($_REQUEST["sample_textarea"]);

			//チェックボックスの判定
			foreach ($sample_check as $key => $value) {
				$sample_check_checked[$value] = "checked";
			}
			
			//ラジオボタンの判定
			for ($i=0; $i<3; $i++) {
				if ($sample_radio == $i) {
					$sample_radio_checked[$i] = "checked";
				}
			}
			
			//セレクトボックスの判定
			$sample_select_array = array("a", "b", "c", "d", "e");
			foreach ($sample_select_array as $key => $value) {
				if ($sample_select == $value) {
					$sample_select_selected[$key] = "selected";
				}
			}

			$create_date = esc_attr($_REQUEST["create_date"]);
		} else {
			
			//一覧画面から「編集」ボタンを押下した場合
			
			//押されたボタンのIDを取得する
			if (array_search("編集", $_REQUEST["submit"]["edit"])) {
				$form_id = array_search("編集", $_REQUEST["submit"]["edit"]);
			}

			global $wpdb;
			$tbl_name = $wpdb->prefix . 'sample_mst';
			$sql = "SELECT * FROM {$tbl_name} WHERE id = %d;";
			$prepared = $wpdb->prepare($sql, $form_id);
			$rows = $wpdb->get_results($prepared, ARRAY_A);

			$sample_name = $rows[0]["sample_name"];
			$sample_text  = $rows[0]["sample_text"];
			$sample_check  = $rows[0]["sample_check"];
			$sample_radio  = $rows[0]["sample_radio"];
			$sample_select  = $rows[0]["sample_select"];
			$sample_textarea = $rows[0]["sample_textarea"];

			$sample_check = explode(",", $sample_check);

			//チェックボックスの判定
			foreach ($sample_check as $key => $value) {
				$sample_check_checked[$value] = "checked";
			}
			
			//ラジオボタンの判定
			for ($i=0; $i<3; $i++) {
				if ($sample_radio == $i) {
					$sample_radio_checked[$i] = "checked";
				}
			}
			
			//セレクトボックスの判定
			$sample_select_array = array("a", "b", "c", "d", "e");
			foreach ($sample_select_array as $key => $value) {
				if ($sample_select == $value) {
					$sample_select_selected[$key] = "selected";
				}
			}

			$create_date = $rows[0]["create_date"];

		}

		echo <<< EOL
<form action="" method="post">
<h2>データ登録</h2>
EOL;

		if (strlen($error_message_flg)) {
			echo "<div class='updated fade'><p><strong>";
			echo _e('NAMEを入力してください');
			echo "</strong></p></div>";
		}

		echo <<< EOL

<div class="wrap">

<form action="" method="post">
	<h2>データ編集</h2>

	<div class="wrap">

	<table class="wp-list-table widefat striped posts">
		<tr>
			<td>ID</td>
			<td>{$form_id}</td>
		</tr>
		<tr>
			<td>NAME</td>
			<td>
				<input type="text" name="sample_name" value="{$sample_name}">
			</td>
		</tr>

		<tr>
			<td>テキスト</td>
			<td>
				<input type="text" name="sample_text" value="{$sample_text}">
			</td>
		</tr>
		<tr>
			<td>チェックボックス</td>
			<td>
				チェック値1<input type="checkbox" name="sample_check[]" value="0" {$sample_check_checked[0]}>
				チェック値2<input type="checkbox" name="sample_check[]" value="1" {$sample_check_checked[1]}>
				チェック値3<input type="checkbox" name="sample_check[]" value="2" {$sample_check_checked[2]}>
			</td>
		</tr>
		<tr>
			<td>ラジオボタン</td>
			<td>
				ラジオ値1<input type="radio" name="sample_radio" value="0" {$sample_radio_checked[0]}>
				ラジオ値2<input type="radio" name="sample_radio" value="1" {$sample_radio_checked[1]}>
				ラジオ値3<input type="radio" name="sample_radio" value="2" {$sample_radio_checked[2]}>
			</td>
		</tr>
		<tr>
			<td>セレクトボックス</td>
			<td>
				<select name="sample_select">
					<option value="a" {$sample_select_selected[0]}>選択a</option>
					<option value="b" {$sample_select_selected[1]}>選択b</option>
					<option value="c" {$sample_select_selected[2]}>選択c</option>
					<option value="d" {$sample_select_selected[3]}>選択d</option>
					<option value="e" {$sample_select_selected[4]}>選択e</option>
				</select>
			</td>
		</tr>
		<tr>
			<td>テキストエリア</td>
			<td>
				<textarea name="sample_textarea" cols="30" rows="5">{$sample_textarea}</textarea>
			</td>
		</tr>

		<tr>
			<td>登録日時</td>
			<td>{$create_date}</td>
		</tr>
	</table>

	<input type='submit' name='submit[regist_check]' class='button-primary' value='登録内容を確認する' />
	<input type='submit' name='submit[]' class='button-primary' value='戻る' />

	<input type="hidden" name="form_id" value="{$form_id}">
	<input type="hidden" name="create_date" value="{$create_date}">

	</div>

</form>

EOL;
	}

	/**
	 * 登録確認
	 */
	function regist_check()
	{
		if (!strlen($_REQUEST["sample_name"])) {
			self::regist(false);
			return;
		}
		
		$sample_name = esc_attr($_REQUEST["sample_name"]);

		$sample_name = esc_attr($_REQUEST["sample_name"]);
		$sample_text = esc_attr($_REQUEST["sample_text"]);
		$sample_check = $_REQUEST["sample_check"];
		$sample_radio = esc_attr($_REQUEST["sample_radio"]);
		$sample_select = esc_attr($_REQUEST["sample_select"]);
		$sample_textarea = esc_attr($_REQUEST["sample_textarea"]);

		//チェックボックスの値を処理
		if (is_array($_REQUEST["sample_check"])) {
			foreach ($_REQUEST["sample_check"] as $key => $value) {
				$disp_checkbox .= "チェック値" . $value . "<br />";
				$hidden_checkbox .= '<input type="hidden" name="sample_check[]" value="' . $value . '">';
			}
		}

		//テキストエリア整形(表示用)
		$sample_textarea_disp = nl2br($sample_textarea);

		//データ一覧
		echo <<< EOL
<form action="" method="post">
	<h2>データ編集確認</h2>

	<div class="wrap">

	    <table class="wp-list-table widefat striped posts">
			<tr> 
				<td>ID</td>
				<td>{$form_id}</td>
			</tr>
			<tr> 
				<td>NAME</td>
				<td>{$sample_name}</td>
			</tr>
			<tr> 
				<td>テキスト</td>
				<td>{$sample_text}</td>
			</tr>
			<tr> 
				<td>チェックボックス</td>
				<td>
					{$disp_checkbox}
				</td>
			</tr>
			<tr> 
				<td>ラジオボタン</td>
				<td>{$sample_radio}</td>
			</tr>
			<tr> 
				<td>セレクトボックス</td>
				<td>{$sample_select}</td>
			</tr>
			<tr> 
				<td>テキストエリア</td>
				<td>{$sample_textarea_disp}</td>
			</tr>
		</table>

	<input type="hidden" name="form_id" value="{$form_id}">

	<input type="hidden" name="sample_name" value="{$sample_name}">
	<input type="hidden" name="sample_text" value="{$sample_text}">
	{$hidden_checkbox}
	<input type="hidden" name="sample_radio" value="{$sample_radio}">
	<input type="hidden" name="sample_select" value="{$sample_select}">
	<input type="hidden" name="sample_textarea" value="{$sample_textarea}">

	<input type="hidden" name="create_date" value="{$create_date}">

	</div>

	<input type='submit' name='submit[regist_exec]' class='button-primary' value='登録する' />
	<input type='submit' name='submit[regist]' class='button-primary' value='戻る' />

</form>
EOL;

	}

	/**
	 * 登録実行
	 */
	function regist_exec()
	{
		global $wpdb;

		$sample_name = esc_attr($_REQUEST["sample_name"]);
		$sample_text = esc_attr($_REQUEST["sample_text"]);
		$sample_radio = esc_attr($_REQUEST["sample_radio"]);
		$sample_select = esc_attr($_REQUEST["sample_select"]);
		$sample_textarea = esc_attr($_REQUEST["sample_textarea"]);

		//チェックボックスの値を処理
		if (is_array($_REQUEST["sample_check"])) {
			foreach ($_REQUEST["sample_check"] as $key => $value) {
				$sample_check .= $value . ",";
			}
		}

		//投稿を登録
		$table_name = $wpdb->prefix . 'sample_mst';
		$result = $wpdb->insert(
			$table_name,
			array(
				'sample_name' => $sample_name,
				'sample_text' => $sample_text,
				'sample_check' => $sample_check,
				'sample_radio' => $sample_radio,
				'sample_select' => $sample_select,
				'sample_textarea' => $sample_textarea,
				'create_date' => current_time('mysql')
			)
		);

		//データ一覧
		echo <<< EOL
<form action="" method="post">
<h2>データ登録</h2>
<div class='updated fade'><p><strong>
EOL;

		echo _e('登録が完了しました');

		echo <<<EOL
</strong></p></div>
<input type='submit' name='submit[]' class='button-primary' value='戻る' />
EOL;
		echo "</form>";
	}

更新系ですので、修正の処理を同じような流れになります。
登録フォームがあり、確認画面があり、完了メッセージ画面があります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です