Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: 6460
Последний выпуск: 19.06.2015

Я делаю чат, сделал дизайн, не могу сделать вход, помогите

87K
18 февраля 2015 года
Ерлан Агзам
13 / / 18.02.2015
Я делаю чат, сделал дизайн, не могу сделать вход.

Я делал с testreg, save_user, bd и index.

Но в конце выходили ошибки, с строками. Решил проблему, но потом при попытке входа, он говорил, что пароль неверный. Как можно сделать , что бы пользователь входил в чат, только вписав Логин. Без заморочек. Можно подключить к SQL.

P.S. Я тестирую на Denwer'e. Помогите пожалуйста :)
4
18 февраля 2015 года
mike
3.7K / / 01.10.2002
Что такое testreg, save_user, bd и index?
87K
18 февраля 2015 года
Ерлан Агзам
13 / / 18.02.2015
index.html - ну как бы это ясно надеюсь
testreg.php- вход выполняет
bd.php - подключение к mysql
save_user.php - сохраняет людей в mysql
87K
18 февраля 2015 года
Ерлан Агзам
13 / / 18.02.2015
но я хочу что бы было без sql , просто подключался хоть каким именем.. это же чат
4
18 февраля 2015 года
mike
3.7K / / 01.10.2002
Цитата: Ерлан Агзам
но я хочу что бы было без sql , просто подключался хоть каким именем.. это же чат

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

Ну и без содержимого файлов вам никто ничего не подскажет. Ну может телепаты, но они все в отпуске.

1.8K
18 февраля 2015 года
Kuzya
184 / / 19.03.2008
Нельзя, вот так вот взять и сделать чат!!!
87K
18 февраля 2015 года
Ерлан Агзам
13 / / 18.02.2015
Цитата: mike
Цитата: Ерлан Агзам
но я хочу что бы было без sql , просто подключался хоть каким именем.. это же чат

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

Ну и без содержимого файлов вам никто ничего не подскажет. Ну может телепаты, но они все в отпуске.

Вот примерно я делал, без sql сейчас.

Цитата:
<form>
<p>
<label>Ваш логин:<br></label>
<input name="login" type="text" size="15" maxlength="15">
</p>
<input type="submit" name="submit" value="Войти">
</form>

Я знаю что можно как то с помощью
<form action="chat.cgi" method="get">
А дальше кода вообще не понимаю что писать.. :C Помогите пожалуйста

87K
18 февраля 2015 года
Ерлан Агзам
13 / / 18.02.2015
HTML я хорошо знаю, а вот PHP. Начинаю учить. Все посоветовали с простого чата. Дизайн у меня готов, а вот с кодом...
49K
18 февраля 2015 года
Scampada
12 / / 19.06.2011
А вы точно над нами не прикалываетесь?

Если нет, то могу предположить, что вам можно обойтись переменными сессии... Без SQL, в самом деле. Если все, что вам нужно -- это пользовательские никнеймы, которые пользователь сможет произвольно менять.
4
18 февраля 2015 года
mike
3.7K / / 01.10.2002
То что вы прислали, это исключительно отображение полей ввода логина и пароля. Их нужно еще передать на сервер, там обработать и вернуть ответ клиенту.

То что вы написали лишь вершина айсберга. Считайте что вы еще ничего не сделали, просто нарисовали обложку книги. Теперь предстоит написать тысячи страниц содержания.
 
Код:
<form action="chat.cgi" method="get">
здесь
  • chat.cgi - программа (в вашем случае, скорее всего, скрипт) которая запускается на сервере, получает логин и пароль, сравнивает их с какими-то образцами и выдает ответ. Вот эту программу теперь и предстоит написать.
  • GET - метод, которые логин и пароль будут передаваться серверу. От метода зависит и способ передачи этих параметров вашей программе на сервере. Обычно при передаче авторизационных данных используют метод POST, так как данные переданные в методом GET видны в адресной строке браузера.
Чат, это целый набор таких программ. Одна авторизует, создает сессию, другая принимает сообщения, третья отображает их и т.п.
49K
18 февраля 2015 года
Scampada
12 / / 19.06.2011
Цитата:
chat.cgi - программа (в вашем случае, скорее всего, скрипт) которая запускается на сервере, получает логин и пароль, сравнивает их с какими-то образцами и выдает ответ. Вот эту программу теперь и предстоит написать.

Только для чата создавать cgi-скрипт нет особого смысла, достаточно обычного php. Тем более для такого простенького чата, как предполагается.

87K
19 февраля 2015 года
Ерлан Агзам
13 / / 18.02.2015
Цитата: Scampada
Только для чата создавать cgi-скрипт нет особого смысла, достаточно обычного php. Тем более для такого простенького чата, как предполагается.

Я посмотрел в интернете, и тоже это понял, спасибо вам.

Вот то, что я смог написать, php кодом. и html

Код:
<?php
session_start();

$db=mysql_connect('localhost', 'root', '');
mysql_select_db('progtest', $db);
$res=mysql_query("SELECT * FROM client WHERE nick='".$_SESSION['name']."'
AND password='"
.$_SESSION['pword']."'", $db);

if(mysql_num_rows($res)!=1)

{ //такого пользователя нет
header('Location: autorize.php');
echo "Неправильный логин или пароль!";
else
{ //пользователь найден, можем выводить все что нам надо
$r = mysql_fetch_assoc($res);
$_SESSION['name'] = $r['name'];
header('Location: /http://chat/index.html');
}


mysql_close();
?>
А потом, вот где в чате то, что пишеться под Users , надо что бы выводило логин его.

С этим вышла проблемка..

Вот примерный мой код. Знаю, что бомжатский..
 
Код:
<?php
session_start();
if(isset($_SESSION['name']))
{
print "Твой ник: ".$_SESSION['name']. "<br>";
}
?>
Можете помочь, с этим? И еще, как сделать, что бы при вводе текста в форму. При нажатии Enter он отправлял это в другую ( ну понимаете, да? Чат же., как это происходит, в php коде я не понял тоже)
87K
19 февраля 2015 года
Ерлан Агзам
13 / / 18.02.2015
У меня при попытке входа, впускает, но потом пароль и логин не запоминает в базу
Я не знаю как починить..
87K
19 февраля 2015 года
Ерлан Агзам
13 / / 18.02.2015
Чувствую что то тут не так.. именно тут
Код:
<div class="login">
<form id="login-form" action="/chat.html" method="post">
<div style="display:none"><input type="hidden" value="71a027069372d052010edb26f54e5ea24d3e3769" name="badge" /></div>                      
<div><label for="LoginForm_username" class="required">Введите логин</label></div>
<input class="login_input" name="$_SESSION['name']" id="LoginForm_username" type="text" /> 
<label for="LoginForm_username" class="required">Введите пароль</label>
<input class="login_input" name="$_SESSION['pword']" id="LoginForm_username" type="text" />                                                                                                        
<div class="enter">
<a href="#" id="yt0">Войти</a></div>
</form>            
</div>
1.8K
19 февраля 2015 года
Kuzya
184 / / 19.03.2008
Чувствую что то тут не так.. именно тут
Код:
<div class="login">
<form id="login-form" action="/chat.html" method="post">
<div style="display:none"><input type="hidden" value="71a027069372d052010edb26f54e5ea24d3e3769" name="badge" /></div>                      
<div><label for="LoginForm_username" class="required">Введите логин</label></div>
<input class="login_input" name="$_SESSION['name']" id="LoginForm_username" type="text" /> 
<label for="LoginForm_username" class="required">Введите пароль</label>
<input class="login_input" name="$_SESSION['pword']" id="LoginForm_username" type="text" />                                                                                                        
<div class="enter">
<a href="#" id="yt0">Войти</a></div>
</form>            
</div>
где submit?
4
19 февраля 2015 года
mike
3.7K / / 01.10.2002
Может начать с чего то более простого? Hello world например?

По порядку.
 
Код:
<div class="login">
<form id="login-form" action="/chat.html" method="post">
chat.html - такое возможно, если файлы с расширением HTML ваш сервер тоже интерпретрует как PHP скрипт. Но что-то я в этом сомневаюсь. Назовем его, например, login.php. Тогда код будет выглядеть так:
 
Код:
<div class="login">
<form id="login-form" action="./login.php" method="post">
Что это за дважды скрытое поле? Зачем оно?
 
Код:
<div style="display:none"><input type="hidden" value="71a027069372d052010edb26f54e5ea24d3e3769" name="badge" /></div>

 
Код:
<input class="login_input" name="$_SESSION['name']" id="LoginForm_username" type="text" />
Атрибут name задает имя параметра, а не его значение. Значение задает атрибут value. Для начала можно сделать так:
 
Код:
<input class="login_input" name="login" id="LoginForm_username" type="text" value="" />
Тоже самое с паролем.

Чтобы пользователь мог отправить данные формы на сервер нужна еще и кнопка "Войти". Например такая:
 
Код:
<input type="submit" value="Войти" />
Теперь PHP скрипт на стороне сервера. Как я писал выше, называется он login.php. Коментарии по ходу:
Код:
// Старт сессии. В принципе может быт.
session_start();

// Подключение к базе данных. У вас ведь есть Mysql?
$db=mysql_connect('localhost', 'root', '');

// Что будет если подключение не будет установлено? Тут нужна обработка ошибок.

// Выбор нужной базы данных. Вы ведь создали в MySql базу данных progtest ?
mysql_select_db('progtest', $db);

// Опять же, тут не хватает обработки ошибок

// Это что за бред??
//$res=mysql_query("SELECT * FROM client WHERE nick='".$_SESSION['name']."'
//AND password='".$_SESSION['pword']."'", $db);

// Должно быть как то так:
// У вас ведь есть таблица client со списком логинов и паролей?
$res=mysql_query("SELECT * FROM client WHERE nick='".mysql_real_escape_string($_POST["login"])."'
AND password='"
.mysql_real_escape_string($_POST["pword"])."'", $db);

// Неправильно. А если два пользователя?
if(mysql_num_rows($res)!=1) {
    //такого пользователя нет
    // Перекидываем на autorize.php. Там есть сообщение об ошибке?
    header('Location: autorize.php');

    // А это зачем, если мы уже перекинули пользователя на другу страницу?
    echo "Неправильный логин или пароль!";
    }
else {
    //пользователь найден, можем выводить все что нам надо
    $r = mysql_fetch_assoc($res);
    $_SESSION['name'] = $r['name'];
    header('Location: /http://chat/index.html');
    }

mysql_close();
Конечно все это бред и так авторизацию не делают. Стандартный алгоритм примерно такой:
  1. Получаем логин и пароль от клиента;
  2. Сравниваем его с базой данных, в которой пароль хранится в зашифрованном виде с использованием одностороннего шифрования;
  3. Если логин и пароль введен правильно, то создаем сессию которую будем идентифицировать по уникальному ключу. Сохраняем сессию или в базе данных или в файлах или еще где-то.
  4. Уникальный ключ сессии передаем обратно клиенту.
  5. При последующем обращении сравниваем ключ сессии с теми ключами что есть в нашей базе данных/файлах/ну или где мы там сессии храним.
  6. Если ключ сессии найден, то получаем по нему основные данные авторизованного пользователя.
49K
19 февраля 2015 года
Scampada
12 / / 19.06.2011
Говорили, что вам не обязателен вход с паролем и работа с БД, а сами наваяли именно это. Для того, что вы говорили, достаточно будет, если php будет просто принтить ник, хранящийся в текущей сессии.
Цитата:
У меня при попытке входа, впускает, но потом пароль и логин не запоминает в базу

А у вас нигде и нет попыток записи в БД. Или вы имели в виду, что на время сессии не запоминает пользователя?

49K
19 февраля 2015 года
Scampada
12 / / 19.06.2011
Цитата:
Можете помочь, с этим? И еще, как сделать, что бы при вводе текста в форму. При нажатии Enter он отправлял это в другую ( ну понимаете, да? Чат же., как это происходит, в php коде я не понял тоже)

Это на js уже писать будете ajax-запросы к серверу на обновление окна (контейнера) чата. После отправки сообщения сразу запрос на обновление содержимого контейнера чата, чтобы отправленное сообщение показалось там сразу, и периодически, вне зависимости от отправки сообщений.

87K
19 февраля 2015 года
Ерлан Агзам
13 / / 18.02.2015
Цитата: mike

Конечно все это бред и так авторизацию не делают. Стандартный алгоритм примерно такой:
  1. Получаем логин и пароль от клиента;
  2. Сравниваем его с базой данных, в которой пароль хранится в зашифрованном виде с использованием одностороннего шифрования;
  3. Если логин и пароль введен правильно, то создаем сессию которую будем идентифицировать по уникальному ключу. Сохраняем сессию или в базе данных или в файлах или еще где-то.
  4. Уникальный ключ сессии передаем обратно клиенту.
  5. При последующем обращении сравниваем ключ сессии с теми ключами что есть в нашей базе данных/файлах/ну или где мы там сессии храним.
  6. Если ключ сессии найден, то получаем по нему основные данные авторизованного пользователя.

Cпасибо. Я по этому списку, немного сделал. Я сделал регистрацию (с паролем и логином) в MySQL, потом я вот прописал код на вход..

Я делал без css, и там вход работал, но выдавал просто так показывал ошибку, про session_start, хотя всё работает, просто ошибка в виде текст. Не знаю почему. А когда я попробовал вставить этот код в первый, с CSS который. Он регистрирует в базу, а вход не делает.
Может в коде , что то не так?

Цитата:
<?php
//Если пришли данные на обработку
if(isset($_POST['login']) && isset($_POST['password']))
{
//Подключаемся к базе данных
include("bd.php");

//Записываем все в переменные
$login=htmlspecialchars(trim($_POST['login']));
$password=htmlspecialchars(trim($_POST['password']));

//Достаем из таблицы инфу о пользователе по логину
$res=mysql_query("SELECT * FROM `users` WHERE `login`='$login' ");
$data=mysql_fetch_array($res);

//Если такого нет, то пишем что нет
if(empty($data['login']))
{
die("Такого пользователя не существует!");
}
//Если пароли не совпадают
if($password!=$data['password'])
{
die("Введенный пароль неверен!");
}
//Запускаем пользователю сессию
session_start();

//Записываем в переменные login и id
$_SESSION['login']=$data['login'];
$_SESSION['id']=$data['id'];
//Переадресовываем на главную
header("location: chat.html");
}

?>

87K
19 февраля 2015 года
Ерлан Агзам
13 / / 18.02.2015
При попытке войти, пустая страница. С ссылкой http://zxc/login.php?login=root&amp;password=test
87K
20 февраля 2015 года
Ерлан Агзам
13 / / 18.02.2015
А всё, спасибо, разобрался. С входом, всё нормально. Входит, потом при попытке отправить текст, отправляет.
Вот я задумался, над списком Users. Там должны как я понял выводиться люди. Мне стоит написать тогда новый online.php , который будет инклудиться в index? Это ладно, я смогу сделать, а вот, что бы показывали онлайн. Я не сильно понял какой будет код.. Надо создавать в таблице, еще одну строку, с названием online. И потом каждый 30 секунд, проверка, пользователь еще в сети или нет, если нет, то в таблице строка онлайн , меняется на 0, а если он онлайн, то 1.. true и false типо... как я понял. А затем вывод..
Как это можно реализовать, помогите с кодом.
87K
20 февраля 2015 года
Ерлан Агзам
13 / / 18.02.2015
CREATE TABLE `users` (
`id` int(5) NOT NULL auto_increment,
`login` varchar(200) NOT NULL,
'password` varchar(1000) NOT NULL,
`online` int(5) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=3 ;

Потом в коде index.php , когда пользователь авторизуется, надо писать, что online будет обновляться так скажем..
// Я задал сессию, которая обновляется 30 секунд каждые.
<?php
$_SESSION['ID'] = $row['id'];
$_SESSION['ONLINE'] = strtotime('+30 sec');
?>

Дальше как я понял надо писать код, где и будет считываться, он онлайн или нет.. Я не знаю как проверить это.

Вот человек написал, что то в чат и значит онлайн? А как же тогда, те кто тупо читают?!

Помогите разобраться.
87K
20 февраля 2015 года
Ерлан Агзам
13 / / 18.02.2015
Если, что у меня форма для вывода пользователей, выглядит вот так

<div class="users" style="width: 193px;">
<div class="role-user">
<p class="title-user">Users</p>
<ul>
</ul>
<ul>
</ul>
</div>
</div>
49K
20 февраля 2015 года
Scampada
12 / / 19.06.2011
Цитата:
Дальше как я понял надо писать код, где и будет считываться, он онлайн или нет.. Я не знаю как проверить это.

Вот человек написал, что то в чат и значит онлайн? А как же тогда, те кто тупо читают?!

Можно на стороне клиента реализовать js-скрипт, который каждую минуту будет посылать безответный запрос серверу о том, что он активен.
На стороне сервера сверять наличие "маячковых" запросов, только не с БД, а с переменной сессии. Если запрос пришел, проверяется: выставлена ли переменная _SESSION['online'] в true? Если нет, то переменная устанавливается и соответствующее изменение заносится в БД вместе со временем последнего сигнала (в TIMEDATE-поле online-time). Если да, то никаких действий не производится.
Когда скрипт на стороне участника чата опрашивает сервер на предмет обновления содержимого чата и списка участников, можно с определенной периодичностью опрашивать БД по выборке всех пользователей с состоянием online, сравнивая текущее время и последнее время, когда от них приходил сигнал. Если разница во времени больше 2-3 минут, то участник переводится в неактивные.
Либо можно повесить это не на запрос обновления, а единичным скриптом, зацикленно выполняющимся спустя короткие промежутки времени, тогда нагрузка будет меньше.

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог