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

Тема в разделе "PHP", создана пользователем vave, 23 ноя 2011.

Модераторы: latteo
  1. vave

    vave

    Регистр.:
    23 июн 2007
    Сообщения:
    374
    Симпатии:
    15
    Помогите пожалуйста решить очень важный вопрос!

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

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

    логин:
    PHP:
    <?php echo $login?>
     
  2. vanderv

    vanderv

    Регистр.:
    30 май 2009
    Сообщения:
    270
    Симпатии:
    12
    Тут 2 разных значения.
    Должно быть либо /prifile.php?login=login
    либо /id
    Тогда можно что-то придумать.
     
  3. dr.5y51em

    dr.5y51em Писатель

    Регистр.:
    24 июн 2011
    Сообщения:
    7
    Симпатии:
    1
    Копайте в сторону регулярных выражений и rewriterule.
     
  4. vave

    vave

    Регистр.:
    23 июн 2007
    Сообщения:
    374
    Симпатии:
    15
    Вот код файла 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 ?
     
  5. Darkmind

    Darkmind SNMP maniac

    Регистр.:
    31 май 2006
    Сообщения:
    184
    Симпатии:
    76
    Лучше 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 нравится это.
  6. thoth777

    thoth777

    Регистр.:
    28 ноя 2008
    Сообщения:
    304
    Симпатии:
    98
    только надо проверять наличие у юзера такого логина.
    иначе рискуете поиметь кучу левых псевдостраниц.

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

    так можно убрать любой сайт из индекса, кучей одинаковых страниц.
     
  7. vave

    vave

    Регистр.:
    23 июн 2007
    Сообщения:
    374
    Симпатии:
    15
    Супер!
    а как сделать без _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>';
                        
                                    
                    }
                }
            }
        }
    ?>
     
  8. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.037
    Симпатии:
    702
    проверка логина на уникальность уже есть в этом коде
    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
    а откуда они появятся имелось ввиду 3(проcто пример) - id юзверя в базе
    или имелось ввиду что кто-то скормит ПС страницы с одинаковым id и разным окончанием ссылки дак на этой основе работают куча движков и ничего(например ДЛЕ) как впрочем и твоя :)http://www.richcms.ru/32-modul-obmena.html
    Перейти по ссылке
     
  9. Красавчег

    Красавчег Завсегдатай

    Регистр.:
    15 мар 2010
    Сообщения:
    902
    Симпатии:
    300
  10. vave

    vave

    Регистр.:
    23 июн 2007
    Сообщения:
    374
    Симпатии:
    15
    А есть какое-то решение проблемы?
    я убрал из когда users, получилось
    RewriteRule ^([^/]*)(/?)+$ profile.php?login=$1 [L]
    но так ничего не работает...