[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: помогите написать простенький форум
student80
помогите пожалуйста, не могу до конца разобраться в этом вопросе, мне нужно написать самый простенький форум: логин, пароль, авторизация пользователя. сохранение коментов и их вывод.



Спустя 17 минут, 30 секунд (17.10.2011 - 08:17) imbalance_hero написал(а):
student80
В чём, собственно, заключается сам вопрос?

Спустя 14 минут, 29 секунд (17.10.2011 - 08:32) m4a1fox написал(а):
А что уже у вас есть?

Спустя 5 секунд (17.10.2011 - 08:32) Invis1ble написал(а):
То, что ты описал - больше похоже на чат, чем на форум, имхо.
И присоединяюсь к предыдущему комментирующему - в чем вопрос?

Спустя 10 минут, 29 секунд (17.10.2011 - 08:42) student80 написал(а):
вопрос : с чего начать?
вот база,

`id` int(11) NOT NULL AUTO_INCREMENT,
`dt` datetime NOT NULL,
`login` varchar(100) NOT NULL,
`pass` varchar(20) NOT NULL,
`content` text NOT NULL,
PRIMARY KEY (`id`)

Спустя 1 минута, 8 секунд (17.10.2011 - 08:43) Invis1ble написал(а):
Цитата
вопрос : с чего начать?

ну по элементарной логике - с регистрации и авторизации

PS. Вобще, странная структура БД. Насколько я понял - текст комментов хранится вместе с данными юзверей... huh.gif

Спустя 9 минут, 42 секунды (17.10.2011 - 08:53) student80 написал(а):
вобщем я и насчёт базы хотел узнать правильно поля составил или что то упустил?


Спустя 2 минуты, 7 секунд (17.10.2011 - 08:55) Invis1ble написал(а):
думаю нет, почитай про нормализацию БД.

Спустя 59 секунд (17.10.2011 - 08:56) student80 написал(а):
я так понял для комментов нужна отдельная таблица?

Спустя 2 минуты, 40 секунд (17.10.2011 - 08:59) Invis1ble написал(а):
по-хорошему - да

Спустя 1 час, 38 минут, 1 секунда (17.10.2011 - 10:37) student80 написал(а):
подскажите если можно, по шаговую структуру написания форума:
1.создание бд. таблиц и полей,
2. регистрация и авторизация.
3....
4....
?

Спустя 8 минут, 7 секунд (17.10.2011 - 10:45) XCross написал(а):
скачай ты себе phpBB и не имей мозги.

Спустя 4 минуты, 21 секунда (17.10.2011 - 10:49) student80 написал(а):
мне нужно самому научиться на простеньком примере)

Спустя 48 минут, 24 секунды (17.10.2011 - 11:38) m4a1fox написал(а):
В универе задали?

Спустя 6 минут, 17 секунд (17.10.2011 - 11:44) student80 написал(а):
нет, сам учусь, вот что то долго доходит до меня эта тема, чуток бы подсказать - задать правильное направление)

Спустя 12 минут, 15 секунд (17.10.2011 - 11:56) student80 написал(а):
базу и регистрацию/авторизацию я победил)
вот дальше какой шаг?

Спустя 35 минут, 14 секунд (17.10.2011 - 12:31) m4a1fox написал(а):
student80
Базу и регистрацию в студию! Будем править!

Спустя 10 минут, 12 секунд (17.10.2011 - 12:42) student80 написал(а):
вот база

`users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`login` varchar(15) NOT NULL,
`pass` text NOT NULL,
PRIMARY KEY (`id`)

а вот регистрация

db.php

<?

$server="localhost";
$user="nik";
$pass="12345";
$db="forum";
$dtable="users";

if(!mysql_connect($server, $user, $pass))
die('error server MySql!');
elseif(!mysql_select_db($db))
die('error select db!');
?>


register.php

<?
include('db.php');

if (($_POST['login']!='') ||
(
$_POST['pass1']!='') ||
(
$_POST['pass2']!=''))
{
$pass1 = $_POST['pass1'];
$pass2 = $_POST['pass2'];

if (strcmp($pass1, $pass2) == 0) {
$login = $_POST['login'];


$sql='SELECT * FROM users WHERE login='.$login;
if (!($res=mysql_query($sql)) || (mysql_num_rows($res) == 0)) {

$sql = 'INSERT INTO users(login, pass)
VALUES("'
.$login.'", "'.$pass1.'")';
if(mysql_query($sql)) {
echo 'User'.$_POST['login'].' successfully registered! <a href="/index.php">The form to enter.';
} else {
echo 'When registering an error, <a href="/register.php">try again</a>.';
}
}
else echo 'A user with this login already registered!';
} else echo 'The entered passwords do not match, <a href="/register.php">try again</a>.';
}
else {
?>
<form method='post' action='/register.php'>
login: <input type='text' size='30' name='login' /><br />
pass: <input type='password' name='pass1' size='30' /><br />
repeat pass: <input type='password' name='pass2' size='30' /><br />
<
input type='submit' value='registration' />
<?
}
?>
</form>


index.php

<?

include('db.php');
$userinfo='';
$state='0';
if( (isset($_COOKIE['login'])) & (isset($_COOKIE['pass'])) ) {
if (!isset($_GET['exit'])) {
$login=$_COOKIE['login'];
$pass=$_COOKIE['pass'];


$sql="SELECT id, pass FROM users WHERE login='$login'";
$res=mysql_query($sql);
if(mysql_num_rows($res)>0){
$userinfo = mysql_fetch_array($res);
if(strcmp($pass,md5($userinfo['pass'])) == 0) {


$sql="SELECT * FROM users WHERE login='$login'";
$res=mysql_query($sql);
$userinfo=mysql_fetch_array($res); // в этой переменной будет лежать вся информация о пользователе из БД
$time=time();

setcookie("login",$login,$time+1800);
setcookie("pass",$pass,$time+1800);
$state = 1;// статус, если 1, тогда пользователь авторизован
}
}
}
else {

setcookie("login");
setcookie("pass");
}
}

if($state != 1) {// если после проверки куков, оказалось, что пользователь не авторизован, то идем дальше
if( (isset($_POST['login'])) & (isset($_POST['pass'])) ){ // если пользователь ввёл логин и пароль
$login = $_POST['login'];

// проверяем наличие пользователя в БД и достаём оттуда пароль
$sql = "SELECT id, pass FROM users WHERE login='$login'";
$res = mysql_query($sql);
if(mysql_num_rows($res)>0) {// если пользователь есть в БД
$userinfo = mysql_fetch_array($res);// в этой переменной лежит пароль из БД и номер пользователя
$pass = $_POST['pass'];
if(strcmp($pass,$userinfo['pass'])==0){

// достаём все данные из БД
$sql="SELECT * FROM users WHERE login='$login'";
$res=mysql_query($sql);
$userinfo=mysql_fetch_array($res);// в этой переменной будет лежать вся информация о пользователе из БД
$time=time();
// устанавливаем куки для запоминания статуса пользователя, пароль шифруем
setcookie("login", $login, $time+1800);
setcookie("pass", md5($pass), $time+1800);
$state = 1;// статус, если 1, тогда пользователь авторизован
}
}
}
}

if($state != 1) {
?>
<form method="post" action="/index.php">
login: <input type="text" size="30" name="login"/><br />
pass: <input type="password" name="pass" size="30"/><br />
<
input type="submit" value="enter"/>
</
form>
<
br /><a href="/register.php">registration</a>
<?
} else {
echo 'You are logged in))!<br /> yours login: '.$userinfo["login"].'<br /><a href="/index.php?exit=y">exit</a>';
}
?>


вот как то так

Спустя 23 минуты, 48 секунд (17.10.2011 - 13:05) student80 написал(а):
а вот бд для комментов:
`content` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`text` text NOT NULL,
`date` datetime NOT NULL,
PRIMARY KEY (`id`)

Спустя 1 минута (17.10.2011 - 13:06) m4a1fox написал(а):
А в php теги оформи!

Спустя 2 минуты, 27 секунд (17.10.2011 - 13:09) student80 написал(а):
Цитата (m4a1fox @ 17.10.2011 - 10:06)
А в php теги оформи!

что именно , базу?

Спустя 9 минут, 38 секунд (17.10.2011 - 13:18) m4a1fox написал(а):
Желательно все!

Спустя 9 минут, 9 секунд (17.10.2011 - 13:28) student80 написал(а):
странно, вроде все в тегах <?....?>

Спустя 1 минута, 50 секунд (17.10.2011 - 13:29) redreem написал(а):
форум - это далеко не простенький пример smile.gif
начни для начала с гостевой книги, вопросов-ответов, новостных лент...

Спустя 5 минут, 28 секунд (17.10.2011 - 13:35) m4a1fox написал(а):
student80
Цитата
странно, вроде все в тегах <?....?>

Ты не понял! Сверху где пишется сообщения есть теги! Тебе надо нажать на кнопку с php потом поставить текст а потом опять на нее нажать!

Спустя 5 минут, 55 секунд (17.10.2011 - 13:41) student80 написал(а):
ааа, сори торможу)

Спустя 10 минут, 13 секунд (17.10.2011 - 13:51) Winston написал(а):
ТЫЦ. Качаем, и читаем 25-27 главы. Там описывается процесс создания форума.

Спустя 15 минут, 45 секунд (17.10.2011 - 14:07) student80 написал(а):
спасибо , сейчас прочту

Спустя 5 минут (17.10.2011 - 14:12) Winston написал(а):
Вот в аттаче исходиники этого форума, правда из первой части этой книги.

Спустя 10 минут, 30 секунд (17.10.2011 - 14:22) student80 написал(а):
спасибо

Спустя 25 минут, 44 секунды (17.10.2011 - 14:48) student80 написал(а):
хороший пример, но мне бы по проще сделать , что то типа гостевой но с моей регистрацией приведённой выше?

Спустя 44 секунды (17.10.2011 - 14:49) Winston написал(а):

Спустя 1 час, 19 минут, 30 секунд (17.10.2011 - 16:08) student80 написал(а):
перефразирую мой вопрос, подскажите как мне сделать дальше: пользователь зареганный заходит под своим логином и паролем, если они верны то он переходит на другую страницу где выводятся сообщения из базы и указан пользователь написавший их, и можно ввести свои и оставить коммент?

Спустя 6 минут, 4 секунды (17.10.2011 - 16:14) m4a1fox написал(а):
Логика по сути верна! Распиши себе пункты от 1 до n я например так делаю! И выполняй поочередно!

Спустя 1 час, 9 минут, 54 секунды (17.10.2011 - 17:24) student80 написал(а):
тогда вопросик по пункту n: как вывести сообщения с именем пользователя из базы? и выводить нужно в таблицу?
подскажите пожалуйста, а то что то я в сомнениях

Спустя 2 минуты, 1 секунда (17.10.2011 - 17:26) Winston написал(а):
Цитата (student80 @ 17.10.2011 - 17:24)
как вывести сообщения с именем пользователя из базы

Спустя 44 минуты, 3 секунды (17.10.2011 - 18:10) student80 написал(а):
спасибо большое)

Спустя 1 час, 31 минута, 54 секунды (17.10.2011 - 19:42) bodja написал(а):
Цитата
хороший пример, но мне бы по проще сделать , что то типа гостевой но с моей регистрацией приведённой выше?


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

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

Winston
исходники форума уж слишком стары wink.gif ,так уже давно никто не пишет
все на процедурке ,пытался найти хоть одну функцию-ненашел smile.gif
ну и с попыткой запуска таже история.

Спустя 2 часа, 14 минут, 32 секунды (17.10.2011 - 21:57) imbalance_hero написал(а):
student80
Может курсы типо Специалиста или Попова стоит посмотреть? Там как раз разбирается логика создания сообщений по темам.

Спустя 8 часов, 12 минут, 25 секунд (18.10.2011 - 06:09) student80 написал(а):
спасибо за всем за советы , пока что, это- задание для того что бы понять и научиться,

Спустя 12 минут, 58 секунд (18.10.2011 - 06:22) Invis1ble написал(а):
вопросы из разряда
Цитата
как вывести сообщения с именем пользователя из базы?

относятся к матчасти. Ты с SQL знаком? Если нет - то учи, если да - то непонятен смысл этого вопроса.

Цитата
выводить нужно в таблицу?

а это уже твое дело - хочешь - выводи в таблицу

Спустя 8 часов, 23 минуты, 14 секунд (18.10.2011 - 14:45) student80 написал(а):
вот что то подзастрял я не много)

есть база forum в ней 2е таблицы:


`users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`login` varchar(15) CHARACTER SET cp1251 NOT NULL,
`pass` text CHARACTER SET cp1251 NOT NULL,
`date` datetime NOT NULL,


и


`content` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`login` varchar(15) CHARACTER SET cp1251 NOT NULL,
`msg` text CHARACTER SET cp1251 NOT NULL,
`date` datetime NOT NULL,
PRIMARY KEY (`id`)


db.php

<?

$server="localhost";
$user="nik";
$pass="12345";
$db="forum";
$dtable="users";


if(!mysql_connect($server, $user, $pass))
die('error server MySql!');
elseif(!mysql_select_db($db))
die('error select db!');

?>


registr.php

<?
include('db.php');

if (($_POST['login']!='') ||
(
$_POST['pass1']!='') ||
(
$_POST['pass2']!=''))
{
$pass1 = $_POST['pass1'];
$pass2 = $_POST['pass2'];

if (strcmp($pass1, $pass2) == 0) {
$login = $_POST['login'];


$sql='SELECT * FROM users WHERE login='.$login;
if (!($res=mysql_query($sql)) || (mysql_num_rows($res) == 0)) {

$sql = 'INSERT INTO users(login, pass)
VALUES("'
.$login.'", "'.$pass1.'")';
if(mysql_query($sql)) {
echo 'User:'.$_POST['login'].' successfully registered! <a href="/index.php">The form to enter.';
} else {
echo 'When registering an error, <a href="/register.php">"try again"</a>.';
}
}
else echo "A user with this login already registered!";
} else echo 'The entered passwords do not match, <a href="/register.php">try again</a>.';
}
else {
?>
<form method='post' action='/register.php'>
login: <input type='text' size='30' name='login' /><br />
pass: <input type='password' name='pass1' size='30' /><br />
repeat pass: <input type='password' name='pass2' size='30' /><br />
<
input type='submit' value='registration' />
<?
}
?>
</form>


index.php

<?

include('db.php');
$userinfo='';
$state='0';
if( (isset($_COOKIE['login'])) & (isset($_COOKIE['pass'])) ) {
if (!isset($_GET['exit'])) {
$login=$_COOKIE['login'];
$pass=$_COOKIE['pass'];


$sql="SELECT id, pass FROM users WHERE login='$login'";
$res=mysql_query($sql);
if(mysql_num_rows($res)>0){
$userinfo = mysql_fetch_array($res);
if(strcmp($pass,md5($userinfo['pass'])) == 0) {


$sql="SELECT * FROM users WHERE login='$login'";
$res=mysql_query($sql);
$userinfo=mysql_fetch_array($res); // в этой переменной будет лежать вся информация о пользователе из БД
$time=time();

setcookie("login",$login,$time+1800);
setcookie("pass",$pass,$time+1800);
$state = 1;// статус, если 1, тогда пользователь авторизован
}
}
}
else {

setcookie("login");
setcookie("pass");
}
}

if($state != 1) {// если после проверки куков, оказалось, что пользователь не авторизован, то идем дальше
if( (isset($_POST['login'])) & (isset($_POST['pass'])) ){ // если пользователь ввёл логин и пароль
$login = $_POST['login'];

// проверяем наличие пользователя в БД и достаём оттуда пароль
$sql = "SELECT id, pass FROM users WHERE login='$login'";
$res = mysql_query($sql);
if(mysql_num_rows($res)>0) {// если пользователь есть в БД
$userinfo = mysql_fetch_array($res);// в этой переменной лежит пароль из БД и номер пользователя
$pass = $_POST['pass'];
if(strcmp($pass,$userinfo['pass'])==0){

// достаём все данные из БД
$sql="SELECT * FROM users WHERE login='$login'";
$res=mysql_query($sql);
$userinfo=mysql_fetch_array($res);// в этой переменной будет лежать вся информация о пользователе из БД
$time=time();
// устанавливаем куки для запоминания статуса пользователя, пароль шифруем
setcookie("login", $login, $time+1800);
setcookie("pass", md5($pass), $time+1800);
$state = 1;// статус, если 1, тогда пользователь авторизован
}
}
}
}

if($state != 1) {
?>
<form method="post" action="/index.php">
login: <input type="text" size="30" name="login"/><br />
pass: <input type="password" name="pass" size="30"/><br />
<
input type="submit" value="enter"/>
</
form>
<
br /><a href="/register.php">registration</a>
<?
}
else {

echo 'You are logged in))!<br /> yours login: '.$userinfo["login"].'<br /><a href="/index.php?exit=y">exit</a><p><br /><a href="/welcome.php?exit=y">Enter to forum!!!</a> ';
}
?>


welcome.php

<?php
echo '<div align="center" style="color:blue"><h3>WELCOME TO FORUM!!!</h3></div>';

include('db.php');






$msg= $_POST['msg'];


$query = mysql_query("INSERT INTO content(id, login, msg, date) VALUES ('..','.$login.', '.$msg.','..')");

if(mysql_query($query))
{
echo ' successfully add msg!';
}
//вывод


mysql_query ("SET NAMES utf8");
mysql_query ("set character_set_client='utf8'");
mysql_query ("set character_set_results='utf8'");
mysql_query ("set collation_connection='utf8_general_ci'");

// Формируем строку для запроса к нашей базе данных

$sql = "SELECT * FROM `content`";


// Скармливаем наш запрос MySQL
$result = mysql_query($sql) or die(mysql_error() ."<br/>". $sql);

$sql1 = "SELECT * FROM `users`";



// Рисуем табличку
$table = "<table border=1 width=100% align=center>\n";

while ($row = mysql_fetch_assoc($result))
{

$table .= "<tr>\n";

$table .= "<td>".$row['id']."</td>\n";
$table .= "<td>".$row['login']."</td>\n";
$table .= "<td>".$row['msg']."</td>\n";
$table .= "<td>".$row['date']."</td>\n";
$table .= "</tr>\n";
}

$table .= "</table>\n";

// Выводим заполненую таблицу на экран
echo $table;


?>
<br>
<
form align="center" method="post" action="/welcome.php">
<
p>"ENTER your msg":</p>
<
textarea name="msg" cols="30" rows="5"></textarea><br />
<
input type="submit" value="enter"/>
</
form>


нужно что бы логин вошедшего пользователя заносился в базу в таблицу "content" и выводился вместе с его сообщением в таблице на welcome.php

Спустя 6 минут, 57 секунд (18.10.2011 - 14:52) student80 написал(а):
если есть ошибки, а я думаю они есть , подскажите что подправить)

Спустя 24 минуты, 53 секунды (18.10.2011 - 15:17) m4a1fox написал(а):
student80
Цитата
нужно что бы логин вошедшего пользователя заносился в базу в таблицу "content" и выводился вместе с его сообщением в таблице на welcome.php

Твои предположение - как реализовать это?

Спустя 42 минуты, 50 секунд (18.10.2011 - 16:00) student80 написал(а):
к сожалению на этом я и застрял(

Спустя 20 минут, 9 секунд (18.10.2011 - 16:20) imbalance_hero написал(а):
student80
Заносятся в БД через INSERT, я даже не увидел твоей попытки занести.

Спустя 12 минут, 17 секунд (18.10.2011 - 16:32) student80 написал(а):
к сожалению на этом я и застрял(

Спустя 1 минута, 54 секунды (18.10.2011 - 16:34) m4a1fox написал(а):
insert знаешь что такое?

Спустя 5 минут, 6 секунд (18.10.2011 - 16:39) Winston написал(а):
Свернутый текст
Цитата (m4a1fox @ 18.10.2011 - 16:34)
insert знаешь что такое?

google translatе говорит что это значит - "Вставить" biggrin.gif

Спустя 7 минут, 26 секунд (18.10.2011 - 16:47) student80 написал(а):
конечно знаю вот как применить его к моему скрипту?

Спустя 1 минута, 50 секунд (18.10.2011 - 16:49) student80 написал(а):
ну это то понятно что "вставить" а вот как именно того юзера который написал сообщение?

Спустя 1 минута, 17 секунд (18.10.2011 - 16:50) imbalance_hero написал(а):
student80
В сессии хранить id юзера, который сейчас на сайте, при добавлении в БД, берёшь значение из сессии.

Спустя 5 минут, 25 секунд (18.10.2011 - 16:55) student80 написал(а):
вот по порядку:
зарегался-
перешел к форме входа -ввел логин/пароль-
на страницу ввода /вывода сообщений -
тут написал сообщение и оно вывелось в табличке выше с логином и датой

Спустя 2 минуты, 52 секунды (18.10.2011 - 16:58) student80 написал(а):
Цитата (imbalance_hero @ 18.10.2011 - 13:50)
student80
В сессии хранить id юзера, который сейчас на сайте, при добавлении в БД, берёшь значение из сессии.

не подскажите где на примере глянуть?

Спустя 2 минуты, 10 секунд (18.10.2011 - 17:00) Winston написал(а):

Спустя 2 минуты, 2 секунды (18.10.2011 - 17:02) student80 написал(а):
и снова спасибо))), изучу

Спустя 6 часов, 3 минуты, 2 секунды (18.10.2011 - 23:06) Invis1ble написал(а):
Цитата
нужно что бы логин вошедшего пользователя заносился в базу в таблицу "content" и выводился вместе с его сообщением в таблице на welcome.php

А зачем? Записывай id юзера в content при добавлении сообщения, иначе смысл нормализации пропадает.
Цитата
если есть ошибки, а я думаю они есть , подскажите что подправить

лучший помошник в этом деле - сам интерпретатор. Вставляешь в начало всех скриптов
error_reporting(E_ALL | E_STRICT);

и любуешься на 100500 ошибок, варнингов и нотайсов. Потом методично начинаешь их исправлять.

Спустя 17 минут, 17 секунд (18.10.2011 - 23:23) imbalance_hero написал(а):
Invis1ble
А никто не говорил, что логин не может быть идентификатором юзера. Для этого не обязательно связку делать по фантазируемой цифре, можно хранить логин как ключ.

Спустя 3 минуты, 5 секунд (18.10.2011 - 23:26) Invis1ble написал(а):
Цитата
А никто не говорил, что логин не может быть идентификатором юзера.

верно подмечено, я тоже этого не говорил. Только overhead будет присутствовать в таком случае.

Спустя 13 дней, 8 часов, 50 минут, 51 секунда (2.11.2011 - 08:17) student80 написал(а):
спс

Спустя 3 минуты, 1 секунда (2.11.2011 - 08:20) student80 написал(а):
осталась одна проблемка - ни как не могу победить Повторную отправку данных из формы при обновлении страницы, уже всё везде перечитал-ни чего не помогло(, может подскажите ?

Спустя 12 минут, 47 секунд (2.11.2011 - 08:33) imbalance_hero написал(а):
student80
После отправки - делай редирект на другую страницу, тем самым очистишь POST глобальные переменные.

Спустя 8 минут, 15 секунд (2.11.2011 - 08:41) student80 написал(а):
надо что бы на этой же странице сразу выводилось

Спустя 3 минуты, 57 секунд (2.11.2011 - 08:45) imbalance_hero написал(а):
student80
Делай редирект страницы саму на себя. Человек этого не заметит, потому что у него будет всё равно открытие новое страницы по форме!

Спустя 6 минут, 55 секунд (2.11.2011 - 08:52) student80 написал(а):
пробовал- не плучилось, может я чего то не понимаю вобщем вот фрагмент скрипта подскажите куда в него вставить редирект?



$msg= $_POST['msg'];

if (empty($msg))

{
// если поле пустое, снова просим ввести

}
else
{


$format = "d.m.y H:i";
$date= date($format);
$query = mysql_query("INSERT INTO content(id, login, msg, date) VALUES ('$id','$login', '$msg','$date')");
}
//вывод


mysql_query ("SET NAMES utf8");
mysql_query ("set character_set_client='utf8'");
mysql_query ("set character_set_results='utf8'");
mysql_query ("set collation_connection='utf8_general_ci'");

// Формируем строку для запроса к нашей базе данных


$sql = "SELECT * FROM `content` ORDER BY date DESC LIMIT 20";

// Скармливаем наш запрос MySQL

$result = mysql_query($sql) or die(mysql_error() ."<br/>". $sql);


// Рисуем табличку
$table = "<table border=1 width=100% align=center>\n";

while ($row = mysql_fetch_assoc($result))
{

$table .= "<tr>\n";

$table .= "<td width=3%>".$row['id']."</td>\n";
$table .= "<td width=7%>".$row['login']."</td>\n";
$table .= "<td width=80%>".$row['msg']."</td>\n";
$table .= "<td width=10%>".$row['date']."</td>\n";
$table .= "</tr>\n";
}

$table .= "</table>\n";

// Выводим заполненую таблицу на экран
?>
<DIV id=content>
<?

echo $table;
?>
</div>

<
link rel="stylesheet" type="text/css" href="mystile.css">
<
DIV id=reg2>
<
form align="center" method="post" action="/index.php">
<
p>"ENTER your msg":</p>
<
textarea name="msg" cols="45" rows="7"></textarea><br />
<
input type="submit" value="enter"/>
</
form>
</
div>
<?
}
?>

</body>
</
html>




Спустя 4 минуты, 6 секунд (2.11.2011 - 08:56) imbalance_hero написал(а):
student80
Сразу после добавления записи в БД, после insert делаешь редирект через header("Location: url");

Спустя 28 минут, 14 секунд (2.11.2011 - 09:24) student80 написал(а):
к сожалению не помогло(

Спустя 4 минуты, 12 секунд (2.11.2011 - 09:28) imbalance_hero написал(а):
student80
Что именно не помогло? Не идёт редиректа? Пишется ошибка? Куда ты вписал, покажи полностью код страницы!

Спустя 3 минуты, 21 секунда (2.11.2011 - 09:32) student80 написал(а):
всё равно при обновлении повторно вводится в базу,

на этой странице у меня еще авторизация юзеров,




<?
include('db2.php');// подключение к серверу MySql и выбор БД


$userinfo='';
$state='0';
if( (isset($_COOKIE['login'])) & (isset($_COOKIE['pass'])) ) {// если в куках лежит логин и зашифрованый пароля
if (!isset($_GET['exit'])) {// если кнопка выход не была нажата
$login=$_COOKIE['login'];
$pass=$_COOKIE['pass'];

// проверяем наличие пользователя в БД и достаём оттуда пароль
$sql="SELECT id, pass FROM users WHERE login='$login'";
$res=mysql_query($sql);
if(mysql_num_rows($res)>0){// если пользователь есть в БД
$userinfo = mysql_fetch_array($res);// в этой переменной лежит пароль из БД
if(strcmp($pass,md5($userinfo['pass'])) == 0) { //проверяем схожесть пароля из БД с паролем из куков

// достаём все данные из БД

$sql="SELECT * FROM users WHERE login='$login'";
$res=mysql_query($sql);
$userinfo=mysql_fetch_array($res); // в этой переменной будет лежать вся информация о пользователе из БД
$time=time();
// устанавливаем куки для запоминания статуса пользователя
setcookie("login",$login,$time+1800);
setcookie("pass",$pass,$time+1800);
$state = 1;// статус, если 1, тогда пользователь авторизован
}
}
}
else {
//обнуляем куки, если была нажата кнопка выход
setcookie("login");
setcookie("pass");
}
}

if($state != 1) {// если после проверки куков, оказалось, что пользователь не авторизован, то идем дальше
if( (isset($_POST['login'])) & (isset($_POST['pass'])) ){ // если пользователь ввёл логин и пароль
$login = $_POST['login'];

// проверяем наличие пользователя в БД и достаём оттуда пароль
$sql = "SELECT id, pass FROM users WHERE login='$login'";
$res = mysql_query($sql);
if(mysql_num_rows($res)>0) {// если пользователь есть в БД
$userinfo = mysql_fetch_array($res);// в этой переменной лежит пароль из БД и номер пользователя
$pass = $_POST['pass'];
if(strcmp($pass,$userinfo['pass'])==0){

// достаём все данные из БД
$sql="SELECT * FROM users WHERE login='$login'";
$res=mysql_query($sql);
$userinfo=mysql_fetch_array($res);// в этой переменной будет лежать вся информация о пользователе из БД
$time=time();
// устанавливаем куки для запоминания статуса пользователя, пароль шифруем
setcookie("login", $login, $time+1800);
setcookie("pass", md5($pass), $time+1800);
$state = 1;// статус, если 1, тогда пользователь авторизован
}
}
}
}

if($state != 1) {
?>
<html>
<
head>
<
title></title>

<
link rel="stylesheet" type="text/css" href="mystile.css">
</
head>
<
body>
<
DIV id=reg>
<
p>Enter your Login and Password</p>


<
form method="post" action="/index.php">
LOGIN: <input type="text" size="30" name="login"/><br />
PASS: <input type="password" name="pass" size="30"/><br />
<
input type="submit" value="Enter"/>
</
form>
<
br /><a href="/register2.php">registration</a>
</
div>
<?
} else {
?>

<DIV id=menu>

<
H2>
<?
echo 'You are logged in!<br /> Your Login: <div style="color:blue"><h3>'.$userinfo["login"].'</h3></div><a href="/index.php?exit=y">exit</a></br>';
echo date( " d.m.y H:i" );
?>
</H2>
</
DIV>
<?
//////////////////////////////////////////////////////////////////////////////////
echo '<div align="center" style="color:blue"><h3>WELCOME TO FORUM!!!</h3></div></br>';

//проверяем введено ли сообщение




///////////////////////////////////

$msg= $_POST['msg'];

if (empty($msg))

{
// если поле пустое, снова просим ввести

}
else
{


$format = "d.m.y H:i";
$date= date($format);
$query = mysql_query("INSERT INTO content(id, login, msg, date) VALUES ('$id','$login', '$msg','$date')");
header("Location: index.php");
}
//вывод


mysql_query ("SET NAMES utf8");
mysql_query ("set character_set_client='utf8'");
mysql_query ("set character_set_results='utf8'");
mysql_query ("set collation_connection='utf8_general_ci'");

// Формируем строку для запроса к нашей базе данных


$sql = "SELECT * FROM `content` ORDER BY date DESC LIMIT 20";

// Скармливаем наш запрос MySQL

$result = mysql_query($sql) or die(mysql_error() ."<br/>". $sql);


// Рисуем табличку
$table = "<table border=1 width=100% align=center>\n";

while ($row = mysql_fetch_assoc($result))
{

$table .= "<tr>\n";

$table .= "<td width=3%>".$row['id']."</td>\n";
$table .= "<td width=7%>".$row['login']."</td>\n";
$table .= "<td width=80%>".$row['msg']."</td>\n";
$table .= "<td width=10%>".$row['date']."</td>\n";
$table .= "</tr>\n";
}

$table .= "</table>\n";

// Выводим заполненую таблицу на экран
?>
<DIV id=content>
<?

echo $table;
?>
</div>

<
link rel="stylesheet" type="text/css" href="mystile.css">
<
DIV id=reg2>
<
form align="center" method="post" action="/index.php">
<
p>"ENTER your msg":</p>
<
textarea name="msg" cols="45" rows="7"></textarea><br />
<
input type="submit" value="enter"/>
</
form>
</
div>
<?
}
?>

</body>
</
html>

Спустя 5 минут, 9 секунд (2.11.2011 - 09:37) imbalance_hero написал(а):
header - это заголовок! Должен быть ДО любого вывода информации на экран(!!!).

В самом начале скрипта введи вывод ошибок:
error_reporting(E_ALL);

Будет тебе показываться, где и что ты не так пишешь.

Спустя 1 минута, 36 секунд (2.11.2011 - 09:38) student80 написал(а):
спс , попробую

Спустя 13 минут, 34 секунды (2.11.2011 - 09:52) student80 написал(а):
Notice: Undefined index: msg in Z:\home\forum2.local\www\index.php on line 106
выдал такую ошибку - эта строка--


$msg= $_POST['msg'];

Спустя 4 минуты, 1 секунда (2.11.2011 - 09:56) imbalance_hero написал(а):
student80
Неопределённая переменная $_POST['msg'], то есть КОГДА отправляешь данные, она есть, а когда не отправляешь - её нет, вот и беда такая!
Зачем тебе $msg ? Проверяй сразу на (!empty($_POST['msg']))

Спустя 10 минут, 49 секунд (2.11.2011 - 10:07) student80 написал(а):
а как без переменной $msg, добавить $_POST['msg'] сюда?-

$query = mysql_query("INSERT INTO content(id, login, msg, date) VALUES ('$id','$login', '$msg','$date')");

Спустя 6 минут, 24 секунды (2.11.2011 - 10:13) imbalance_hero написал(а):
student80
Может быть заменить $msg на $_POST['msg'] ? smile.gif

Спустя 2 минуты, 9 секунд (2.11.2011 - 10:15) student80 написал(а):
и это спасёт от повторной формы?

Спустя 3 минуты, 49 секунд (2.11.2011 - 10:19) imbalance_hero написал(а):
Создаёшь чистый белый лист. Делаешь на одной странице форму + добавление, кода всё это займет в строчек 25-30. Тестируешь. Когда всё получится, тогда реализуешь в нормальном проекте.

Тебе поможет редирект, который, вроде, мы сделать должны были.

Спустя 1 минута, 18 секунд (2.11.2011 - 10:20) student80 написал(а):
спасибо ещё раз, начну сначала тогда smile.gif

Спустя 33 минуты, 7 секунд (2.11.2011 - 10:53) student80 написал(а):
да, конечно в варианте без авторизации на этой же странице, всё работает, но к моему варианту ни как не могу применить
header("Location: index.php");

Спустя 8 минут, 49 секунд (2.11.2011 - 11:02) imbalance_hero написал(а):
Обработку данных вверх поднимай.

Спустя 19 минут, 31 секунда (2.11.2011 - 11:22) programmer-php написал(а):
Я всегда начинаю с регистрации,авторизации и страницы пользователей.Если хочешь могу написать тебе код с обьяснением за небольшую плату.Заявку пиши в programmer-php@mail.ru

Спустя 6 минут, 36 секунд (2.11.2011 - 11:28) student80 написал(а):
спс , уже всё получилось- вынес обработчик на другую страницу!

Спустя 14 минут, 22 секунды (2.11.2011 - 11:43) programmer-php написал(а):
Ок.Ну на всякий сохраний мой майл,помогу чем смогу,научу тому,что знаю сам (programmer-php@mail.ru)..Я обычно с 10 до 12 дня и с 10вечера до 12 в майл агенте..Если что-то сложное,то беру не большую оплату..с 2нулями максимум:)..Потому,что таким же был.. wink.gif

Спустя 2 минуты, 23 секунды (2.11.2011 - 11:45) imbalance_hero написал(а):
student80
Достаточно было поднять в начало страницы. Ты неправильно понимаешь логику: сначала обработка данных - потом вывод данных. Загляни на irbis-team.com , почитай про MVC
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.