表示部

<?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(); ?>
タイトルとURLをコピーしました