|
|
|
| Вот у меня есть страничка, где я могу войти через логин и пароль и просмотреть мои данные как пользователя. А я хочу сделать чтоб можно было просматривать эту страницу другими пользователями. Как вывести ссылку на такую страницу, а как поменять код?
Ниже страница моего акаунта
// вся процедура работает на сессиях. Именно в ней хранятся данные пользователя, пока он находится на сайте. Очень важно запустить их в самом начале странички!!!
session_start();
include ("blocks/bd.php");// файл bd.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь
if (isset($_GET['id'])) {$id =$_GET['id']; } //id "хозяина" странички
else
{ exit("Вы зашил на страницу без параметра!");} //если не указали id, то выдаем ошибку
if (!preg_match("|^[\d]+$|", $id)) {
exit("<p>Неверный формат запроса! Проверьте URL</p>");//если id не число, то выдаем ошибку
}
if (!empty($_SESSION['login']) and !empty($_SESSION['password']))
{
//если существует логин и пароль в сессиях, то проверяем, действительны ли они
$login = $_SESSION['login'];
$password = $_SESSION['password'];
$result2 = mysql_query("SELECT id FROM users WHERE login='$login' AND password='$password' AND activation='1'",$db);
$myrow2 = mysql_fetch_array($result2);
if (empty($myrow2['id']))
{
//Если не действительны (может мы удалили этого пользователя из базы за плохое поведение)
exit("Вход на эту страницу разрешен только зарегистрированным пользователям!");
}
}
else {
//Проверяем, зарегистрирован ли вошедший
exit("Вход на эту страницу разрешен только зарегистрированным пользователям!"); }
$result = mysql_query("SELECT * FROM users WHERE id='$id'",$db);
$myrow = mysql_fetch_array($result);//Извлекаем все данные пользователя с данным id
if (empty($myrow['login'])) { exit("Пользователя не существует! Возможно он был удален.");} //если такого не существует
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Мой акаунт | Собаки и все для любителей собак</title>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
<table width="100%" border="1" cellpadding="0" cellspacing="0" align="center" bgcolor="#FFFFFF" class="main_border">
<? include("blocks/header.php"); ?>
<tr>
<td valign="top">
<? include("blocks/nav.php"); ?>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<? include("blocks/lefttd.php"); ?>
<td valign="top">
<h2>Мой акаунт</h2>
<table align='center' class='kab' cellspacing="0" cellpadding="0">
<tr>
<td align="center">
<div class='pad'>
<a class="nav_title3" href='my_acount.php?id=<?php echo $_SESSION[id]; ?>'>Мой акаунт</a>
<a class="nav_title3" href="my_dog.php">Мои собаки</a>
<a class="nav_title3" href="my_obyavlenie.php">Мои объявления</a>
<?
print <<<HERE
<a class='nav_title3' href='page.php?id=$myrow2[id]'>Личные настройки</a>
<a class='nav_title3' href='all_users.php'>Пользоветели</a>
<a class='nav_title3' href='exit.php'>Выход</a></div><br>
HERE;
$result = mysql_query("SELECT * FROM users WHERE id='$id'",$db);
$myrow = mysql_fetch_array($result);
if ($myrow['login'] == $login) {
do
{
printf ("<table><tr><td class='dsa'>
<div class='acount' align='left'>
<strong>$myrow[login]</strong>
<br>
<img class='imav' alt='аватар' src='$myrow[avatar]'></td>
<td class='dsa'><br>
<div>%s</div>
<div>%s</div><br>
<div>%s</div>
<div>%s</div></td></tr></table><br>
<table>
<tr><td>
<div align='center'>%s</div>
<div align='center'>%s</div>
<div align='center'>%s</div>
</td></tr></table>
",$myrow['fio'],$myrow['city'],$myrow['sait'],$myrow['tel'],$myrow['osebe'],$myrow['rodz'],$myrow['info']);
}
while ($myrow = mysql_fetch_array($result));
?>
</div>
<br>
</td>
</tr>
</table>
<? include("blocks/reklama.php"); ?> </td>
</tr>
</table></td>
</tr>
<? include("blocks/footer.php"); ?>
</table>
</body>
</html> | |
|
|
|
|
|
|
|
для: pava77
(09.06.2010 в 09:12)
| | И снова здавствуйте... Евгений Попов
Вводите логин+пароль? хотите чтоб могли смотреть все кому не лень? это противоречит естеству...
if (!preg_match("|^[\d]+$|", $id)) {
exit("<p>Неверный формат запроса! Проверьте URL</p>");//если id не число, то выдаем ошибку
однако...
if (!empty($_SESSION['login']) and !empty($_SESSION['password']))
жуть...
про do while отдельный разговор... | |
|
|
|
|
|
|
|
для: Valick
(09.06.2010 в 09:19)
| | Ну как лучше сделать? Какие ошибки можно исправить? Помогите пожалуйста! | |
|
|
|
|
|
|
|
для: pava77
(09.06.2010 в 09:24)
| | Ну как лучше сделать?
Лучше всего на время забыть о практике и заняться теорией.
Реально хочу что-то Вам посоветовать, но поверьте это очень сложно.
1) Хранить пароль вообще не нужно ни где, а уж хранить его в сессии...
2) для проверки числа есть специальная функция, но и она тут не особо нужна, достаточно intval()
3) слишком много exit()
4) вместо цикла do while() при выводе из базы нужно применять цикл while()
do while() применяется там где условие выполнения цикла зарание не известно | |
|
|
|
|
|
|
|
для: Valick
(09.06.2010 в 09:31)
| | Попробую что то исправить, но я новичок по практике все и делаю. Я имел введу что есть список пользователей и ты выбираеш любого и просматриваеш его информацию.
Если не сложно, исправте в коде что нибудь я по принципу переделаю другие страници. Заранее спасибо | |
|
|
|
|
|
|
|
для: pava77
(09.06.2010 в 09:51)
| | вот так страничку смогут посмотреть все
<?php
include_once("blocks/bd.php");
if(isset($_GET['id'])) $id =intval($_GET['id']);
if(!empty($id) && $id >= 0){
$query = "SELECT * FROM users WHERE id=$id";
$res = mysql_query($query,$db);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Мой акаунт | Собаки и все для любителей собак</title>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
<table width="100%" border="1" cellpadding="0" cellspacing="0" align="center" bgcolor="#FFFFFF" class="main_border">
<?php include("blocks/header.php"); ?>
<tr>
<td valign="top">
<?php include("blocks/nav.php"); ?>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<?php include("blocks/lefttd.php"); ?>
<td valign="top">
<h2>Мой акаунт</h2>
<table align='center' class='kab' cellspacing="0" cellpadding="0">
<tr>
<td align="center">
<div class='pad'>
<a class="nav_title3" href="my_acount.php?id=$id">Мой акаунт</a>
<a class="nav_title3" href="my_dog.php">Мои собаки</a>
<a class="nav_title3" href="my_obyavlenie.php">Мои объявления</a>
<a class='nav_title3' href="page.php?id=$id">Личные настройки</a>
<a class='nav_title3' href="all_users.php">Пользоветели</a>
<a class='nav_title3' href="exit.php">Выход</a></div><br>
<?php
while ($myrow = mysql_fetch_array($result));
printf ("<table><tr><td class='dsa'>
<div class='acount' align='left'>
<strong>$myrow[login]</strong>
<br>
<img class='imav' alt='аватар' src='$myrow[avatar]'></td>
<td class='dsa'><br>
<div>%s</div>
<div>%s</div><br>
<div>%s</div>
<div>%s</div></td></tr></table><br>
<table>
<tr><td>
<div align='center'>%s</div>
<div align='center'>%s</div>
<div align='center'>%s</div>
</td></tr></table>
",$myrow['fio'],$myrow['city'],$myrow['sait'],$myrow['tel'],$myrow['osebe'],$myrow['rodz'],$myrow['info']);
}
?>
</div>
<br>
</td>
</tr>
</table>
<?php include("blocks/reklama.php"); ?> </td>
</tr>
</table></td>
</tr>
<?php include("blocks/footer.php"); ?>
</table>
</body>
</html>
<?php
}else{
// Переход на главную станицу сайта
}
?>
|
но проблема в другом
у Вас контетнт из базы и фиксированный HTML контент пересекаются, Вы хотите верстать страничку для каждого пользователя? Весь контент должен находиться в базе включая <meta>,<title> и даже CSS (ссылку на файл или даже код целиком), HTML должен быть только шаблон разметки контента на станице. Или у Вас у всех пользователей будут исключительно собаки? :) | |
|
|
|
|
|
|
|
для: Valick
(09.06.2010 в 10:53)
| | Большое спасибо за выложенную информацию!
У пользователей будет своя страничка с данными(логин, пароль, имя, о себе, и т.д.). И также будет Мои собаки Мои объявления Мои настройки, как было видно в исходнике. У пользователя будет и собаки о объявления, и хотелось бы у друзья сделать, но пока это для меня не реально.
Я вот только не понял нащет:
у Вас контетнт из базы и фиксированный HTML контент пересекаются, Вы хотите верстать страничку для каждого пользователя? Весь контент должен находиться в базе включая <meta>,<title> и даже CSS (ссылку на файл или даже код целиком), HTML должен быть только шаблон разметки контента на станице. | |
|
|
|
|
|
|
|
для: Valick
(09.06.2010 в 10:53)
| | Не получаться у меня запустить этот код, выводит странную страничку, все разбросано так... | |
|
|
|
|
|
|
|
для: Valick
(09.06.2010 в 10:53)
| | И также не пойму в самом низу переход на главную страницу. Что там нужно прописать? Наверное изза этого и не открывается страница | |
|
|
|
|
|
|
|
для: pava77
(09.06.2010 в 12:24)
| | исправь
while ($myrow = mysql_fetch_array($result));
|
на
while ($myrow = mysql_fetch_array($result)){
|
переход на главную страницу только если корректный id отсутствует | |
|
|
|
|
|
|
|
для: Valick
(09.06.2010 в 13:04)
| | а почему while ($myrow = mysql_fetch_array($result)){
а не так:
while ($res = mysql_fetch_array($query)){ | |
|
|
|
|
|
|
|
для: pava77
(09.06.2010 в 13:15)
| | потому что MySQL нужно учить :)
да и while ($myrow = mysql_fetch_array($res)){ -поправь
res - это идентификатор(ссылка на результат), а не сам результат | |
|
|
|
|
|
|
|
для: Valick
(09.06.2010 в 13:18)
| | Вот так у меня получилось, но всеравно пишет ошибку на линии в конце документа
<?php
include_once("blocks/bd.php");
if(isset($_GET['id'])) $id =intval($_GET['id']);
if(!empty($id) && $id >= 0){
$query = "SELECT * FROM users WHERE id=$id";
$res = mysql_query($query,$db);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Мой акаунт | Собаки и все для любителей собак</title>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
<table width="100%" border="1" cellpadding="0" cellspacing="0" align="center" bgcolor="#FFFFFF" class="main_border">
<? include("blocks/header.php"); ?>
<tr>
<td valign="top">
<? include("blocks/nav.php"); ?>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<? include("blocks/lefttd.php"); ?>
<td valign="top">
<h2>Мой акаунт</h2><table align='center' class='kab' cellspacing="0" cellpadding="0">
<tr>
<td align="center">
<div class='pad'>
<?php
while ($myrow = mysql_fetch_array($res)){
printf ("<table><tr><td class='dsa'>
<div class='acount' align='left'>
<strong>$myrow[login]</strong>
<br>
<img class='imav' alt='аватар' src='$myrow[avatar]'></td>
<td class='dsa'><br>
<div>%s</div>
<div>%s</div><br>
<div>%s</div>
<div>%s</div></td></tr></table><br>
<table>
<tr><td>
<div align='center'>%s</div>
<div align='center'>%s</div>
<div align='center'>%s</div>
</td></tr></table>
",$myrow['fio'],$myrow['city'],$myrow['sait'],$myrow['tel'],$myrow['osebe'],$myrow['rodz'],$myrow['info']);
?>
</div>
<br>
</td>
</tr>
</table>
<? include("blocks/reklama.php"); ?> </td>
</tr>
</table></td>
</tr>
<? include("blocks/footer.php"); ?>
</table>
</body>
</html>
<?php
}else{
// Переход на главную станицу сайта
}
?> | |
|
|
|
|
|
|
|
для: pava77
(09.06.2010 в 14:07)
| | после
",$myrow['fio'],$myrow['city'],$myrow['sait'],$myrow['tel'],$myrow['osebe'],$myrow['rodz'],$myrow['info']);
|
забыл скобку } | |
|
|
|
|
|
|
|
для: Valick
(09.06.2010 в 14:46)
| | Теперь выполняется функция else переход на главную страницу. как сделать ссылку на эту страничку, и чтоб id было корректным, и открывало страницу того пользователя по которому нажал??? | |
|
|
|
|
|
|
|
для: pava77
(09.06.2010 в 14:56)
| | а как вы формируете ссылки пользователей по которым нажимаете и как они выглядят? | |
|
|
|
|
|
|
|
для: Valick
(09.06.2010 в 15:08)
| | Ну вот у меня выводит объявление о продаже собаки, и внизу выводит Автор объявления, и пользователь может кликнуть по нему и просмотреть инфо об авторе
<div class='hj22'> Автор: <a href='about_user.php?....'>%s </a>
-----------------------------------
printf ("
<table class='postr' cellspacing='0' cellpadding='0'>
<tr>
<td class='nav_title2'>
<div><img class='ah28' align='left' src='img/includ/soba.png'> <a class='na_tit' href='v_rodoslovnaya.php?id=%s'>%s</a></div>
</td>
</tr>
<tr>
<td>
<div class='post_name'>
<a href='v_rodoslovnaya.php?id=%s'>
<img class='mini2' align='right' src='%s' alt='%s'></a></div>
<div class='post_adds'><strong>Порода:</strong> %s</div>
<div class='post_adds'><strong>Пол:</strong> %s</div>
<div class='post_adds'><strong>Дата рождения:</strong> %s</div>
<div class='post_adds'><strong>Хозяин:</strong> %s</div>
<div class='post_adds'><strong>Город:</strong> %s</div>
<div class='post_adds'><strong>Зарегестрирован:</strong> %s</div><br>
<hr align='left' class='line'>
<div class='hj22'>Рейтинг собаки: $sum33[0] <img src='img/r/%s.gif'></div>
<div class='hj22'> Просмотров: %s </div>
<div class='hj22'> Автор: <a href='about_user.php?....'>%s </a>
</div><br></td>
</tr>
</table><br>",$myrow34["id"], $myrow34["title"],$myrow34["id"],$myrow34["fupload"],$myrow34["title"],$myrow34["poroda"],$myrow34["pol"],$myrow34["dates"],
$myrow34["hozain"],$myrow34["city"],$myrow34["dater"],$r,$myrow34["view"],$myrow34["author"]);
}
while ($myrow34 = mysql_fetch_array($result34));
?> | |
|
|
|
|
|
|
|
для: pava77
(09.06.2010 в 15:35)
| |
<div class='hj22'> Автор: <a href='about_user.php?....'>%s </a>
|
и что там за троеточие?
по идее должно быть
где - %s есть идентификатор юзера из базы $myrow34[id] | |
|
|
|
|
|
|
|
для: Valick
(09.06.2010 в 17:17)
| | у меня сдесь идет id объявления в базе а не юзера. В том то и дело как сделать что б ссылка делалась на автора объявления? Надо еще один запрос?
$result34 = mysql_query ("SELECT * FROM sobaka WHERE secret=1 ORDER BY id DESC LIMIT $start, $num",$db);
это запрос на вывод объявлений из базы, в базе есть поле author, может с ним чтонить можно придумать? | |
|
|
|
|
|
|
|
для: pava77
(09.06.2010 в 17:25)
| | по идее если правильно организовывать базу, то в поле author как раз и должно быть id юзера. Но глядя на то что Вы тут пишете, я бы Вам еще раз порекомендовал бросить практику хотя бы на пол года и заняться теорией. | |
|
|
|
|
|
|
|
для: Valick
(09.06.2010 в 17:48)
| | ок, я займусь только хотелось бы закончить эту тему.
author это логин пользователя, тоесть мне нужно сделать так что б кроме логина еще и id юзера заносилось, вот тогда и получится? | |
|
|
|
|
|
|
|
для: pava77
(09.06.2010 в 17:58)
| | Я не зря говорю о теории, основная задача грамотно спроектировать БД, потом будет легко и просто работать. Вам нужно ознакомиться с нормализацией таблиц и БД в целом. Данные в БД при "хорошем раскладе" не должны дублироваться (не считая первичных ключей). А уж login, id и например другую служебную информацию и вовсе можно(нужно) хранить в сессионных переменных. | |
|
|
|
|
|
|
|
для: Valick
(09.06.2010 в 19:23)
| | А как хранить в сесионных переменных?
И если можно порекомендуйте хороший доступный учебник. | |
|
|
|
|
|
|
|
для: pava77
(09.06.2010 в 19:31)
| | Авторы данного форума написали кучу книг :)
а начать лучше с этого ну и наверно + вот это (хотя эту книгу я сам не читал) | |
|
|
|