#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» в функцию, поэтому нам не нужно выполнять цикл, если вы собираетесь использовать цикл, то нет необходимости передавать объект в качестве параметра в функции.