Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Элементы управления в PHP


Автор: Andrew_D 11.3.2009, 16:50
Всем привет!

Существуют ли в PHP собственные элементы управления, такие как input text, button и т.п. ?

Автор: enof 11.3.2009, 16:56
PHP выполняется на сервере, когда вы видите страницу в браузере, скрипт уже завершил свою работу.

Автор: Andrew_D 11.3.2009, 17:05
Т.е. пользуемся HTML тегами. Хорошо. Допустим у меня есть следующее:

Код


              login :            <input type="text" NAME="login_reg" />*  <input type="submit" name="proverka_logina" value="proverka logina"  /> 
              name :              <input type="text" NAME="name" />*  <br>
              parol :          <input type="text" NAME="soname" />*  <br>
              <input type="submit" name="reg" value="registraziya"  /> 


Я хочу, чтобы поля login, name и кнопка registraziay были не активны до проверки логина, т.е. до момента нажатия кнопки proverka logina. Подскажите, как это реализовать?

Автор: NewDima 11.3.2009, 17:06
читайте документацию
http://ru.php.net/manual/ru/intro-whatcando.php

Автор: lelik133 11.3.2009, 17:08
через JavaScript

Автор: Andrew_D 11.3.2009, 17:17
т.е. что-то вроде такого:

Код

<script language="JavaScript">
function zamena() {

}


</script>

<form name="myForm1">

<input type="button" name="proverka logina"
value="proverka logina"
onclick="zamena(); return true;">

</form>


а что писать в функции zamena ?

Автор: enof 11.3.2009, 17:17
Andrew_D, Проверку логина на что? Если на допустимые символы, то это только js. Это к php не имеет никакого отношения.
Если проверить, существует ли уже такой ник, то ajax.

Автор: Andrew_D 11.3.2009, 17:19
В БД проверять на наличие такого логина. И при отсутствии такого разрешать дальнейшую регистрацию. 

Автор: enof 11.3.2009, 17:24
Andrew_D, js отправляете запрос на сервер, на сервере проверяете и возвращаете ответ. Ничего сложного нет, 
разберетесь за пару минут.

Автор: Andrew_D 11.3.2009, 17:34
Как проверить логин я знаю. Меня интересует как передать полям и кнопке отмену свойства disabled

Автор: enof 11.3.2009, 17:37
Andrew_D,  вообще-то это в другой раздел.
http://www.google.ru/search?q=xmlhttprequest&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox-a

Автор: Andrew_D 11.3.2009, 17:57
т.е. нужно отправить запрос типа XMLHttpRequest и через его ответ установить другие свойства для полей и кнопки ?

Автор: enof 11.3.2009, 18:00
да, в зависимости от ответа, есть или нет логина, проивести соответствующие действия.

Автор: Andrew_D 11.3.2009, 18:13
немножко непонятно...

проверка логина у меня производится в функции на PHP, т.е. по нажатию кнопки идет соединение с базой, потом sql запрос и т.д.

получается в js надо писать функцию проверки ?

или в запросе XMLHttpRequest передавать введенный логин?

Автор: enof 11.3.2009, 18:17
Andrew_D, 
Цитата(Andrew_D @  11.3.2009,  18:13 Найти цитируемый пост)
или в запросе XMLHttpRequest передавать введенный логин? 

так. форму отправлять по нажатии на кнопку не надо!

Автор: Andrew_D 11.3.2009, 18:22
Я тоже за то, чтобы люди сами доходили, но в этом вопросе мне вообще ничего не понятно. Если не сложно, наведи на мысль, пожалуйста, простецким примером. А то вообще ничего не понятно.

Автор: enof 11.3.2009, 18:54
js
Код

function check_login(login)
{
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open('GET', '/check_login.php?login='+login, true);
    xmlhttp.onreadystatechange = function()
    {
        if (xmlhttp.readyState == 4)
        {
            if(xmlhttp.status == 200)
            {
                if(xmlhttp.responseText == 1)
                {
                    alert("Логин свободен");
                }else{
                    alert("Логин занят!");
                }
            }
        }
    };
    xmlhttp.send(null);
}

check_login.php
Код

<?php
if(free_login($_GET['login']))  // free_login() - проверяет логин
{
    echo "1";  //Логин свободен.
}else{
    echo "0";  //Логин занят.
}
?>

Автор: p0zt3r 11.3.2009, 19:50
Вот накидал тут код...

файл visible.css
Код

/* стиль для всех видимых... */
.visible {
    visibility: visible;
}

/* ...и невидимых объектов */
.invisible {
    visibility: hidden;
}

файл index.php
Код

<?php
// URI пустой или не содержит идентификатора команды проверки логина

define('ACTION_TEST_LOGIN', '1');
define('ACTION_LOGIN_USER', '2');

$afterloginredirectto = "./user.php";

$p = $_REQUEST['p'];

function renderErrorPage (  )
{
    header ('Content-Type: text/html');
    echo ('Заглушка страницы с ошибкой');
}

function isLoginAcquired ( $login  )
{
//заглушка проверки логина - пока просто возвращаем логин, что значит, что он правильный.
return $login;
}

  
if ( $p == ACTION_TEST_LOGIN )
{   
    $login = $_GET['user'];
    header ('Content-Type: text/html');
    echo (isLoginAcquired($login));
    die;
}

if ( $p == ACTION_LOGIN_USER )
{
    if (isLoginSuccess($_POST['user'], $_POST['pass']))
    {
        header("Location: ".$afterloginredirectto);
    }
    else
    {
        renderErrorPage (  );
    }   
    die;
}

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Pragma" content="no-cache">
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>My simple login page</title>
        <link rel="stylesheet" type="text/css" href="visible.css">
    </head>
    <body>
        <script type="text/javascript">
            var login;
            var ajax_req;
            
            function getXmlHttpRequest()
            {
                var xmlHttpObj;
                
                if (window.XMLHttpRequest)
                {
                    xmlHttpObj = new XMLHttpRequest ();
                }
                else
                {
                    try
                    {
                        xmlHttpObj = new ActiveXObject ("Msxml2.XMLHTTP");
                    }
                    catch (e)
                    {
                        try
                        {
                            xmlHttpObj = new ActiveXObject ("Microsoft.XMLHTTP");
                        }
                        catch (e)
                        {
                            xmlHttpObj = false;
                        }
                    }
                }
                
                return xmlHttpObj;
            }

            function acquireResponse (  )            
            {
                if (ajax_req.readyState == 4 && ajax_req.status == 200)
                {
                    var ac_mes = document.getElementById ('lf_02');
                    var err_mes = document.getElementById ('lf_01');
                    if (ajax_req.responseText != login)
                    {
                        err_mes.className = "visible";
                    }
                    else
                    {
                        ac_mes.className = "visible";
                    }
                }
            }
            
            function onTestLoginButtonClick (  )
            {
                login = document.getElementById ('lf_logininput');
                var ajax_qry = "<?php echo (__FILE__); _ ?>" + "?p=1&user=" + encodeURIComponent ( login.value );    
                ajax_req = getXmlHttpRequest ();
                if (!ajax_req) return;
                ajax_req.open ('GET', ajax_qry, true);
                ajax_req.onreadystatechange = acquireResponse;                    
            }
        </script>

        <div id="lf">
            <form method="post" target="">
                <input id="lf_logininput" type="text" name="user" /><br />
                <div id="lf_password" class="invisible">
                    <input id="lf_passinput" type="password" name="pass" />
                </div>
                <input type="button" value="Test login!" />
                <div id="lf_01" class="invisible">
                    try other username!
                </div>
                <div id="lf_02" class="invisible">
                    acquired
                </div>
                <input type="submit" value="Log in!" />
            </form>
        </div>
  
    </body>
</html>

<?php    

?>


Соответственно, когда index.php загружается без параметров - выводится форма для ввода, при нажатии кнопки "Test login!" происходит отправка логина на сервер и его проверка и HTTP-ответ, содержаший логин в случае его "подходящести".

Автор: Andrew_D 11.3.2009, 19:57
Спасибо Вам за ответы. Буду пробовать. О результатах обязательно напишу.

Автор: p0zt3r 11.3.2009, 20:02
 не пробовать надо, а http://www.ozon.ru/context/detail/id/4170604/ покупать!

Автор: enof 11.3.2009, 20:05
p0zt3r,  бред полный. из-за одного объекта покупать книгу.
99% воды в подобных книгах.

Автор: nerezus 11.3.2009, 20:48
Цитата

не пробовать надо, а книжку покупать!
 А про то, как ложкой манную кашу кушать, ты тоже в книжке учился?
Такие вещи слишком мелкие, чтобы по ним книги писать. Я 3 года назад сдуру купил такую, разжевано до такой степени, что вместо материала идет совсем уж жиденькая слюнявая каша.

Автор: p0zt3r 11.3.2009, 22:36
Ну зря вы так тянете на книги от O'REILY. Разжовано - да, порою, а точнее чаще всего, до жидятины, но зато не возникает никогда никаких вопросов - сразу понимаешь что тебе нужно и где искать. Пока по PHP книгу не купил, так некоторые вещи и не освоил, хотя инфы в инете перелопатил кучу, времени потратил тьму.

В указанной мною книге разобраны все применения ajax, описано как реализуются все самые часто используемые фичи. Книжка небольшая и легка для чтения, поэтому её можно и на сон грядущим... 

Хотя, когда есть jQuery, особого смысла ковырятся в этом навозе не нахожу. Конечно, понимать как это работает нужно, знать основные фичи и возможности полезно, особенно, когда проектируешь крупную работу, т.к. не нарвёшься на лишние "переделки".

Если бы моя мама была крутым веб-программистом, то я бы, само собой, книжки не покупал  smile 

Автор: nerezus 11.3.2009, 23:10
Цитата

но зато не возникает никогда никаких вопросов - сразу понимаешь что тебе нужно и где искать.
 Только вот в документации(техническая информация) и википедии("наводка") для этого надо потратить в десятки раз меньше времени.
А я ценю свое время.
И вместо того, чтобы тратить время на чтение 400стр, я прочитаю 2стр википедии и 4 стр документации.

Автор: p0zt3r 12.3.2009, 21:57
Ну прочитал ты 4 страницы документации и чего? Получил обзор всей технологии? Получил описание всех возможностей? Знания?

Несомненно, есть вещи, которые не нужно помнить и которые нужно знать только со справочником. Я вот CSS вообще не знаю, поэтому постоянно обращаюсь к всевозможным ресурсам в инете.
Но вот когда недавно начал работать над достаточно большим проектом в Перле, который сейчас в подвешенном состоянии, то мне пришлось сначала детально изучить cpan'овские доки, т.к. понял, что навыков Перла мне не хватает и что 6-ю минутами заглядывания в википедию и чтением 4 стр. не обойтись.

Хотя у каждого есть выбор - либо знать немного всего, либо становиться специалистом в каких-то конкретных областях, применять свои знания на практике и зарабатывать на этом денежку.

Кстати, 400-страничный том по программированию я перечитываю с достаточной для работы усваимостью примерно за 2 часа. Мне лучше потратить 2 часа на знание, чем 5 минут на незнание.

Кроме того, по основной работе я инженер-проектировщик и знаю цену технической/нормативной документации и теоретическим основам, методологии и справочным данным.

Хотя баночное пиво и сигарета в постели гораздо приятней всего этого.

 smile 

PS Не хотел сказать, что я мегакрутой чел, а ты - наоборот. Просто разные люди с разным подходом, разным опытом и успехами. 

Автор: nerezus 12.3.2009, 22:59
Цитата

Получил обзор всей технологии? Получил описание всех возможностей? Знания?
 Именно так.
Документация - это САМОЕ полное описание по технологии.

А документации по аяксу - пара страниц.

Я могу 1 строчкой дать через jQuery: $.get('страничка', 'параметры', function(data){тело ф-ии})

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)