Копирование html-данных из divs через AJAX в базу данных MySQL

#javascript #php #jquery #mysql

#javascript #php #jquery #mysql

Вопрос:

У меня есть несколько divs, которые создаются пользователями сайтов через PHP MySQL.

Я пытаюсь создать функцию копирования, чтобы любой пользователь мог просматривать данные других пользователей и иметь возможность «копировать» другие данные в свой собственный профиль.

Вот фрагмент divs, которые печатаются из моей базы данных: (Я удалил материал SQL, чтобы максимально упростить этот пост, поскольку эта часть работает так, как должна)

   echo '<div class="profilecontainer">';

     echo '<div class="profile">';
     echo '<div class="optionhover">'; ?> <a class="a" href="<?php  echo 'download.php?id='. urlencode($fil_id)?><?php echo '">Download</a></br><p><a class ="copy" href="#" onclick="copytoprofile()">Copy</a></div>';
     echo '<div class="profilehover"><div class="title">'.$title.
     '</div></br>';
     echo '<div class="date">'.$date.
     '</div></br>';
     echo 'Name: <div class="name">'.$name.
     '</div></br>';
     echo 'Category: <div class="category">'.$category.
     '</div></br>';
  

Я новичок в AJAX и jQuery, и я смог найти только руководства, и поэтому post работает наоборот; получение данных из базы данных на страницу.

Что мне нужно, так это скопировать данные, которые уже отображаются на сайте, для вставки в качестве новых данных в базу данных.

Итак, вот моя лучшая попытка, но я знаю, что, вероятно, она далека от правильной.. но просто чтобы показать, что я уже пробовал:

 <script type="text/javascript">
function copytotimeline() {
    $(document).ready(function() {
        $('.profilecontainer .profilehover .date').each(function() {
            $(this).click(function(){
                var date = $(this).innerHTML();
                $.ajax({
                    type: "POST",
                    url: "copy.php",
                    data: { "date": date },
                    cache: false,
                    success: function(result){
                        $("#display").html(result);
                    }
                });

                return false;
            });
        });
    });
}

</script>
  

Приведенный выше код представляет собой попытку получить информацию о «дате» из контейнера div. В идеале я хотел бы, чтобы внутри контейнера было все, что угодно, все переменные и файл.

Я предполагаю, что затем я должен выполнить запрос sql insert на моем copy.php страница.

Комментарии:

1. Ваш JS-код ищет идентификатор HTML-элемента notecontainer , но этот идентификатор не существует в опубликованном вами коде. Возможно, вы имели в виду, class="profilecontainer" что в вашем PHP-коде действительно должно быть id="notecontainer" .

2. Примечание: Вместо того, чтобы повторять кучу HTML с помощью PHP, лучше закрыть блок PHP ?> , написать свой HTML, а затем, при необходимости, открыть новый блок PHP <?php . Тогда HTML может быть лучше отформатирован, его легче читать, а IDE также может выделять синтаксис HTML.

3. @Dave Я отредактировал это, моя ошибка! Спасибо. Эта ошибка произошла, когда я скопировал ее при создании этого поста SO, я решил изменить названия, чтобы сделать их более понятными для моего поста здесь. Однако я попробовал свой код с правильными именами, прежде чем публиковать его здесь.

4. Но у вас все еще есть это как класс, а не идентификатор в HTML. JS никогда не найдет это.

5. Пожалуйста, скопируйте / вставьте ваш фактический код без каких-либо перезаписей. Для нас довольно бессмысленно помогать вам отлаживать перезапись, поскольку это может (как вы только что заметили) привести к появлению новых проблем.

Ответ №1:

 function CopyDatetoProfile(mydiv){
var $this=$(mydiv);
var my_date=$this.html();
  console.log('My Date :',my_date);
  //here you can write your ajax im doing it below the script
}  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
<div class="date" onclick="CopyDatetoProfile(this);">12-01-2019</div>
<div class="date" onclick="CopyDatetoProfile(this);">13-01-2019</div>
<div class="date" onclick="CopyDatetoProfile(this);">14-01-2019</div>
<div class="date" onclick="CopyDatetoProfile(this);">15-01-2019</div>
</div>  

Приведенный выше код предоставляет вам текст в виде HTML в div, имеющий класс ‘date’. Теперь вам нужно вызвать ajax, чтобы опубликовать эти данные и сохранить в вашей базе данных. Я взял имя переменной date, которое будет отражено в вашем php-скрипте в виде индекса $ _POST;

 $.ajax({
    type: "POST",
    url: "copy.php",
    data: { date: my_date },
    cache: false,
    success: function(result){
        $("#display").html(result);
    }
});
  

Теперь ваша php-страница о том, как вы будете получать данные и как вы будете выполнять необходимые:

 <?php 
if(isset($_POST['date'])){
     $date_to_insert=$_POST['date'];
     /*  your process */
}

?>
  

Комментарии:

1. Я попытался реализовать это, и это работает очень хорошо! Однако это работает только с первым напечатанным div. Пример: Если имеется 4 divs. Если я нажму на div 2-4, все они покажут значение из div 1. divs печатаются с использованием цикла while. И они создаются пользователями. Таким образом, их может быть бесконечно.

2. @chao Ans обновлен, надеюсь, он будет работать так, как вам нравится.

3. Я пытался разобраться в этом последний час из вашего примера, но безуспешно. Моя проблема в том, что ваш пример ожидает, что пользователь нажмет на саму дату. Но я ищу способ щелкнуть ссылку внутри контейнера и получить данные из других divs внутри этого контейнера. Имеет ли это смысл для вас? Я ценю вашу помощь!

4. Я, наконец, нашел решение. Я добавил: «each(function()» также добавлено: var $this=$(this).find(‘.date’); Поскольку дата — это не его значение, а в другом div внутри контейнера.

5. Мы передаем объект «this» в функцию, поэтому нам не нужно выполнять цикл, если вы собираетесь использовать цикл, то нет необходимости передавать объект в качестве параметра в функции.