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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2012, 12:10   #1
Adidas7
Пользователь
 
Регистрация: 22.10.2012
Сообщений: 40
По умолчанию Ошибка в коде. Вложенные коментарии

Здравствуйте! Как исправить ошибку "Notice: Undefined index: CommentSession in D:\SERVER\www\commentAdd.php on line 3"?

commentAdd.php:
Код:
<?php
//Проверка сессии
if ($_SESSION["unfmC"]==$_POST["CommentSession"] and!empty($_POST["CommentSession"])){

	//Уничтожение сессии
	unset($_SESSION['unfmC']);

	
	//Captcha
	include("module/kcaptcha/securimage.php");
	$img = new Securimage();
	$valid = $img->check($_POST['commentCaptcha']);
	if($valid) {
		
		//Обработка данных формы. Замена HTML тегов на их сущности
		$message=htmlspecialchars($_POST['commentMessage'],ENT_QUOTES);
		$user=htmlspecialchars($_POST['commentUser'],ENT_QUOTES);
		$email=htmlspecialchars($_POST['commentEmail'],ENT_QUOTES);
		$isparent=intval($_POST['CommentParent']);
		
		$host=$_SERVER['HTTP_HOST'];
		$url=$_SERVER['REQUEST_URI'];
		
		//Добавление комментария в базу
		funcCommentAdd($idparent, $user, $email,$message,$host,$url);
		
	}else{
		print "<script type=\"text/javascript\">alert(\"Вы ввели неверный код\");</script>";
	}
}
?>
Вы можете посмотреть исходники в папке, если там есть ошибка, прошу вас исправлять: comments.rar

MySQL таблица `comment`создана через phpmyadmin:
Код:


CREATE TABLE IF NOT EXISTS `comments` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`idparent` int(11) NOT NULL DEFAULT "0",
`user` varchar(255) CHARACTER SET cp1251 COLLATE cp1251_general_cs NOT NULL,
`email` varchar(255) CHARACTER SET cp1251 COLLATE cp1251_general_cs NOT NULL,
`message` text CHARACTER SET cp1251 COLLATE cp1251_general_cs NOT NULL,
`host` varchar(255) CHARACTER SET cp1251 COLLATE cp1251_general_cs NOT NULL,
`url` text CHARACTER SET cp1251 COLLATE cp1251_general_cs NOT NULL,
`date` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COLLATE=cp1251_general_cs AUTO_INCREMENT=1;
Adidas7 вне форума Ответить с цитированием
Старый 28.10.2012, 12:36   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,158
По умолчанию

1. учите английский, notice - не ошибка, потрудитесь и найдите перевод самостоятельно
2. переведите и другие фразы.... в частности предупреждает что нет значения массива с таким индексом
ADSoft вне форума Ответить с цитированием
Старый 28.10.2012, 12:48   #3
Adidas7
Пользователь
 
Регистрация: 22.10.2012
Сообщений: 40
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
1. учите английский, notice - не ошибка, потрудитесь и найдите перевод самостоятельно
2. переведите и другие фразы.... в частности предупреждает что нет значения массива с таким индексом
А как исправить?
Adidas7 вне форума Ответить с цитированием
Старый 28.10.2012, 15:58   #4
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,158
По умолчанию

я ж сказал .. учите английский...
по коду - используйте только те элементы, которые определены, по вашему коду неясно что именно вы передаете в скрипт
у вас не существует или элемент сессии с ключом unfmC - $_SESSION["unfmC"]
или в $_POST - $_POST["CommentSession"]
ADSoft вне форума Ответить с цитированием
Старый 28.10.2012, 17:36   #5
Adidas7
Пользователь
 
Регистрация: 22.10.2012
Сообщений: 40
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
я ж сказал .. учите английский...
по коду - используйте только те элементы, которые определены, по вашему коду неясно что именно вы передаете в скрипт
у вас не существует или элемент сессии с ключом unfmC - $_SESSION["unfmC"]
или в $_POST - $_POST["CommentSession"]
Д мне уже понятно, но в коде есть имя элементы:
Код:
<div id="CommentForm">
<form action="" method="POST" name="CommentFormSend">
	<div class="header">
		<div><h1>Добавить комментарий</h1></div>
		<div><a href="#" title="Закрыть окно"><img src="imgs/close/1.png" border="0" /></a></div>
	</div>
	<br />
	<br />
	
	<div class="field">
		<input name="commentUser" id="commentUser" value="Имя" onfocus="if(this.value == '' || this.value == 'Имя'){this.value = ''}" onblur="if(this.value == ''){this.value = 'Имя'}" />
		<input name="commentEmail" id="commentEmail" value="E-mail" onfocus="if(this.value == '' || this.value == 'E-mail'){this.value = ''}" onblur="if(this.value == ''){this.value = 'E-mail'}" />
		<br />
		<br />
		<textarea name="commentMessage" id="commentMessage"></textarea>
	</div>
	<br />
	
	<div class="captcha">
		<div>
			<a href="#" title="Обновить код" onclick="document.getElementById('siimage').src = 'module/kcaptcha/securimage_show.php?sid=' + Math.random(); return false">Обновить код</a>
			<br />
			<img id="siimage" src="module/kcaptcha/securimage_show.php?sid=7542a86d4b72c53a2dac88ffb767e290" />
		</div>
		<div>
			<br />
			<input type="text" name="commentCaptcha" id="commentCaptcha" />
		</div>
		<div>
			<br />
			<button onclick="return false;">Добавить</button>
		</div>
	</div>
	<input type="hidden" name="CommentParent" id="CommentParent" value="0">
<?php
//Прошивка формы сессией
$_SESSION['unfmC']=md5("Comment".date("l dS of F Y h:I:s A"));
?>
	<input type="hidden" id="CommentSession" name="CommentSession" value="<?php print $_SESSION['unfmC'];?>">
</form>
</div>
Adidas7 вне форума Ответить с цитированием
Старый 29.10.2012, 10:10   #6
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,158
По умолчанию

а сессии то кто стартовать будет?

Код:

<?php
session_start();
//Проверка сессии
if ($_SESSION["unfmC"]==$_POST["CommentSession"] and!empty($_POST["CommentSession"])){
ADSoft вне форума Ответить с цитированием
Старый 29.10.2012, 14:53   #7
Adidas7
Пользователь
 
Регистрация: 22.10.2012
Сообщений: 40
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
а сессии то кто стартовать будет?

Код:

<?php
session_start();
//Проверка сессии
if ($_SESSION["unfmC"]==$_POST["CommentSession"] and!empty($_POST["CommentSession"])){
Вот файл index.php:
Код:
<?php session_start(); ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=win-1251" />
	<title>Вложенные комментарии</title>
	
	<script language="JavaScript1.2" src="js/jquery.js" type="text/javascript"></script>
	<script type="text/javascript" src="js/comments.js"></script>
	
	<link rel="stylesheet" href="css/comments.css" type="text/css">
</head>
<body bgcolor="#ffffff">

<div style="width:600px;margin:0 auto;">
<?php
include_once("commentForm.php");

include_once("commentAdd.php");

include_once("funcComment.php");

include_once("commentView.php");


?>
</div>

</body>
</html>
Adidas7 вне форума Ответить с цитированием
Старый 29.10.2012, 15:22   #8
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,158
По умолчанию

Ну извиняй.... телепатов нема ж.
... кароче в самом начале ставишь print_r($_POST) и print_r($_SESSION) (перед сравнением) и смотришь что у тебя есть а чего нет ...
ADSoft вне форума Ответить с цитированием
Старый 28.06.2015, 17:14   #9
vihtor
Пользователь
 
Аватар для vihtor
 
Регистрация: 06.06.2014
Сообщений: 78
По умолчанию Проблема с формой добавления комментариев

Здравствуйте.
Я тестирую подобную форму для статического сайта.
Форма состоит всего из 4-х файлов:
1. Файл с формой здесь: metodicwomen.esy.es/comm1/index.html
2. Скрипт comments здесь: metodicwomen.esy.es/comm1/js/comments.js
3. Скрипт jquery здесь: metodicwomen.esy.es/comm1/js/jquery.js
4. CSS здесь: metodicwomen.esy.es/comm1/css/comments2.css

Форма не работает, проблема в последней строке:
<input type="hidden" name="CommentSession" value=" ">

На сайтах, где установлена подобная форма поле value= выглядит так:
value="13b9653934cc518b098bdc4770c2 922b"
На разных страницах разный код в этом поле. И даже при перезагрузке страницы код изменяется.

Что это за код? Что его генерирует? Что прописывается в поле value=" "

Т.е. у пользователя на компьютере в поле value=" " введено НЕЧТО, а при загрузке на сайт там уже КОД.

Последний раз редактировалось vihtor; 28.06.2015 в 17:28.
vihtor вне форума Ответить с цитированием
Старый 28.06.2015, 18:27   #10
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от vihtor Посмотреть сообщение
Форма не работает, проблема в последней строке:
<input type="hidden" name="CommentSession" value=" ">

На сайтах, где установлена подобная форма поле value= выглядит так:
value="13b9653934cc518b098bdc4770c2 922b"
На разных страницах разный код в этом поле. И даже при перезагрузке страницы код изменяется.

Что это за код? Что его генерирует? Что прописывается в поле value=" "

Т.е. у пользователя на компьютере в поле value=" " введено НЕЧТО, а при загрузке на сайт там уже КОД.
Защита от CSRF.
Генерируется уникальный токен (13b9653934cc518b098bdc4770c2922b), сохраняется в сессию и выводится скрытым полем в форме:
Код:
<input type="hidden" name="CommentSession" value="13b9653934cc518b098bdc4770c2922b">
При обработке данных из формы происходит проверка на соответствие значения из скрытого поля формы тому значению, которое сохранено в сессии.
Если значения совпадают – всё ОК, данные из формы обрабатываются.
Если значения не совпадают – значит, произошла попытка использования CSRF, и данные из формы игнорируются.
Andkorol вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в коде moshkin_ura PHP 7 10.06.2012 21:42
Где ошибка в этом исходном коде на языке Си? Или ошибка в Excel? ArchiCurtis Помощь студентам 2 07.04.2012 14:16
Ошибка в коде С++ Ирискин Помощь студентам 4 04.02.2011 15:17
Ошибка в коде, ошибка в css или это проблема с совместимостью с браузерами? ankris HTML и CSS 5 23.11.2010 16:58
Ошибка в коде konstantinopol Общие вопросы по Java, Java SE, Kotlin 1 26.10.2009 23:21