<?php
/**
* Template Name: ESP32データ表示
*/
get_header(); ?>
<divclass=”content”>
<h1>ESP32のデータ</h1>
<?php
// ユーザーがログインしているか確認
if (is_user_logged_in()) {
echo ‘<p>以下は、ESP32から送信されたデータを入力できます。</p>’;
global $wpdb;
$table_name = $wpdb->prefix . ‘aqua_fan_esp32_things’;
// 現在のユーザー情報を取得
$current_user = wp_get_current_user();
$user_login = $current_user->user_login;
// 管理者かどうかを確認
if (user_can($current_user, ‘administrator’)) {
// 管理者の場合は全データを取得
$results = $wpdb->get_results(“SELECT * FROM $table_name”);
} else {
// 一般ユーザーの場合は自分のデータのみを取得
$results = $wpdb->get_results($wpdb->prepare(“SELECT * FROM $table_name WHERE user_login = %s”, $user_login));
}
// データが見つかった場合
if (!empty($results)) {
// SELECTボックスの作成
echo ‘<label for=”esp32_select”>ESP32名を選択:</label>’;
echo ‘<select id=”esp32_select” name=”esp32_select” onchange=”updateFields(this.value)”>’;
echo ‘<option value=””>選択してください</option>’; // 初期選択肢
foreach ($results as $row) {
echo ‘<option value=”‘ . esc_attr($row->id) . ‘”>’ . esc_html($row->esp32_name) . ‘</option>’;
}
echo ‘</select>’;
// 入力フィールドの作成
echo ‘<h2>設定を入力</h2>’;
echo ‘<form id=”esp32_form” method=”post” action=””>’; // フォームを作成
echo ‘<label for=”esp32_name”>Esp32 Name:</label>’;
echo ‘<input type=”text” id=”esp32_name” name=”esp32_name”><br>’;
echo ‘<label for=”time_division”>Time Division:</label>’;
echo ‘<input type=”text” id=”time_division” name=”time_division”><br>’;
echo ‘<label for=”auto_manual_mode”>Auto/Manual Mode:</label>’;
echo ‘<input type=”text” id=”auto_manual_mode” name=”auto_manual_mode”><br>’;
echo ‘<label for=”power_on_off_devision”>Power On/Off Division:</label>’;
echo ‘<input type=”text” id=”power_on_off_devision” name=”power_on_off_devision”><br>’;
echo ‘<label for=”auto_temperature_setting”>Auto Temperature Setting:</label>’;
echo ‘<input type=”text” id=”auto_temperature_setting” name=”auto_temperature_setting”><br>’;
echo ‘<label for=”manual_temperature_percent”>Manual Temperature Percent:</label>’;
echo ‘<input type=”text” id=”manual_temperature_percent” name=”manual_temperature_percent”><br>’;
echo ‘<label for=”cool_heat_mode”>Cool/Heat Mode:</label>’;
echo ‘<input type=”text” id=”cool_heat_mode” name=”cool_heat_mode”><br>’;
echo ‘<label for=”last_modified”>Last Modified:</label>’;
echo ‘<input type=”text” id=”last_modified” name=”last_modified” disabled><br>’; // 更新日付を表示
echo ‘<label for=”create_date”>Create Date:</label>’;
echo ‘<input type=”text” id=”create_date” name=”create_date” disabled><br>’;
// 更新ボタンの追加
echo ‘<input type=”hidden” id=”esp32_id” name=”esp32_id” value=””>’; // ESP32のIDを隠しフィールドで保持
echo ‘<input type=”submit” value=”更新”>’;
echo ‘</form>’; // フォームの終了
} else {
echo ‘データが見つかりませんでした。’;
}
} else {
// ユーザーがログインしていない場合のメッセージ
echo ‘<p>このデータにアクセスするには、ログインしてください。</p>’;
}
?>
<script>
function updateFields(selectedId) {
// PHPで取得したデータをJavaScriptに渡す
const esp32Data = <?php echo json_encode($results); ?>;
// 入力フィールドをリセット
document.getElementById(‘esp32_name’).value = ”;
document.getElementById(‘time_division’).value = ”;
document.getElementById(‘auto_manual_mode’).value = ”;
document.getElementById(‘power_on_off_devision’).value = ”;
document.getElementById(‘auto_temperature_setting’).value = ”;
document.getElementById(‘manual_temperature_percent’).value = ”;
document.getElementById(‘cool_heat_mode’).value = ”;
document.getElementById(‘create_date’).value = ”;
document.getElementById(‘last_modified’).value = ”; // 追加
// 選択されたIDに対応するデータを取得
const selectedData = esp32Data.find(item => item.id == selectedId);
// データが見つかった場合、入力フィールドに値を設定
if (selectedData) {
document.getElementById(‘esp32_name’).value = selectedData.esp32_name;
document.getElementById(‘time_division’).value = selectedData.time_division;
document.getElementById(‘auto_manual_mode’).value = selectedData.auto_manual_mode;
document.getElementById(‘power_on_off_devision’).value = selectedData.power_on_off_devision;
document.getElementById(‘auto_temperature_setting’).value = selectedData.auto_temperature_setting;
document.getElementById(‘manual_temperature_percent’).value = selectedData.manual_temperature_percent;
document.getElementById(‘cool_heat_mode’).value = selectedData.cool_heat_mode;
document.getElementById(‘create_date’).value = selectedData.create_date;
document.getElementById(‘last_modified’).value = selectedData.last_modified; // 追加
document.getElementById(‘esp32_id’).value = selectedData.id; // IDを隠しフィールドに設定
}
}
</script>
<?php
// フォームが送信されたときの処理
if ($_SERVER[‘REQUEST_METHOD’] === ‘POST’) {
// フォームからのデータを取得
$esp32_id = intval($_POST[‘esp32_id’]);
$esp32_name = sanitize_text_field($_POST[‘esp32_name’]);
$time_division = sanitize_text_field($_POST[‘time_division’]);
$auto_manual_mode = sanitize_text_field($_POST[‘auto_manual_mode’]);
$power_on_off_devision = sanitize_text_field($_POST[‘power_on_off_devision’]);
$auto_temperature_setting = sanitize_text_field($_POST[‘auto_temperature_setting’]);
$manual_temperature_percent = sanitize_text_field($_POST[‘manual_temperature_percent’]);
$cool_heat_mode = sanitize_text_field($_POST[‘cool_heat_mode’]);
// データを更新
$wpdb->update(
$table_name,
array(
‘esp32_name’ => $esp32_name,
‘time_division’ => $time_division,
‘auto_manual_mode’ => $auto_manual_mode,
‘power_on_off_devision’ => $power_on_off_devision,
‘auto_temperature_setting’ => $auto_temperature_setting,
‘manual_temperature_percent’ => $manual_temperature_percent,
‘cool_heat_mode’ => $cool_heat_mode,
‘last_modified’ => current_time(‘mysql’) // 現在の日時を設定
),
array(‘id’ => $esp32_id)
);
// 更新完了メッセージ
echo ‘<p>データが更新されました。</p>’;
}
?>
</div>
<?phpget_footer(); ?>
