Сортировать новое сверху

Тема в разделе "Как сделать...", создана пользователем vave, 6 сен 2013.

  1. vave

    vave

    Регистр.:
    23 июн 2007
    Сообщения:
    364
    Симпатии:
    14
    Есть у меня такой вот код.

    PHP:
    <body style="font-size: 9pt">

    <? 

    class PHPruAuth 

        var $LOGIN; 
        var $PASSWORD; 
        var $USER; 
        var $PASS; 

        function Error() 
        { 
            echo '<CENTER><BR><BR><FONT COLOR=RED><B>ACCESS DENIED!...</B></FONT>'; 
            exit("<BR>\n</BODY>\n</HTML>"); 
        } 
         
        function CheckUser() 
        { 
            $this->LOGIN = 'asdasd'; // логин администратора 
            $this->PASSWORD = 'asdasd'; // пароль администратора 

            if($this->LOGIN === $_SERVER["PHP_AUTH_USER"] && $this->PASSWORD === $_SERVER["PHP_AUTH_PW"]) 
            { 
                $_SESSION["admin_online"] = 'true'; 
                $AUTH = array(trim($this->LOGIN),trim($this->PASSWORD)); 
                return ($AUTH); 
            } 
            $user = file('users.php'); 
            foreach($user as $value) 
            { 
                list($this->USER,$this->PASS,$email,$host,$web,$uslugi,$code,$time) = explode("^^",$value); 
                if(($this->USER === $_SERVER["PHP_AUTH_USER"]) && ($code == 'yes')) 
                { 
                    $AUTH = array(trim($this->USER),trim($this->PASS)); 
                    return ($AUTH); 
                } 
            } 
        } 

        function PHPruAuth() 
        { 
            if(isset($_SERVER["PHP_AUTH_USER"])) 
                $AUTH = $this->CheckUser(); 
            if ( (!isset($_SERVER["PHP_AUTH_USER"])) || ! (($_SERVER["PHP_AUTH_USER"] === $AUTH[0]) && ( $_SERVER["PHP_AUTH_PW"] === $AUTH[1] )) ) 
            { 
                header("HTTP/1.0 401 Unauthorized"); 
                header("WWW-Authenticate: Basic entrer=\"Form2txt admin\""); 
                header("WWW-Authenticate: Basic Realm=\"PROTECTED AREA\""); 
                $this->Error(); 
            } 
        } 


    session_name('PROTECT'); 
    session_start(); 
    $MEMBER = new PHPruAuth; 

    ?> 

    <? 

    function ListUser() 

        $list = file('users.php'); 
        $all = count($list); 
    ?> 
    <TABLE WIDTH=1335 CELLPADDING=7 CELLSPACING=1 BGCOLOR=#FFFFFF> 
    <TR ALIGN=CENTER BGCOLOR=#444444> 
        <TD bgcolor="#D2AD88" width="166">
        <font color="#FFFFFF" face="Tahoma" style="font-size: 9pt"><B>Имя \ Фамилия</B></font></TD> 
        <TD bgcolor="#D2AD88" width="169">
        <font color="#FFFFFF" face="Tahoma" style="font-size: 9pt"><B>Телефон</B></font></TD> 
        <TD bgcolor="#D2AD88" width="56">
        <font color="#FFFFFF" face="Tahoma" style="font-size: 9pt"><B>E-mail</B></font></TD> 
        <TD bgcolor="#D2AD88" width="44"><b>
        <font face="Tahoma" color="#FFFFFF" style="font-size: 9pt">№</font></b></TD> 
        <TD bgcolor="#D2AD88" width="166"><b>
        <font face="Tahoma" color="#FFFFFF" style="font-size: 9pt">Город</font></b></TD> 
        <TD bgcolor="#D2AD88" width="376"><b>
        <font face="Tahoma" color="#FFFFFF" style="font-size: 9pt">Встреча</font></b></TD> 
        <TD bgcolor="#D2AD88"><b>
        <font face="Tahoma" color="#FFFFFF" style="font-size: 9pt">Дата</font></b></TD>
        <TD bgcolor="#FFFFFF"></TD>
    </TR> 
    <? 
        $act = 0; 
        foreach($list as $string) 
        { 
            list($user,$pass,$email,$host,$web,$uslugi,$code,$time) = explode("^^",$string); 
            if ($code != 'yes') 
            { 
                if($time > time()) 
                    $txt = '<FONT COLOR=#66CC00>ожидаем до</FONT> '; 
                else 
                    $txt = '<FONT COLOR=#FF0000>на удаление</FONT> '; 
            } 
            else 
            { 
                $txt = '';    $act++; 
            } 
            echo '<TR ALIGN=CENTER BGCOLOR=#F8F8F8><TD >'.$user.'</TD><TD>'.$pass."</TD><TD>".trim($email)."</TD><TD>".trim($host)."</TD><TD>".trim($web)."</TD><TD>".trim($uslugi)."</TD><TD>".$txt.date("d.m.Yг.",$time)."</TD><TD><A onclick=\"return confirm('Удалить клиента из базы?')\" HREF='?user=del&login=".$user."' TITLE='Удалить'><FONT COLOR='#FF0000'><img border='0' src='del.gif'></FONT></A></TD><TD><A HREF='?user=edit&login=".$user."' TITLE='Редактировать'><FONT COLOR='#FF0000'><img border='0' src='edit.gif'></FONT></A></TD></TR>\n"; 
        } 
    ?> 
    </TABLE> 

    <font face="Tahoma" style="font-size: 9pt"> 

    <BR></font><font face="Tahoma" color="#3366CC" style="font-size: 9pt">Всего клиентов -</font><font face="Tahoma" style="font-size: 9pt"> 
    <? 
        echo '<B>'.$all.'</B>'; 


    function AddUser() 

    ?> 
    </font> 
    <FORM METHOD=POST ACTION=""> 
    <TABLE width="576" cellspacing="5" cellpadding="3"> 
    <TR> 
        <TD width="246"><b><font face="Tahoma" style="font-size: 9pt">Имя / Фамилия </font></b> </TD> 
        <TD width="303"><font face="Arial"><span style="font-size: 9pt">
        <font face="Tahoma"><INPUT class=auth TYPE="text" NAME="login" size="59"></font></span></font></TD> 
    </TR> 
    <TR> 
        <TD width="246"><b><font face="Tahoma" style="font-size: 9pt">Телефон: </font></b> </TD> 
        <TD width="303"><font face="Arial"><span style="font-size: 9pt">
        <font face="Tahoma"><INPUT class=auth TYPE="text" NAME="pass" size="59"></font></span></font></TD> 
    </TR> 
    <TR> 
        <TD width="246"><b><font face="Tahoma" style="font-size: 9pt">E-mail: </font></b> </TD> 
        <TD width="303"><font face="Arial"><span style="font-size: 9pt">
        <font face="Tahoma"><INPUT class=auth TYPE="text" NAME="email" size="59"></font></span></font></TD> 
    </TR> 


    <TR> 
        <TD width="246"><b><font face="Tahoma" style="font-size: 9pt">№: </font></b> </TD> 
        <TD width="303"><font face="Arial"><span style="font-size: 9pt">
        <font face="Tahoma"><INPUT class=auth TYPE="text" NAME="host" size="59"></font></span></font></TD> 
    </TR> 


    <TR> 
        <TD width="246"><b><font face="Tahoma" style="font-size: 9pt">Город: </font>
        </b> </TD> 
        <TD width="303"><font face="Arial"><span style="font-size: 9pt">
        <font face="Tahoma"><INPUT class=auth TYPE="text" NAME="web" size="59"></font></span></font></TD> 
    </TR> 
    <TR> 
        <TD width="246"><b><font face="Tahoma" style="font-size: 9pt">Встреча: </font></b> </TD> 
        <TD width="303"><font face="Arial"><span style="font-size: 9pt">
        <font face="Tahoma"><INPUT class=auth TYPE="text" NAME="uslugi" size="59"></font></span></font></TD> 
    </TR>


    <TR> 
        <TD COLSPAN=2><font face="Arial"><span style="font-size: 9pt">
        <font face="Tahoma"><INPUT class=auth TYPE="submit" NAME="protect" VALUE='Добавить'></font></span></font></TD> 
    </TR> 
    </TABLE> 
    </FORM> 
    <font face="Tahoma" style="font-size: 9pt"> 
    <? 


    function DelUser() 

        $list = file('users.php'); 
        for($a = 0; $a < count($list); $a++) 
        { 
            list($user,$pass,$email,$host,$web,$uslugi,$code,$time) = explode("^^",$list[$a]); 
            if($user == trim($_GET["login"])) 
            { 
                $fix = 1; 
                unset($list[$a]); 
                echo 'Пользователь '.$user.' удален!'; 
                break; 
            } 
        } 
        if(!isset($fix)) 
            echo 'Ошибка. Пользователь '.$_GET["login"].' в базе не найден.'; 
        else 
        { 
            $user_info = str_replace("\r","",join("",$list)); 
            PHPruSave($user_info,'users.php','w+'); 
        } 


    function PHPruSave($input,$file,$chmod='w+') 

        $fp = fopen($file,$chmod); 
        flock($fp,2); 
        fputs ($fp,    $input); 
        flock($fp,3); 
        fclose($fp); 



    if (isset($_SESSION["admin_online"])) 

        ShowAdmin(); 
        exit("\n</BODY>\n</HTML>"); 


    function ShowAdmin() 

    ?> 
    </font> 
    <CENTER>
    <P align="center"><font face="Tahoma"><font style="font-size: 9pt">
    <img border="0" src="logo.jpg" width="246" height="137"> </font><span lang="ru">
    <font color="#484848" style="font-size: 9pt"><br>
    </font></span><font style="font-size: 9pt"><BR> 
    </font></font> 
    <font face="Tahoma" style="font-size: 9pt; font-weight: 700"> 
    <A HREF="?user=add"><font color="#484848"><span style="text-decoration: none">Добавить клиента</span></font></A><font color="#484848">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    </font>
    <A HREF="?user=list"><span style="text-decoration: none"><font color="#484848">
    Список клиентов</font></span></A><font color="#484848">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    </font><font color="#3366CC">&nbsp;</font></font><a href="poc.php?user=list"><font face="Tahoma" style="font-weight: 700; text-decoration:none; font-size:9pt" color="#3366CC">ПОТЕНЦИАЛЬНЫЕ
    КЛИЕНТЫ</font></a><font face="Tahoma" style="font-size: 9pt"><BR><BR> 
    <? 

    if(isset($_POST["protect"])) 

        $check = file('users.php'); 
        foreach($check as $string) 
        { 
            list($user,$pass,$email,$host,$web,$uslugi,$code,$time) = explode("^^",$string); 
            if(trim($_POST["login"]) == trim($user)) 
            { 
                $fix = 1; 
                break; 
            } 
        } 
        if(!isset($fix)) 
        { 
            $user_info = trim($_POST["login"]).'^^'.trim($_POST["pass"]).'^^'.trim($_POST["email"]).'^^'.trim($_POST["host"]).'^^'.trim($_POST["web"]).'^^'.trim($_POST["uslugi"]).'^^yes^^'.time()."\n"; 
            PHPruSave($user_info,'users.php','a+'); 
            echo 'Новый пользователь добавлен.'; 
            unset($_GET["user"]); 
        } 
        else 
        { 
            echo 'Ошибка. Пользователь с таким логином уже есть.<BR><BR>'; 
        } 

    //********************** редактируем юзера *********************
    if(isset($_POST["edit"])) 

        $check = file('users.php'); 
        for($a = 0; $a < count($check); $a++) 
        { 
            list($user,$pass,$email,$host,$web,$uslugi,$code,$time) = explode("^^",$check[$a]); 
            if(trim($_POST["login"]) == trim($user)) 
            { 
                $fix = 1; 
                unset($check[$a]); 
                $user_info = str_replace("\r","",join("",$check)); 
                PHPruSave($user_info,'users.php','w+'); 
                break; 
            } 
        } 
        if(isset($fix)) 
        { 
            $user_info = trim($_POST["login"]).'^^'.trim($_POST["pass"]).'^^'.trim($_POST["email"]).'^^'.trim($_POST["host"]).'^^'.trim($_POST["web"]).'^^'.trim($_POST["uslugi"]).'^^yes^^'.time()."\n"; 
            PHPruSave($user_info,'users.php','a+'); 
            echo 'Пользователь отредактирован.'; 
            unset($_GET["user"]); 
        } 
        else 
        { 
            echo 'Ошибка. Пользователь с таким логином не существует.<BR><BR>'; 
        } 

    function EditUser() 

        $list = file('users.php'); 
        for($a = 0; $a < count($list); $a++) 
        { 
            list($user,$pass,$email,$host,$web,$uslugi,$code,$time) = explode("^^",$list[$a]); 
            if($user == trim($_GET["login"])) 
            { 
    echo '<FORM METHOD=POST ACTION=""> 
    <TABLE width="357"> 
    <TR> 
        <TD width="141"><b><font face="Arial">Имя / Фамилия </font></b> </TD> 
        <TD width="206"><INPUT class=auth TYPE="text" NAME="login" size="28" value = "'.$user.'"></TD> 
    </TR> 
    <TR> 
        <TD width="141"><b><font face="Arial">Телефон: </font></b> </TD> 
        <TD width="206"><INPUT class=auth TYPE="text" NAME="pass" size="28" value = "'.$pass.'"></TD> 
    </TR> 
    <TR> 
        <TD width="141"><b><font face="Arial">E-mail: </font></b> </TD> 
        <TD width="206"><INPUT class=auth TYPE="text" NAME="email" size="28" value ="'.$email.'"></TD> 
    </TR> 


    <TR> 
        <TD width="141"><b><font face="Arial">Hosting: </font></b> </TD> 
        <TD width="206"><INPUT class=auth TYPE="text" NAME="host" size="28" value = "'.$host.'"></TD> 
    </TR> 


    <TR> 
        <TD width="141"><b><font face="Arial">Web Сайт: </font></b> </TD> 
        <TD width="206"><INPUT class=auth TYPE="text" NAME="web" size="28" value = "'.$web.'"></TD> 
    </TR>


    <TR> 
        <TD width="141"><b><font face="Arial">Услуги: </font></b> </TD> 
        <TD width="206"><INPUT class=auth TYPE="text" NAME="uslugi" size="28" value = "'.$uslugi.'"></TD> 
    </TR> 

    <TR> 
        <TD COLSPAN=2><INPUT class=auth TYPE="submit" NAME="edit" VALUE="Редактировать"></TD> 
    </TR> 
    </TABLE> 
    </FORM> ';
     
                $fix = 1; 
                break; 
            } 
        } 
        if(!isset($fix)) 
            echo 'Ошибка. Пользователь '.$_GET["login"].' в базе не найден.'; 
       

    //**********************************************************
    if(isset($_GET["user"])) 

        if($_GET["user"] == 'add') 
            AddUser(); 
        elseif($_GET["user"] == 'list') 
            ListUser(); 
        elseif($_GET["user"] == 'del') 
            DelUser(); 
        elseif($_GET["user"] == 'edit') 
            EditUser();


    ?> 
    <BR><BR><BR>       

    </font>       
    </body>
    <? 

    ?>
    Как сделать так что бы новые пользователи, добавлялись сверху а не снизу?
    И за одно подскажите как уменьшить шрифт, что выходит из PHP?
     
  2. esche

    esche

    Регистр.:
    9 авг 2009
    Сообщения:
    360
    Симпатии:
    243
    Код:
    Есть у меня такой вот код.
    
    Шикарный вид код (с)

    В блоке if(!isset($fix)) строчку
    Код:
    PHPruSave($user_info,'users.php','a+');
    заменить на (бэкап сделай заранее:(
    Код:
            array_unshift($check,$user_info);
            $user_info = str_replace("\r","",join("",$check));
            PHPruSave($user_info,'users.php','w+');    
    Вообще, делается через стили (в отдельном файле, или в тэге <style> на худой конец.. но можно и в атрибуты style|font подобавлять, как в остальных местах)
     
    Шумадан нравится это.
  3. BDSG

    BDSG

    Регистр.:
    28 фев 2009
    Сообщения:
    203
    Симпатии:
    109
    http://www.php.net/manual/ru/function.fopen.php
    следовательно: function PHPruSave($input,$file,$chmod='c')

    php не манипулирует шрифтами в html, ими управляет css..
     
    Шумадан нравится это.
  4. esche

    esche

    Регистр.:
    9 авг 2009
    Сообщения:
    360
    Симпатии:
    243
    BDSG, ты уже второй раз (из того, что я заметил) этой "цэ"-шкой народ в заблуждение пытаешься ввести. И я повторюсь - попробуй сам сделать, поймёшь свою ошибку.
     
    Шумадан и BDSG нравится это.
  5. BDSG

    BDSG

    Регистр.:
    28 фев 2009
    Сообщения:
    203
    Симпатии:
    109
    это вот спасибо, что указал!.. признаться давно с фс не работал, прочел по докам, а протестировать неудосужился..

    собственно задача запросто решается через чтение в буфер и запись конкаттенации добавляемой строки и буфера, но... порой текста много, а памяти мало, и весь файл не считать (собственно полагал, что fwrite + c решают эту проблему, спасибо esche за подсказку)..
    на такой случай сообразил такой велосипед:
    PHP:
    $input_string "this string must be first \n";

    // тут нам надо кол-во байт, т.ч. на utf то же она
    $input_string_length strlen$input_string );

    // сколько байт нужно читать в буфер..
    // тут задано 64 байта, ставить по вкусу (хоть экзабайт, если памяти хватит.. быстрее отработает)..
    $buffer_size 64;

    $buffer '';
    $buffer_cache '';

    $file_size filesize'file.txt' );

    $h fopen'file.txt' 'r+' );

    // чмтаем из файла в буфер строку, длинной с вставляемую
    $buffer fread$h$input_string_length );

    // возвращаем курсор на исходную
    $fseek_position 0;
    fseek$h$fseek_position );

    // записываем новую строку
    fwrite$h$input_string$input_string_length );

    // задаем позицию со смещением в длинну исходной строки + размер буфера (ниже вычтем)
    $fseek_position += ( $input_string_length $buffer_size );

    // смещаем курсор
    fseek$h$fseek_position );


    for(; ( 
    $fseek_position $buffer_size ) < $file_size$fseek_position += $buffer_size ){

        
    // кэшируем строку длинной заданного буфера (подиция курсора )
        
    $buffer_cache fread$h$buffer_size );

        
    // смещаем на начало кэшированной строки
        
    fseek$h, ( $fseek_position $buffer_size ) );

        
    fwrite$h$buffer );

        
    // возвращаем курсор на проежнее место, для считывания следующего куска в новой итерации
        
    fseek$h, ( $fseek_position $buffer_size ) );

        
    $buffer $buffer_cache;

    }
    fclose$h );
    ещё раз благодарю esche.. а то так бы и тупил..
     
  6. esche

    esche

    Регистр.:
    9 авг 2009
    Сообщения:
    360
    Симпатии:
    243
    BDSG чегой-то перемудрил, по-моему... следующим шагом я бы второй файл (временный) использовал - из одного читаешь, в другой пишешь.

    Думаю, для хранения данных о юзерах (в контексте текущей задачи, даже если в память не поместятся.. хотя судя по остальному коду - если не поместится, то всё "свалится") квоты дисковой достаточно будет.

    А бо-о-ольшой файл fseek-ами туда-сюда до-о-олго переписывать будешь.. апач по таймауту отвалится - так и получится файлик недописанный с повреждёнными данными.
    (до кучи - залочить забыл, а то вдруг f5 залипнет :D )
     
  7. BDSG

    BDSG

    Регистр.:
    28 фев 2009
    Сообщения:
    203
    Симпатии:
    109
    думаю с вторым файлом во времени заметного выигрыша во времени не будет, т.к. операции производить почти те же, а fseek, сам по себе быстр, как утренний понос.. самое обузное тут именно запись (даже не чтение)..

    вопрос блокировки (как и ещё пару моментов) касается только конкретной реализации.. напр. при перезаписи файла, скажем, по крону, вполне может быть и пофиг на блокировки, и точно до лампочки f5 (как впрочем и на апач), не правда ли.. ;)) я предложил рабочую реализацию.. кому надо, нехай сам под себя допилит..

    что до скорости в целом, да, подобная перезапись (что в файл, что в оперативку) само-собой будет медленнее последовательного считывания.. писав эти загогулины ставил задачу именно экономии распределяемых ресурсов, а не времени..

    короче всем спасибо за идею и практику её реализации - давненько с фс дел не имел.. ))
     
    esche нравится это.