Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2017, 11:58   #1
Lara Semenova
 
Регистрация: 29.08.2017
Сообщений: 7
Восклицание Всплывающая форма ответа на комментарий - База Данных - PHP

Здравствуйте, я чайник в php, особенно в javascript, но так сложилось, что оочень нужно быстро написать код. Я хотела создать вставку и публикацию комментариев на странице index.php. Я решила сделать так, чтобы люди просто оставляли комменты, они прошли модерацию и затем просто показывались с датой и кнопкой ОТВЕТИТЬ. Я сделала всплывающую форму при нажатии на ссылку ОТВЕТИТЬ. Нужно было, чтобы текст ответа на коммент содержал уже заданное обращение к тому человеку, которому нужно ответить. Например "ольга пишет привет, а мария отвечает: ольга, тебе тоже привет". Все комментарии выводятся из базы данных, таблицы comments. Проблема в том, что это обращение посвящается только первому по счету комментатору, то есть получается, что всплывающее окно ответа образуется для каждого комментатора, но оно спрятано (display:none) отображается только форма ответа первого комментария. Вот скрин для наглядности (скрин1)
Я просто не понимаю, почему делается видимым только форма первого комментария, как сделать так, чтобы отображалась только та форма, на которой была нажата ссылка ОТВЕТИТЬ. Заранее спасибо

код в хэде: джаваскрипт

Код:
<script> 
        function show() {
        document.getElementById('envelope').style.display='block';
        document.getElementById('fade').style.display='block';
        }
        function hide() {
        document.getElementById('envelope').style.display='none';
        document.getElementById('fade').style.display='none';
        }
        </script>

код:

Код:

<div style="margin-bottom: 20px">
<?php $res=mysqli_query($link,"SELECT * FROM comments
    WHERE   moderation=1 ORDER BY id");  
$number=mysqli_num_rows($res);
 
if ($number>0) {
    
 
 echo '<br><b> <p style="text-align:center"> Последние комментарии:</b><br></p>';
 
 
                        
                        function get_comments($link) {
                    
                        $result = mysqli_query($link, "SELECT * FROM comments
    WHERE   moderation=1 ORDER BY id");
                        
                        $comments = mysqli_fetch_all($result, MYSQLI_ASSOC);
                    
                        return $comments;
                        }
                        
                        $comments = get_comments($link);
                //echo '<div style="float:right; width:170px; border:1px solid red;">';
                echo '('.date("H:i:s d.m.Y").' г.)</div>';
 
                             foreach ($comments as $comment)
                         { 
                             echo '<div class="comment_name">'.$comment["login"].':</div><div class="comment">
                             '.$comment["message"].'<div class="comment_answer"><a class="show-btn" href="javascript:void(0)" 
                             onclick = "show()">
                            Ответить</a></div><br><div class="comment_date">'.$comment["date"].'</div><br></div>';
                            
                            
                            
                            
                            
echo '<!-- Всплывающая при нажатии ОТВЕТИТЬ-- форма для ответов http://dbmast.ru/sozdaem-vsplyvayushhuyu-kontaktnuyu-formu-dlya-sajta офигенный сайт ВЫШЕ ЕСТЬ СКРИПТ С ФУНКЦИЯМИ-->
<div id="envelope" class="envelope">
        <a  href="javascript:void(0)" onclick = "hide()">Закрыть</a>
        <h1 class="title">Ответить на комментарий</h1>
<form action="';  echo $_SERVER["PHP_SELF"]; echo '" method="POST"> 
                             
                             <label for="login">Введите ваше имя:</label> <br><br>
                             <input class="add_comment" type="text" name="login"  required="required" placeholder="Айгуль" ><br><br>
            
                             <label for="message">Введите ваш комментарий: </label><br><br>
                             <textarea name="message" cols="100" rows="3" required="required"> Ответ:  '.$comment["login"].',  </textarea></p>
                              <P> <strong> Все комментарии проходят обязательную модерацию, поэтому будут опубликованы не сразу.</strong> </p>';
                             
                               
                                 $cod=rand(10,90); $cod2=rand(1,99); $summa=$cod + $cod2;
                                 echo '<div style="margin:5px; float:right;">'.$cod.' + '.$cod2.' = ';
                                  echo '<input type="hidden" name="prov_summa" value="'. $summa.'">';
                                
                                 echo '<input type="text" name="contr_cod" maxlength="4" size="4">';
                                 echo '</div>';
                               
                             echo '<button class= "add_comment" type="submit" name="submit"> Отправить </button> <br> <br> <br>
                
                        </form>
       </div>
       <div id="fade" class="black-overlay"></div> ';
 
 
 
 
  } // закрытие форич положительного условия
} //закрытие условия если намбер комментариев с модератион больше 1 БОЛЬШЕ чем 0                    
                    if(count($comments) === 0):
                    
                    echo '<p> Комментарии отсутствуют </p>';
                    
 else:       endif; ?>

ПОМОГИТЕ ПОЖАЛУЙСТА СРОЧНО
Изображения
Тип файла: jpg скрин1.jpg (87.2 Кб, 121 просмотров)
Тип файла: png скрин2.PNG (63.4 Кб, 122 просмотров)
Тип файла: jpg скрин3.jpg (35.4 Кб, 124 просмотров)
Lara Semenova вне форума Ответить с цитированием
Старый 04.12.2017, 14:12   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от Lara Semenova Посмотреть сообщение
чтобы отображалась только та форма, на которой была нажата ссылка ОТВЕТИТЬ
Присваивать каждой форме уникальный идентификатор и по нему определять, для какой формы нажато "Ответить" и открывать нужную форму. Ну либо передавать этот ID в ту функцию, которая привязана к "Ответить"
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 04.12.2017, 14:32   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
Присваивать каждой форме уникальный идентификатор и по нему определять, для какой формы нажато "Ответить"
в точку. Полностью согласен.

И, кстати, если я не ошибаюсь, то наличие в одном DOM нескольких объектов в одинаковыми ID вообще является грубейшим нарушением.

Lara Semenova,
1) сделайте разные ID в
<div id="envelope" class="envelope">
<div id="fade" class="black-overlay"></div> ';
2) в функциях show() и hide() получайте через this того, кто вызвал событие и далее управляйте им.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.12.2017, 20:41   #4
Lara Semenova
 
Регистрация: 29.08.2017
Сообщений: 7
По умолчанию

спасибо за ответ, не могли бы вы пояснить, пожалуйста, я сделала следующее: в базе данных в таблице комментов есть также уникальное поле для айди. Я сделала его значение как айди каждого дива для формы. в джаваскрипте так же поменяла энвелоп на переменную с этим айди, но ничего не работает. Вот код:
Код:
<script> 
		function show() {
		document.getElementById(''.$id_com.'').style.display='block';
		document.getElementById('fade').style.display='block';
		}
		function hide() {
		document.getElementById(''.$id_com.'').style.display='none';
		document.getElementById('fade').style.display='none';
		}
		</script>
Код:
         foreach ($comments as $comment)
						 {  $id_com=$comment["id"];
					 	     echo '<div class="comment_name">'.$comment["login"].':</div><div class="comment">
							 '.$comment["message"].'<div class="comment_answer"><a class="show-btn" href="javascript:void(0)" 
							 onclick = "show()"> 
							Ответить</a>'.$id_com.'</div><br><div class="comment_date">'.$comment["date"].'</div><br></div>';
							
							
							
							
					        
echo '<!-- Всплывающая при нажатии ОТВЕТИТЬ-- форма для ответов http://dbmast.ru/sozdaem-vsplyvayushhuyu-kontaktnuyu-formu-dlya-sajta офигенный сайт ВЫШЕ ЕСТЬ СКРИПТ С ФУНКЦИЯМИ-->
<div id="'.$id_com.'" class="envelope">
		<a  href="javascript:void(0)" onclick = "hide()">Закрыть</a>
		<h1 class="title">Ответить на комментарий</h1>
<form action="';  echo $_SERVER["PHP_SELF"]; echo '" method="POST"> 
			                 
							 <label for="login">Введите ваше имя:</label> <br><br>
                             <input class="add_comment" type="text" name="login"  required="required" placeholder="Айгуль" ><br><br>
			
				             <label for="message">Введите ваш комментарий: </label><br><br>
                             <textarea name="message" cols="100" rows="3" required="required"> Ответ:  '.$comment["login"].',  </textarea></p>
							  <P> <strong> Все комментарии проходят обязательную модерацию, поэтому будут опубликованы не сразу.</strong> </p>';
							 
                               
                                 $cod=rand(10,90); $cod2=rand(1,99); $summa=$cod + $cod2;
								 echo '<div style="margin:5px; float:right;">'.$cod.' + '.$cod2.' = ';
                                  echo '<input type="hidden" name="prov_summa" value="'. $summa.'">';
								
                                 echo '<input type="text" name="contr_cod" maxlength="4" size="4">';
								 echo '</div>';
                               
							 echo '<button class= "add_comment" type="submit" name="submit"> Отправить </button> <br> <br> <br>
				
                        </form>
	   </div>
	   <div id="fade" class="black-overlay"></div> ';
 
 
 
 
  }

Не могли бы вы помочь еще раз?
Lara Semenova вне форума Ответить с цитированием
Старый 05.12.2017, 21:06   #5
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

А если передавать ID явно в функцию?

Код:
<script> 
		function show($id) {
		document.getElementById(''.$id.'').style.display='block';
		document.getElementById('fade').style.display='block';
		}
		function hide($id) {
		document.getElementById(''.$id.'').style.display='none';
		document.getElementById('fade').style.display='none';
		}
		</script>

...

						 {  $id_com=$comment["id"];
					 	     echo '<div class="comment_name">'.$comment["login"].':</div><div class="comment">
							 '.$comment["message"].'<div class="comment_answer"><a class="show-btn" href="javascript:void(0)" 
							 onclick = "show($id_com)">
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 05.12.2017, 22:22   #6
Lara Semenova
 
Регистрация: 29.08.2017
Сообщений: 7
По умолчанию

Я делала примерно так, но тоже ничего
Код:
<script> 
		id_com="<? echo $id_com; ?>";
		function show(id_com) {
		document.getElementById('id_com').style.display='block';
		document.getElementById('fade').style.display='block';
		}
		function hide(id_com) {
		document.getElementById('id_com').style.display='none';
		document.getElementById('fade').style.display='none';
		}
		</script>
Код
<?php $res=mysqli_query($link,"SELECT * FROM comments
    WHERE   moderation=1 ORDER BY id");  
$number=mysqli_num_rows($res);

if ($number>0) {
	

 echo '<br><b> <p style="text-align:center"> Последние комментарии:</b><br></p>';
 

					    
					    function get_comments($link) {
					
						$result = mysqli_query($link, "SELECT * FROM comments
    WHERE   moderation=1 ORDER BY id");
						
						$comments = mysqli_fetch_all($result, MYSQLI_ASSOC);
					
						return $comments;
						}
						
						$comments = get_comments($link);
				//echo '<div style="float:right; width:170px; border:1px solid red;">';
                echo '('.date("H:i:s d.m.Y").' г.)</div>';
 
					         foreach ($comments as $comment)
						 {  $id_com=$comment["id"];
					 	     echo '<div class="comment_name">'.$comment["login"].':</div><div class="comment">
							 '.$comment["message"].'<div class="comment_answer"><a class="show-btn" href="javascript:void(0)" 
							 onclick = "show('.$id_com.')"> 
							Ответить</a>'.$id_com.'</div><br><div class="comment_date">'.$comment["date"].'</div><br></div>';
							
							
							
							
					        
echo '<!-- Всплывающая при нажатии ОТВЕТИТЬ-- форма для ответов http://dbmast.ru/sozdaem-vsplyvayushhuyu-kontaktnuyu-formu-dlya-sajta офигенный сайт ВЫШЕ ЕСТЬ СКРИПТ С ФУНКЦИЯМИ-->
<div id="'.$id_com.'" class="envelope">
		<a  href="javascript:void(0)" onclick = "hide('.$id_com.')">Закрыть</a>
		<h1 class="title">Ответить на комментарий</h1>
<form action="';  echo $_SERVER["PHP_SELF"]; echo '" method="POST"> 
			                 
							 <label for="login">Введите ваше имя:</label> <br><br>
                             <input class="add_comment" type="text" name="login"  required="required" placeholder="Айгуль" ><br><br>
			
				             <label for="message">Введите ваш комментарий: </label><br><br>
                             <textarea name="message" cols="100" rows="3" required="required"> Ответ:  '.$comment["login"].',  </textarea></p>
							  <P> <strong> Все комментарии проходят обязательную модерацию, поэтому будут опубликованы не сразу.</strong> </p>';
							 
                               
                                 $cod=rand(10,90); $cod2=rand(1,99); $summa=$cod + $cod2;
								 echo '<div style="margin:5px; float:right;">'.$cod.' + '.$cod2.' = ';
                                  echo '<input type="hidden" name="prov_summa" value="'. $summa.'">';
								
                                 echo '<input type="text" name="contr_cod" maxlength="4" size="4">';
								 echo '</div>';
                               
							 echo '<button class= "add_comment" type="submit" name="submit"> Отправить </button> <br> <br> <br>
				
                        </form>
	   </div>
	   <div id="fade" class="black-overlay"></div> ';
 
 
 
 
  } // закрытие форич положительного условия
} //закрытие условия если намбер комментариев с модератион больше 1 БОЛЬШЕ чем 0					
				    if(count($comments) === 0):
					
					echo '<p> Комментарии отсутствуют </p>';
					
 else:  	 endif; ?>
Lara Semenova вне форума Ответить с цитированием
Старый 05.12.2017, 22:23   #7
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Код:
document.getElementById('id_com')
А зачем вы его в кавычки взяли? Скрипт и ищет в документе элемент с именем id_com
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 05.12.2017, 22:29   #8
Lara Semenova
 
Регистрация: 29.08.2017
Сообщений: 7
По умолчанию

ЗАРАБОТАЛО
Спасибо огромное!
Lara Semenova вне форума Ответить с цитированием
Старый 06.12.2017, 00:26   #9
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
ЗАРАБОТАЛО
Спасибо огромное!
Да не за что. Так то я ПХП и ЖабаСкрипт не знаю нифига.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Всплывающая форма Shouldercannon Общие вопросы Delphi 4 07.03.2015 19:13
Всплывающая форма ZET78 JavaScript, Ajax 4 29.10.2010 12:51
Всплывающая форма Swatch Microsoft Office Access 2 24.05.2010 11:02
Всплывающая форма? CraftR14 Общие вопросы Delphi 13 20.04.2010 20:55
База данных и форма регистрации reyn90 PHP 3 03.06.2009 16:27