.htaccess и PHP (ссылки)

vave

Полезный
Регистрация
22 Июн 2007
Сообщения
466
Реакции
16
Помогите пожалуйста решить очень важный вопрос!

использую скрипт простой регистрации, как сделать что бы профиль зарегистрированных пользователей выглядел так
_www.domain.com/stepashka

сейчас они выглядят так
_www.domain.com/profile.php?id=3

логин:
PHP:
<?php echo $login; ?>
 
Тут 2 разных значения.
Должно быть либо /prifile.php?login=login
либо /id
Тогда можно что-то придумать.
 
Копайте в сторону регулярных выражений и rewriterule.
 
Вот код файла profile.php

PHP:
<?php
include_once("bd.php");

$resultat = mysql_query("SELECT * FROM users WHERE id='$_GET[id]'");
$array = mysql_fetch_array($resultat);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Профиль <?php echo $login; ?></title>
</head>
<body>
<h4>Профиль <?php echo $array['login']; ?></h4>


<?php
{
	if($array['avatar'] == ''){
		$avatar = "noAvatar.jpg";
	}else{
		$avatar = $array['avatar'];
	}

	echo "<img src='avatars/".$avatar."'> <br><br>";
	echo "<strong>".$array['name_user']." ".$array['lastname']."</strong><br>";

	switch ($array['birthdate_month']){
		case "1" : $month = "Января"; break;
		case "2" : $month = "Февраля"; break;
		case "3" : $month = "Марта"; break;
		case "4" : $month = "Апреля"; break;
		case "5" : $month = "Мая"; break;
		case "6" : $month = "Июня"; break;
		case "7" : $month = "Июля"; break;
		case "8" : $month = "Августа"; break;
		case "9" : $month = "Сентября"; break;
		case "10" : $month = "Октября"; break;
		case "11" : $month = "Ноября"; break;
		case "12" : $month = "Декабря"; break;
	}

	echo "Дата регистрации: ".$array['reg_date']." <br>";
	echo "Пол: ".$array['sex']." <br>";
	echo "День рождения: ".$array['birthdate_day']." ".$month." ".$array['birthdate_year']." <br>";
	echo "Страна: ".$array['country']." <br>";
	echo "Город: ".$array['city']." <br>";

	if($_GET['id'] == $id_user){

		echo "<a href='edit.php?id=$_GET[id]'>Редактировать профиль</a>";
	}
}
?>

</body>
</html>

Можно из этого слепить _www.domain.com/stepashka ?
 
Лучше domain.com/user/stepashka
Код:
RewriteRule ^user/([^/]*)(/?)+$ profile.php?login=$1 [L]

И переписать запрос, чтобы он делал
Код:
$resultat = mysql_query("SELECT * FROM users WHERE login='$_GET[login]'");

  • Имя надо прогонять через urlencode() преобразования.
  • SELECT * - bad practice, т.к. нужны не все данные.
  • Выборка по ID всегда лучше: domain.com/user/3-stepashka
 
  • Нравится
Реакции: vave
[*]Выборка по ID всегда лучше: domain.com/user/3-stepashka

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

domain.com/user/3-stepashka
domain.com/user/3-vasya
domain.com/user/3-sdfsdf

так можно убрать любой сайт из индекса, кучей одинаковых страниц.
 
Супер!
а как сделать без _www.domain.com/user/stepashka ?

и как делать проверку логина?

вот код регистрации

PHP:
<?php
    include_once("bd.php");
	
    if (isset($_POST['submit'])){
		if(empty($_POST['login']))  {
			echo '<br><font color="red"><img border="0" src="error.gif" align="middle" alt="Введите логин!"> Введите логин! </font>';
		} 
		elseif (!preg_match("/^\w{3,}$/", $_POST['login'])) {
			echo '<br><font color="red"><img border="0" src="error.gif" align="middle" alt="В поле "Логин" введены недопустимые символы!"> В поле "Логин" введены недопустимые символы! Только буквы, цифры и подчеркивание!</font>';
		}
		elseif(empty($_POST['password'])) {
			echo '<br><font color="red"><img border="0" src="error.gif" align="middle" alt="Введите пароль !"> Введите пароль!</font>';
		}
		elseif (!preg_match("/\A(\w){6,20}\Z/", $_POST['password'])) {
			echo '<br><font color="red"><img border="0" src="error.gif" align="middle" alt="Пароль слишком короткий!"> Пароль слишком короткий! Пароль должен быть не менее 6 символов! </font>';
		}
		elseif(empty($_POST['password2'])) {
			echo '<br><font color="red"><img border="0" src="error.gif" align="middle" alt="Введите подтверждение пароля!"> Введите подтверждение пароля!</font>';
		}
		elseif($_POST['password'] != $_POST['password2']) {
			echo '<br><font color="red"><img border="0" src="error.gif" align="middle" alt="Введенные пароли не совпадают!"> Введенные пароли не совпадают!</font>';
		}
		elseif(empty($_POST['email'])) {
			echo '<br><font color="red"><img border="0" src="error.gif" align="middle" alt="Введите E-mail!">Введите E-mail! </font>';
		}
		elseif (!preg_match("/^[a-zA-Z0-9_\.\-]+@([a-zA-Z0-9\-]+\.)+[a-zA-Z]{2,6}$/", $_POST['email'])) {
			echo '<br><font color="red"><img border="0" src="error.gif" align="middle" alt="E-mail имеет недопустимий формат!"> E-mail имеет недопустимий формат! Например, name@gmail.com! </font>';
		}
		 
		else{
			$login = $_POST['login'];
			$password = $_POST['password'];
			$mdPassword = md5($password);
			$password2 = $_POST['password2'];
			$email = $_POST['email'];
			$rdate = date("d-m-Y РІ H:i");
			$name = $_POST['name'];
			$lastname = $_POST['lastname'];  
			  
			$query = ("SELECT id FROM users WHERE login='$login'");
			$sql = mysql_query($query) or die(mysql_error());
			
			if (mysql_num_rows($sql) > 0) {
				echo '<font color="red"><img border="0" src="error.gif" align="middle" alt="Пользователь с таким логином зарегистрированый!"> Пользователь с таким логином зарегистрирован!</font>';
			}
			else {
				$query2 = ("SELECT id FROM users WHERE email='$email'");
				$sql = mysql_query($query2) or die(mysql_error());
				if (mysql_num_rows($sql) > 0){
					echo '<font color="red"><img border="0" src="error.gif"  alt="Пользователь с таким e-mail зарегистрированый!"> Пользователь с таким e-mail уже зарегистрирован!</font>';
				}
				else{
					$query = "INSERT INTO users (login, password, email, reg_date, name_user, lastname )
							  VALUES ('$login', '$mdPassword', '$email', '$rdate', '$name', '$lastname')";
					$result = mysql_query($query) or die(mysql_error());;
					echo '<font color="green"><img border="0" src="ok.gif" align="middle" alt="Вы успешно зарегистрировались!"> Вы успешно зарегистрировались!</font><br><a href="index.php">На главную</a>';
					
								
				}
			}
		}
    }
?>
 
Супер!
а как сделать без _www.domain.com/user/stepashka ?
и как делать проверку логина?
вот код регистрации
проверка логина на уникальность уже есть в этом коде
PHP:
$query = ("SELECT id FROM users WHERE login='$login'"); 
            $sql = mysql_query($query) or die(mysql_error()); 
             
            if (mysql_num_rows($sql) > 0) { 
                echo '<font color="red"><img border="0" src="error.gif" align="middle" alt="Пользователь с таким логином зарегистрированый!"> Пользователь с таким логином зарегистрирован!</font>'; 
            }
а убрать user выше написано просто если его убрать возникнут проблемы скажем с категориями и тп

to thoth777
domain.com/user/3-stepashka
domain.com/user/3-vasya
domain.com/user/3-sdfsdf
а откуда они появятся имелось ввиду 3(проcто пример) - id юзверя в базе
так можно убрать любой сайт из индекса, кучей одинаковых страниц.
или имелось ввиду что кто-то скормит ПС страницы с одинаковым id и разным окончанием ссылки дак на этой основе работают куча движков и ничего(например ДЛЕ) как впрочем и твоя :)
 
А есть какое-то решение проблемы?
я убрал из когда users, получилось
RewriteRule ^([^/]*)(/?)+$ profile.php?login=$1 [L]
но так ничего не работает...
 
Назад
Сверху