Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » [решено] php Комментарии

Ответить
Настройки темы
[решено] php Комментарии

Аватара для Artem-Samsung

Ветеран


Сообщения: 823
Благодарности: 53

Профиль | Сайт | Отправить PM | Цитировать


Для комментариев создаю формочку и заношу с нее данные в БД.
PHP код: Выделить весь код

mysql_query("INSERT INTO `".$pref."comments` (`message`, `date`, `category`, `chapter`, `member`) VALUES ('$_POST[input]', '$date', '".$_POST['keys']."', '".$_POST['values']."', '$_COOKIE[login]')"); 


Вообщем самый примитив. Начинаю только открывать для себя такой раздел и мне очень было бы полезно получить как можно больше информации в качестве советов и ссылок.

Подскажите пожалуйста на первые же возникшие вопросы:
1. Как реализовать простешние смайлики.
2. Как сделать так, что бы избежать тегов со стороны пользователя?

Да и что еще нужно знать для безопасности или функциональности.
Простейшая версия моих комментаривев к примеру здесь - http://deykun.com/?projects=4

Спасибо

-------
Мой блог Web Development


Отправлено: 02:25, 19-07-2008

 

Аватара для Artem-Samsung

Ветеран


Сообщения: 823
Благодарности: 53

Профиль | Сайт | Отправить PM | Цитировать


Спасибо, еще мелкий вопрос:
Как выборкой сделать только последних 2 строки?
PHP код: Выделить весь код

mysql_query ("SELECT `title` FROM `menu` ORDER BY id DESC"); 


Я же делаю приблизительно так:

PHP код: Выделить весь код

$sql_rowcount mysql_query ("SELECT `title` FROM `menu` ORDER BY id DESC");;

    
$rowcount mysql_num_rows($sql_rowcount);
     
$rowcount2 $rowcount 3;
            
mysql_query ("SELECT `title` FROM `menu` WHERE sort <= '$rowcount' AND sort >= '$rowcount2' ORDER BY id DESC"

Но здесь много кода получается, не считая еще дополнительного поля в таблице.

Да и я думал, что так будет получаться:
PHP код: Выделить весь код

<?php

do {
   
$my_row['title'];
   
$i++;
} while (
$i<2)
?>

Но оно просто дублирует последнюю строку. Правильно вот так: (по крайней мере только так умею)
PHP код: Выделить весь код

<?php

$result 
mysql_query ("SELECT `title` FROM `menu` ORDER BY id DESC");
$my_row mysql_fetch_array($result);
do {
   
$my_row['title'];
   
$i++;
} while (
$my_row mysql_fetch_array($result))
?>

Но в этом случае считает оно всю абсолютно таблицу перебирает.

Подскажите пожалуйста этот нюанс.

-------
Мой блог Web Development


Отправлено: 13:16, 20-07-2008 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Arrest

runs with scissors


Сообщения: 642
Благодарности: 77

Профиль | Отправить PM | Цитировать


Надо выбрать последние 2 записи и обратить их порядок.
PHP код: Выделить весь код

mysql_query ("SELECT `title` FROM `menu` ORDER BY id ASC LIMIT 0 , 2;");

// а тут меняем местами, или делаем что угодно еще... 

-------
- Why do you call this version of software 'beta'?
- Coz it's beta than nothing.

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:48, 20-07-2008 | #12


Аватара для Artem-Samsung

Ветеран


Сообщения: 823
Благодарности: 53

Профиль | Сайт | Отправить PM | Цитировать


Подскажите пожалуйста, что неправильно?
Выборка делается правильно.

PHP код: Выделить весь код

<?php 

$result 
mysql_query("SELECT `pas` FROM `".$pref."reg` WHERE login = '$_POST[login]'"); 
$pas mysql_fetch_array($result);

if(
$_POST['password'] == $pas['pas'])
{
    
$_SESSION['login_result'] = 'OK'
    
$_SESSION['login'] = $_POST['login'];
}
if (!isset(
$_SESSION['login_result']) | $_SESSION['login_result'] !== 'OK') {
?>
      <div id="reg">
        <form id="form1" method="post" action="">
            <p>Логін:</p>
            <p><input type="text" name="login" id="login" /></p>
            <p>Пароль:</p>
            <p><input type="password" name="pas" id="pas" /></p>
            <p><input type="submit" name="button" id="button" value="Увійти" /></p>
            <p><a href="?simple=registration">Зареєструватися</a></p>
        </form> 
      </div>
<?php ?>

-------
Мой блог Web Development


Отправлено: 16:22, 23-07-2008 | #13


Аватара для Coutty

Кот Ти


Сообщения: 7318
Благодарности: 1204

Профиль | Отправить PM | Цитировать


Вот это непонятно: if (!isset($_SESSION['login_result']) | $_SESSION['login_result'] !== 'OK') {
Должно быть две вертикальные черты, если условие "или".
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:42, 23-07-2008 | #14


Аватара для Artem-Samsung

Ветеран


Сообщения: 823
Благодарности: 53

Профиль | Сайт | Отправить PM | Цитировать


Да, две черты. Поправил. Но вот все равно. Что то как по мне не работает.
www.deykun.com
Вам видно сейчас форму входа?
Только что вывел на экран значение SESSION['login_result']. Оно равно 'OK'.
Откуда ж оно взялось?
$_SESSION['login'] - пусто

-------
Мой блог Web Development


Отправлено: 18:02, 23-07-2008 | #15


Аватара для Coutty

Кот Ти


Сообщения: 7318
Благодарности: 1204

Профиль | Отправить PM | Цитировать


Нет, форму не видно.

Я вот как понимаю: пользователь вызывает скрипт без параметров. Т.е. $_POST пустая. Правильно? Далее, скрипт делает запрос к БД ("SELECT `pas` FROM `".$pref."reg` WHERE login = '$_POST[login]'"). После чего результат парсится в переменную $pas. Но т.к. $_POST[login] пустая, значит и СУБД возвращает пустую строку. В $pas попадает ничего.
Дальше по скрипту: сравнивается значение $pas['pas'], которая пустая и $_POST['password'], которая тоже не установлена. И они равны, разумеется - обе пустые.
Тогда выполняется присваивание $_SESSION['login_result'] = 'OK' (ведь правильно присвоилось?) и $_SESSION['login'] = $_POST['login']. Но $_POST['login'] не существует, поэтому эта переменная в сессии будет пустой.

Предлагаю вначале добавить проверку на наличие $_POST:
PHP код: Выделить весь код

if ($_POST['login'] && $_POST['password'])

  {
  
$result mysql_query("SELECT `pas` FROM `".$pref."reg` WHERE login = '$_POST[login]'");  
  
$pas mysql_fetch_array($result);
  if(
$_POST['password'] == $pas['pas']) 
     { 
      
$_SESSION['login_result'] = 'OK';  
      
$_SESSION['login'] = $_POST['login']; 
     }
  } 

Тогда он не будет делать запрос к БД, если его делать не надо.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:10, 23-07-2008 | #16


Аватара для Artem-Samsung

Ветеран


Сообщения: 823
Благодарности: 53

Профиль | Сайт | Отправить PM | Цитировать


Спасибо, ошибку понял. Сейчас пробую что то исправить.
Значит такая схема как бы категорически неправильная? Т.е. можно пройти под любым логином с пустым паролем? О_о


Вот, так исправил и вроде должно быть хорошо:

PHP код: Выделить весь код

<?php 

if (isset($_POST['login']) && isset($_POST['pas'])) 
  { 
          
$result mysql_query("SELECT `pas` FROM `".$pref."reg` WHERE login = '$_POST[login]'");   
          
$pas mysql_fetch_array($result); 
          
$pas['pas'] = trim($pas['pas']);
          if(
$_POST['pas'] == $pas['pas'] && $pas['pas'] != ""
             {
                
$_SESSION['login_result'] = 'OK';
                
$_SESSION['login'] = $_POST['login'];
            }      
  } 
if (!isset(
$_SESSION['login_result']) || $_SESSION['login_result'] !== 'OK') {
?>
      <div id="reg">
        <form id="form1" method="post" action="">
            <p>Логін:</p>
            <p><input type="text" name="login" id="login" /></p>
            <p>Пароль:</p>
            <p><input type="password" name="pas" id="pas" /></p>
            <p><input type="submit" name="button" id="button" value="Увійти" /></p>
            <p><a href="?simple=registration">Зареєструватися</a></p>
        </form> 
      </div>
<?php } else {echo "Вітаю, Ви зайшли під логіном:".$_SESSION['login'];} ?>

Прокоментируйте пожалуйста, так нормально или есть прокол, и как лучше сделать по другому....

-------
Мой блог Web Development


Отправлено: 19:42, 23-07-2008 | #17


Аватара для Coutty

Кот Ти


Сообщения: 7318
Благодарности: 1204

Профиль | Отправить PM | Цитировать


if (isset($_POST['login']) && isset($_POST['pas'])) - не обязательно писать isset. Хотя и не помешает.
$pas = mysql_fetch_array($result); - тут я не помню, разве не mysql_fetch_assoc создаёт ассоциативный массив? ..._array возвращает массив, наверное, просто нумерованный.
$pas['pas'] = trim($pas['pas']); - точно нужно обрезать? Впрочем, если нужно, значит пусть будет.

Так вроде всё нормально. Хотя с сессиями я ни разу не работал, т.ч. толком не знаю, откуда они берутся и как всё это происходить должно.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:55, 23-07-2008 | #18


Аватара для Artem-Samsung

Ветеран


Сообщения: 823
Благодарности: 53

Профиль | Сайт | Отправить PM | Цитировать


Цитата Coutty:
$pas['pas'] = trim($pas['pas']); - точно нужно обрезать? Впрочем, если нужно, значит пусть будет. »
Дело в том, что меня пугал тот факт, что реально с пустым полем ввода пароля, сессии присваивалось значение - "ОК".
Если просто проверять наличие поля пароля, то так не покатит. Так как если пустое поле, то создается $_POST, но с пустым значением. Я же решил делать проверку и на этот момент. А обрезал так - на всякий случай

Сейчас попробую создать ваторизацию для регистрации )

-------
Мой блог Web Development


Отправлено: 20:05, 23-07-2008 | #19



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » [решено] php Комментарии

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Открыть поддержку WinStyle 2009 (Голосование и комментарии) VIP-men Проект WinStyle 28 02-12-2009 11:32
Проблема с PHP(не передаются переменные из формы в PHP- скрипт) Kirander Вебмастеру 21 03-08-2009 01:11
C/C++ - [решено] PHP. Fatal error: Function name must be a string in /var/www/index.php on line 15 Artem-Samsung Программирование и базы данных 6 29-11-2008 18:37
[решено] Apache 2.2.8 + Php 5.2.6 + MySQL 5.0.51b (win) - не работает php v0f41k Вебмастеру 4 11-05-2008 22:08
комментарии на VisualC++6.5-проблема! faterss Программирование и базы данных 4 02-07-2007 13:00




 
Переход