• Объявления

    • Victor

      Вход на форум   02.11.2016

      В связи с обновлением форума были упразднены логины для входа в свою учетную запись. Теперь в качестве логина необходимо использовать ваше имя (то, что высвечивается при публикации сообщений).

31 сообщение в этой теме

Вот код формы который отправляет обработчику комментарий.

<form action="comments-post.php" method="post" id="commentform">
<p><input class="txt" type="text" name="author" id="author" value="" size="22" tabindex="1" />
	<label for="author"><small>Имя*</small></label></p>
<p><input class="txt" type="text" name="email" id="email" value="" size="22" tabindex="2" />
	<label for="email"><small>E-mail* (Не будет опубликованно.)</small></label></p>
<p><textarea name="text" id="comment" rows="10" cols="200" tabindex="4"></textarea></p>

<p><input name="submit" type="submit" id="submit" tabindex="5" value="Сказать" />
   <input type="hidden" name="p_id" value="<?php echo $row[id];?>" />
</p>
</form>

А вот собственно и обработчик :D

$log = '';
$flag = 'no';
if($_POST[submit]) {
	if ($_POST[author]) {$author = $_POST[author];} else {
	$log .= '<li>Вы не ввели имя.</li>';
	$flag = 'yes';
	}
	if ($_POST[email]) {$email = $_POST[email];} else {
	$log .= '<li>Вы не ввели e-mail.</li>';
	$flag = 'yes';
	}
	if ($_POST[text]) {$text = $_POST[text];} else {
	$log .= '<li>Вы не ввели текст отзыва.</li>';
	$flag = 'yes';
	}
	if ($_POST[p_id]) {$p_id = $_POST[p_id];} 
}   else {$log .= '<li>Вы не нажали кнопку.</li>'; $flag = 'yes';}
if ($flag != 'yes') {
	$date = date('%Y-%m-%d %H:%i:%s');
	$result = mysql_query('INSERT INTO pcomment (p_id,author,date,text,email) VALUES ("$p_id","$author","$date","$text","$email")');
	if ($result) {echo '<html><head><meta http-equiv="Refresh" content="0" URL="readblog.php?id'.$p_id.'"></head></html>';}
	else {echo 'Критическая ошибка';}
} else {echo '<ul>'.$log.'</ul>';}

Трабл в том, что при отправке формы, обработчик пишет: "Вы не нажали кнопку". Все проверил по 5 раз, но так и не увидел ошибку. мб вы мне поможите

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

} else {$log .= '<li>Вы не нажали кнопку.</li>'; $flag = 'yes';}

мб вот эта скобка не там стоит?

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

можно вывести вначале print_r($_REQUEST); и посмотреть, что отправляется

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
} else {$log .= '<li>Вы не нажали кнопку.</li>'; $flag = 'yes';}

мб вот эта скобка не там стоит?

Почему??? она закрывает скобку которая идет после условия

if($_POST[submit])

. То бишь, все что находиться между этими двумя скобками должно выполняться если нажата кнопка... И оно выполняется. если залезть в PhPMyAdmin, то там видно что в таблице pcomment добавился новый комментарий. Но сообщение тоже выдает. не понимаю почему.

Изменено пользователем Flaim_Work

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

но комменты не могут сохраняться, т.к. если выполняется то условие, то $flag = 'yes' и условие if ($flag != 'yes') не может выполниться

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

В этом-то и парадокс, который ломает мне мозг :D :D :angry:

Если надо могу прикрепить сам текстовый документ

Изменено пользователем Flaim_Work

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

всяко где-то ошибся) завтра встанешь и сразу поймешь, в чем дело)

print_r($_POST);
if($_POST[submit]) {

покажи масссив

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

При использовании

print_r($_POST);

выдает:

Array

(

[author] => Alex

=> atazitinov@gmail.com

[text] => Првет

[submit] => Сказать

[p_id] => 2

[date] => 2011-06-23 11:49:14

)

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

)))

ведь все в одном файле, т.е. обработчик сверху а форма ниже?

ну я так понимаю, что если я зашел на ту страничку, и не нажал кнопку, он и выведет "Вы не нажали кнопку"

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

нет, с чего ты взял. Это два разных файла которые лежат в одной папке.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

$_POST то не отправится, будет пустым, и сработает то условие

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Но комент в базу занесся и это факт

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

ну прикрепи весь скрипт, надеюсь там не много

если ты в первый раз заходишь на эту страничку, то пишет "Вы не нажали кнопку"?

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

<?php	include('block/db.php');	if ($_GET[id]) {$id = $_GET[id];} else {print 'Потеря переменной!';}?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head>	<meta charset="UTF-8" />	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />	<link rel="stylesheet" type="text/css" href="style/style.css" media="screen" />	<link media="screen" href="style/effects.css" type="text/css" rel="stylesheet">	<link type="text/css" rel="stylesheet" href="style/default.css">	<script type='text/javascript' src='js/cufon/cufon-yui.js?ver=3.2-bleeding'></script>	<script type='text/javascript' src='js/cufon/Qlassik.font.js?ver=3.2-bleeding'></script>	<script type="text/javascript">		Cufon.replace('h1, h2, h3, h4, h5, h6');	</script></head><body><div id="bg">	<?php include('block/header.php');?><!-- /#header -->	<?php include('block/navigation.php');?><!-- /#navigation -->	<div id="container">		<div id="intro">			<h2></h2>			<p></p>			<div class="clear"></div>		</div><!-- /#intro -->		<div id="main">				<div id="content">					<?php $result = mysql_query('SELECT *,DATE_FORMAT(date,"%d %M %Y") AS date FROM post WHERE id ='. $id);						  $row = mysql_fetch_array($result);						  $num_com = mysql_num_rows(mysql_query('SELECT * FROM pcomment WHERE p_id ='. $row[id]));?>					<div class="post">						<div class="meta">							<span class="date"><?php echo $row[date];?></span>							<span class="comments"><a href="readblog.php?id=<?php echo $row[id];?>#respond" title="Comment on <?php echo $row[title];?>"><?php echo $num_com;?> Comments</a></span>						</div>						<h2 class="title"><a title="Permanent Link to <?php echo $row[title];?>" href="readblog.php?id=<?php echo $row[id];?>" rel="bookmark"><?php echo $row[title];?></a></h2>						<div class="entry">							<p><?php echo $row[text];?></p>							<div class='sociable' style='text-align: left'></div>												</div><!-- /.entry -->						<div class="tags">						</div><!-- /.tags -->					</div><!-- /.post -->	<!-- Coments for this post  -->					<div id="comments">							<?php $com_res = mysql_query('SELECT *,DATE_FORMAT(date,"%d %M %Y  %H:%i") AS date FROM pcomment WHERE p_id ='.$row[id]);								if (mysql_num_rows($com_res) > 0 ) {									printf('<h3>Replyes for “'.$row[title].'”</h3>');								} else {									printf('<h3>Leave a Reply</h3>');								} ?>							<ol class="commentlist">							<?php 										while ($com_row = mysql_fetch_array($com_res)) {										printf('												<li class="comment even thread-even depth-1" id="li-comment-3">													<a name="comment-3"></a>													<div class="comment-meta">														<span class="name">'.$com_row[author].'</span>														<span class="date">'.$com_row[date].'</span>													</div><!-- /.comment-meta -->													<div class="comment-entry"  id="comment-3">														<p>'.$com_row[text].'</p>																											</div><!-- /.comment-entry -->													<div class="clear"></div>												</li>');									}							?>																	</ol>					</div> <!-- end #comments_wrap -->					<div id="respond">						<?php   if (mysql_num_rows($com_res) > 0 ) {									printf('<h3>Leave a Reply</h3>');								}  ?>						<form action="comments-post.php" method="post" id="commentform">							<p><input class="txt" type="text" name="author" id="author" value="" size="22" tabindex="1" />								<label for="author"><small>Имя*</small></label></p>							<p><input class="txt" type="text" name="email" id="email" value="" size="22" tabindex="2" />								<label for="email"><small>E-mail* (Не будет опубликованно.)</small></label></p>							<p><textarea name="text" id="comment" rows="10" cols="200" tabindex="4"></textarea></p>														<p><input name="submit" type="submit" id="submit" tabindex="5" value="Сказать" />								<input type="hidden" name="p_id" value="<?php echo $row[id];?>" />								<input type="hidden" name="date" value="<?php echo date("Y-m-d H:i:s");?>" />															</p>						</form>						<div class="fix"></div>					</div> <!-- end #respond -->				</div><!-- /#content -->			<?php include('block/sidebar.php');?><!-- /#sidebar -->		</div><!-- /#main -->		<?php include('block/footer.php');?><!-- /#footer -->		<div class="clear"></div>	</div><!-- /#container --></div></body></html>

Обработчик:

<?php 	include('block/db.php'); 	 	$log = ''; 	$flag = 'no'; 	print_r($_POST);  	if($_POST[submit]) { 		if ($_POST[author]) {$author = htmlspecialchars(stripslashes($_POST[author]));} else { 		$log .= '<li>Вы не ввели имя.</li>'; 		$flag = 'yes'; 		} 		 		if ($_POST[email]) {$email = htmlspecialchars(stripslashes($_POST[email]));} else { 		$log .= '<li>Вы не ввели e-mail.</li>'; 		$flag = 'yes'; 		} 		 		if ($_POST[text]) {$text = htmlspecialchars(stripslashes($_POST[text]));} else { 		$log .= '<li>Вы не ввели текст отзыва.</li>'; 		$flag = 'yes'; 		} 		 		if ($_POST[p_id]) {$p_id = $_POST[p_id];}  		if ($_POST[date]) {$date = $_POST[date];}  	}   	else {$log .= '<li>Вы не нажали кнопку.</li>'; $flag = 'yes';} 	if ($flag == 'no') { 		$result = mysql_query("INSERT INTO pcomment (p_id,author,date,text,email) VALUES ('$p_id','$author','$date','$text','$email')"); 		if ($result) {echo '<html><head><meta http-equiv="Refresh" content="0" URL="readblog.php?id'.$p_id.'"></head></html>';} 		else {echo 'Критическая ошибка';} 	} else {echo '<ul>'.$log.'</ul>';} ?>

comments-post.php

readblog.php

Изменено пользователем Flaim_Work

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

<?php
include('block/db.php');

$log = '';
$flag = 'no';

if(isset($_POST['submit'])) {

попробуй так

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Все равно тоже самое. В данном случае и команда isset и просто запись $_POST[****] должны возвратить булево значение.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

в общем хз, после того, как коммент сохранился, должен редирект идти, а я так понимаю он на этом скрипте остается

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да. А что такое редирект???? :D

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

редирект - перенаправление на другую страницу

это

if ($result) {echo '<html><head><meta http-equiv="Refresh" content="0" URL="readblog.php?id'.$p_id.'"></head></html>';}

else {echo 'Критическая ошибка';}

замени на

header('Location: readblog.php?id='.$p_id.);

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо большое! ЗАРАБОТАЛО :D . А в чем ошибка я так и не понял.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
А в чем ошибка я так и не понял.

редирект не работал, или работал, на ссылался на ту же страницу

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

не заморачивайся, это норм

ну можно в phpmyadmin поковырять, там есть что-то типа начальное значение id

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
Ну раз уж на то пошло, подскажите как обнулить счетчик id. а то не хочется видеть что комменты начинаются с 37 айдишника

TRUNCATE TABLE, насколько помню, обнуляет autoincrement.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

if($_POST[submit]) {} - плохо

if($_POST['submit']) {} - хорошо, еще лучше !empty($_POST['submit'])

Дело в том, что интерпритатор первым делом под "submit", в первом случае, будет искать константу. И если константа есть, то ожидаемого результата ты явно не дождешься.

Ну а отправку формы проверять, ИМХО, лучше так: if(!empty($_POST)) {...} (или isset) т.е. просто проверить наличие.

Изменено пользователем Mil-ast

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

а еще проще - взять готовый скрипт, разобрать его и с новыми познаниями нарисовать свой. Но, если хочется с нуля, то это всегда можно свои теоретические знания материализовать, тоже полезное дело. :)

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!


Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.


Войти