Я эту проблему уже незнаю как и решить
Мне нужно вот что. У меня на тестовом сайте есть формочка на вход. Так вот я ввожу имя и пароль и нажимаю войти потом там выводит Привет и т.д. Так вот мне нужно чтоб и мне выводило имя группы. У меня в таблице есть поле с паролем майлом паролем и т.д. и также поле где указывается номер(id) группы. Все группы хранятся в другой таблице. Так вот я пробовал сделать так. Когда при нажимании на кнопку войти идет запрос в базу где вытаскивает имя пароль и т.д. и также вытаскивает номер группы, а потом же делаю запрос в другую таблицу и вытаскиваю группу где id = номеру группы и потом все в сессии записываю, а потом вписываю в форму где выводи Привет и т.д.(после удачноного входа) так вот все имя маил выводит а вот группу нет при этом ошибок не выводит.Посмотрите код может чтонибудь заметете не то
вот сама форма
<?php
// вся процедура работает на сессиях. Именно в ней хранятся данные пользователя, пока он находится на сайте. Очень важно запустить их в самом начале странички!!!
include ("system/data/db.php");// файл bd.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь
if (isset($_COOKIE['auto']) and isset($_COOKIE['login']) and isset($_COOKIE['password']) and isset($_COOKIE['group']))
{//если есть необходимые переменные
if ($_COOKIE['auto'] == 'yes') { // если пользователь желает входить автоматически, то запускаем сессии
$_SESSION['password']=strrev(md5($_COOKIE['password']))."b3p6f"; //в куках пароль был не зашифрованный, а в сессиях обычно храним зашифрованный
$_SESSION['login']=$_COOKIE['login'];//сессия с логином
$_SESSION['id']=$_COOKIE['id'];//идентификатор пользователя
$_SESSION['group']=$_COOKIE['group'];
}
}
if (!empty($_SESSION['login']) and !empty($_SESSION['password']))
{
//если существет логин и пароль в сессиях, то проверяем их и извлекаем аватар
$login = $_SESSION['login'];
$password = $_SESSION['password'];
$result = mysql_query("SELECT id,avatar FROM users WHERE login='$login' AND password='$password' AND activation='1'",$db);
$myrow = mysql_fetch_array($result);
//извлекаем нужные данные о пользователе
}
?>
<?php
if (!isset($myrow['avatar']) or $myrow['avatar']=='') {
//проверяем, не извлечены ли данные пользователя из базы. Если нет, то он не вошел, либо пароль в сессии неверный. Выводим окно для входа. Но мы не будем его выводить для вошедших, им оно уже не нужно.
print <<<HERE
<form action="http://localhost/phpsite/?do=cache_reg" method="post">
<!-- testreg.php - это адрес обработчика. То есть, после нажатия на кнопку "Войти", данные из полей отправятся на страничку testreg.php методом "post" -->
<p>
<label>Ваш логин:<br></label>
<input name="login" type="text" size="15" maxlength="15"
HERE;
if (isset($_COOKIE['login'])) //есть ли переменная с логином в COOKIE. Должна быть, если пользователь при предыдущем входе нажал на чекбокс "Запомнить меня"
{
//если да, то вставляем в форму ее значение. При этом пользователю отображается, что его логин уже вписан в нужную графу
echo ' value="'.$_COOKIE['login'].'">';
}
print <<<HERE
</p>
<!-- В текстовое поле (name="login" type="text") пользователь вводит свой логин -->
<p>
<label>Ваш пароль:<br></label>
<input name="password" type="password" size="15" maxlength="15"
HERE;
if (isset($_COOKIE['password']))//есть ли переменная с паролем в в COOKIE. Должна быть, если пользователь при предыдущем входе нажал на чекбокс "Запомнить меня"
{
//если да, то вставляем в форму ее значение. При этом пользователю отображается, что его пароль уже вписан в нужную графу
echo ' value="'.$_COOKIE['password'].'">';
}
print <<<HERE
</p>
<!-- В поле для паролей (name="password" type="password") пользователь вводит свой пароль -->
<p>
<input name="save" type="checkbox" value='1'> Запомнить меня.
</p>
<p>
<input name="autovhod" type="checkbox" value='1'> Автоматический вход.
</p>
<p>
<input type="submit" name="submit" value="Войти">
<!-- Кнопочка (type="submit") отправляет данные на страничку testreg.php -->
<br>
<!-- ссылка на регистрацию, ведь как-то же должны гости туда попадать -->
<a href="/?do=registration">Зарегистрироваться</a>
<br>
<!-- ссылка на восстановление пароля -->
<a href="send_pass.php">Забыли пароль?</a>
</p></form>
<br>
Вы вошли на сайт, как гость<br><a href='#'>Эта ссылка доступна только зарегистрированным пользователям</a>
HERE;
}
else
{
//при удачном входе пользователю выдается все, что расположено ниже между звездочками.
//************************************************************************************
print <<<HERE
|<a href='/?do=page_profile&id=$_SESSION[id]'>Моя страница</a><br>|<a href='/?do=userlist'>Список пользователей</a><br>|<a href='http://localhost/phpsite/?do=exit'>Выход</a><br><br>
<!-- Между оператором "print <<<HERE" выводится html код с нужными переменными из php -->
Вы вошли на сайт, как <span> $_SESSION[login]</span><br>
Вы вошли находитесь $_SESSION[group]<br>
<!-- выше ссылка на выход из аккаунта -->
<img alt='$_SESSION[login]' src='$myrow[avatar]'>
<!-- Выше отображается аватар. Его адрес содержит переменная $myrow[avatar] -->
<!-- Именно здесь можно добавлять формы для отправки комментариев и прочего... -->
HERE;
//************************************************************************************
//при удачном входе пользователю выдается все, что расположено ВЫШЕ между звездочками.
}
?>
а вот обработчик
<?php
session_start();
if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login);} }
if (isset($_POST['password'])) { $password=$_POST['password']; if ($password =='') { unset($password);} }
if (empty($login) or empty($password))
{
exit ("Вы ввели не всю информацию, вернитесь назад и заполните все поля!");
}
$login = stripslashes($login);
$login = htmlspecialchars($login);
$password = stripslashes($password);
$password = htmlspecialchars($password);
$login = trim($login);
$password = trim($password);
include ("system/data/db.php");
$ip=getenv("HTTP_X_FORWARDED_FOR");
if (empty($ip) || $ip=='unknown') { $ip=getenv("REMOTE_ADDR"); }
mysql_query ("DELETE FROM oshibka WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(date) > 900");
$result = mysql_query("SELECT col FROM oshibka WHERE ip='$ip'",$db);
$myrow = mysql_fetch_assoc($result);
if ($myrow['col'] > 2) {
exit ("Вы набрали логин или пароль неверно 3 раза. Подождите 15 минут до следующей попытки.");
}
$password = md5($password);
$password = strrev($password);
$password = $password."b3p6f";
$result = mysql_query("SELECT * FROM users WHERE login='$login' AND password='$password' AND activation='1'",$db) or die(mysql_error());
$myrow = mysql_fetch_assoc($result);
$result3 = mysql_query("SELECT id,name FROM users_group WHERE id='".$myrow['group']."'",$db);
$myrow3 = mysql_fetch_assoc($result3);
if (empty($myrow['id']))
{
$select = mysql_query ("SELECT ip FROM oshibka WHERE ip='$ip'");
$tmp = mysql_fetch_row ($select);
if ($ip == $tmp[0]) {
$result52 = mysql_query("SELECT col FROM oshibka WHERE ip='$ip'",$db);
$myrow52 = mysql_fetch_assoc($result52);
$col = $myrow52[0] + 1;
mysql_query ("UPDATE oshibka SET col=$col,date=NOW() WHERE ip='$ip'");
}
else {
mysql_query ("INSERT INTO oshibka (ip,date,col) VALUES ('$ip',NOW(),'1')");
}
exit ("Извините, введённый вами логин или пароль неверный.");
}
else {
$_SESSION['password']=$myrow['password'];
$_SESSION['login']=$myrow['login'];
$_SESSION['id']=$myrow['id'];
$_SESSION['group']=$myrow3['name'];
}
if (isset($_POST['save'])){
setcookie("login", $_POST["login"], time()+9999999);
setcookie("password", $_POST["password"], time()+9999999);
setcookie("id", $myrow['id'], time()+9999999);
setcookie("group", $myrow3['name'], time()+9999999);
}
if (isset($_POST['autovhod']))
{
setcookie("auto", "yes", time()+9999999);
setcookie("login", $_POST["login"], time()+9999999);
setcookie("password", $_POST["password"], time()+9999999);
setcookie("id", $myrow['id'], time()+9999999);
setcookie("group", $myrow3['name'], time()+9999999);
}
echo "<html><head><meta http-equiv='Refresh' content='0; URL=index.php'></head></html>";
?>
Всем заранее спасибо!
Спустя 4 часа, 39 минут, 31 секунда (11.12.2011 - 18:26) Shkiper написал(а):
Мне ктонибудь поможет???
Спустя 5 минут, 21 секунда (11.12.2011 - 18:31) Семён написал(а):
Мне вещи постирать нада
Спустя 22 минуты, 14 секунд (11.12.2011 - 18:53) Placido написал(а):
А зачем отдельный запрос для того, чтобы вытащить название группы? Одним запросом через JOIN
SELECT `users`.`id`, `users`.`avatar`, `таблица с группами`.`имя группы`
FROM `users`
LEFT JOIN `таблица с группами`
ON `users`.`id группы` = `таблица с группами`.`id группы`
WHERE `users`.`login` = '$login'
AND `users`.`password`='$password'
AND `users`.`activation` = '1';
Спустя 1 час, 33 минуты, 2 секунды (11.12.2011 - 20:26) Shkiper написал(а):
Огромное спасибо!!!!! Просто в моей практике я невстречал JOIN. Если чесно сказать я про это только от вас узнал.
Спустя 4 минуты, 40 секунд (11.12.2011 - 20:31) Shkiper написал(а):
Placido при встраивании в обработчик этой конструкцци я столкнулся с проблемой я непонял ваши коментарии ну там например
таблица с группами это таблица в таблице с пользователями или отдельная таблица с группами просьба поставте мне.
И какоая переменная теперь будет содержать имя группы?
таблица с группами это таблица в таблице с пользователями или отдельная таблица с группами просьба поставте мне.
И какоая переменная теперь будет содержать имя группы?
Спустя 5 минут, 39 секунд (11.12.2011 - 20:37) Placido написал(а):
Вместо "таблица с группами" нужно вставить имя второй таблицы, где хранятся id групп и имена групп. Вместо "id группы" и "имя группы" имена соответствующих полей.
Спустя 1 минута, 31 секунда (11.12.2011 - 20:38) Shkiper написал(а):
И какая переменная теперь будет содержать имя группы?
Спустя 17 минут, 59 секунд (11.12.2011 - 20:56) Placido написал(а):
Цитата (Deert @ 11.12.2011 - 19:38) |
И какая переменная теперь будет содержать имя группы? |
$myrow['имя поля, которое вы указали вместо `имя группы`']
Спустя 15 часов, 7 минут, 30 секунд (12.12.2011 - 12:04) Shkiper написал(а):
Извините, но в последнее время я очень туплю. Я просто PHP выучил давно но на время экзаменов все заволил теперь заново проктикуюсь.
Placido, у меня не получилось. помоги мне. Вот структура
users - таблица с пользователями
group - строка в таблице users где лежит id группы пользователей
users_group - таблица с группами
id - ну это айди группы
name - а это имя группы
И пожалуйста вставте это в код обработчика т.к. я вставлял у меня произходили ошибки.
Placido Большое тебе спасибо за все. И всем тем кто мне помог ранее.
Placido, у меня не получилось. помоги мне. Вот структура
users - таблица с пользователями
group - строка в таблице users где лежит id группы пользователей
users_group - таблица с группами
id - ну это айди группы
name - а это имя группы
И пожалуйста вставте это в код обработчика т.к. я вставлял у меня произходили ошибки.
Placido Большое тебе спасибо за все. И всем тем кто мне помог ранее.
Спустя 4 часа, 20 минут, 14 секунд (12.12.2011 - 16:24) Shkiper написал(а):
Всем спасибо я все решил, но не с помошью JOIN другоим способом.
Помогите мне в другом вот запрос
Выдает ошибку
Чё за х**** извините за выражение?
Помогите мне в другом вот запрос
$result = mysql_query ("INSERT INTO `users_group` (`name`, `admin`, `banned`,'view_off_site','view_off_text','poll','downlaod','feedback','search') VALUES ('" . $name . "', '" . $admin . "','" . $banned . "','" . $view_off_site . "','" . $view_off_text . "','" . $poll . "','" . $downlaod . "','" . $feedback . "','" . $search . "')") or die(mysql_error());
Выдает ошибку
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''view_off_site','view_off_text','poll','downlaod','feedback','search') VALUES ('' at line 1
Чё за х**** извините за выражение?
Спустя 12 минут, 47 секунд (12.12.2011 - 16:37) Placido написал(а):
Проблема в апострофах. Нужно использовать обратные кавычки
(`name`, `admin`, `banned`, `view_off_site`, `view_off_text`, `poll`, `downlaod`, `feedback`, `search`)
Спустя 3 дня, 2 минуты, 35 секунд (15.12.2011 - 16:39) Shkiper написал(а):
Спасибо!! Не обратил внимания!