PHP – форма не отправляет $_POST в текст Div

Я не могу получить этот div «about_me_container» в этой форме для отправки $_POST. Я понимаю, что элементы div не предназначены для использования с $_POST, поэтому я изменил элемент div на input type="text" и textarea, но он все равно не будет работать. Я также попытался добавить текст из «about_me_container» в «hidden_about_me» через Javascript. Что я делаю не так? Или ты можешь просто указать мне правильное направление? Спасибо

моястраница.php

<?php
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        if (isset($_POST['about_me_container']) && $_SESSION['logged_in'] == true) {
            $username = $_SESSION['username'];
            
            echo htmlspecialchars($_POST['about_me_container']);
            
        }
        else if (isset($_POST['hidden_about_me']) && $_SESSION['logged_in'] == true) {
            $username = $_SESSION['username'];
            
            echo htmlspecialchars($_POST['hidden_about_me']);
            
        }
    }

?>

<form id = "about_me_text" action = "mypage.php" method = "post">
    <div id = "about_me_title_row"> 
        <label for = "about_me_label"><h3>About Me</h3></label> 
        <input type = "submit" class = "mypage_button" id = "edit_about_me" value = "Edit">
        <input type = "submit" class = "mypage_button" id = "okay_about_me" value = "Ok">
    </div>

    <div class = "about_me_flex">
    <div id = "about_me_containment">

    <div id = "about_me_container" contenteditable = "false"></div>

    <input type = "hidden" name = "hidden_about_me" id = "hidden_about_me" value = ""/>

    </div>
</form>

моястраница.js

window.onload = function() {

    let editAboutMe = document.querySelector("#edit_about_me");
    let okayAboutMe = document.querySelector("#okay_about_me");

    let aboutMeContainer = document.querySelector("#about_me_container");
    let hiddenAboutMe = document.querySelector("#hidden_about_me");

    editAboutMe.addEventListener("click", editAboutMeText);
    okayAboutMe.addEventListener("click", okayAboutMeText);

    function editAboutMeText(e) {
        aboutMeContainer.contentEditable = "true";
        //aboutMeContainer.removeAttribute("readonly");
        aboutMeContainer.style.backgroundColor = "white";
        e.preventDefault();
    }

    function okayAboutMeText(e) {
        aboutMeContainer.contentEditable = "false";
        //aboutMeContainer.setAttribute("readonly", "");
        aboutMeContainer.style.backgroundColor = "lightcyan";
        moveHiddenText(e);
        e.preventDefault();
    }
    
    function moveHiddenText(e) {
        hiddenAboutMe.value = aboutMeContainer.innerText;
        e.preventDefault();
    }
}

Ваши кнопки отправки фактически никогда не отправляют страницу для обработки PHP, потому что вы используете e.preventDefault();, чтобы остановить отправку.

KIKO Software 09.06.2024 21:55

Спасибо, удаление e.preventDefault() исправило это. Спасибо.

donfontaine12 10.06.2024 02:27
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема с отправкой формы, скорее всего, связана с тем, что кнопки «Изменить» и «ОК» запускают отправку формы до того, как JavaScript сможет обновить скрытый ввод. Чтобы это исправить, обновите скрытое поле ввода в функции moveHiddenText и только после этого разрешите отправку формы.

Измените тип кнопки «ОК» на кнопку, чтобы предотвратить преждевременную отправку формы:

<input type = "button" class = "mypage_button" id = "okay_about_me" value = "Ok">

Измените JavaScript, чтобы отправить форму вручную после обновления скрытого ввода:

window.onload = function() {
    let editAboutMe = document.querySelector("#edit_about_me");
    let okayAboutMe = document.querySelector("#okay_about_me");

    let aboutMeContainer = document.querySelector("#about_me_container");
    let hiddenAboutMe = document.querySelector("#hidden_about_me");

    editAboutMe.addEventListener("click", editAboutMeText);
    okayAboutMe.addEventListener("click", okayAboutMeText);

    function editAboutMeText(e) {
        aboutMeContainer.contentEditable = "true";
        aboutMeContainer.style.backgroundColor = "white";
        e.preventDefault();
    }

    function okayAboutMeText(e) {
        aboutMeContainer.contentEditable = "false";
        aboutMeContainer.style.backgroundColor = "lightcyan";
        moveHiddenText();
        document.querySelector("#about_me_text").submit();
    }
    
    function moveHiddenText() {
        hiddenAboutMe.value = aboutMeContainer.innerText;
    }
}

Есть много способов решить эту головоломку, и я согласен, что ваш сработает, но вы ошибаетесь, когда предполагаете, что: «кнопки «Редактировать» и «ОК» запускают отправку формы до того, как JavaScript сможет обновить скрытый ввод». События нажатия на кнопки отправки обрабатываются перед отправкой формы. Отправка формы всегда происходит последней. Видеть; Понимание событий JavaScript onClick и onSubmit и порядка их выполнения.

KIKO Software 09.06.2024 22:55

Другие вопросы по теме