За последние 24 часа нас посетили 55313 программистов и 1798 роботов. Сейчас ищут 922 программиста ...

Проверка уникальности

Тема в разделе "JavaScript и AJAX", создана пользователем Ksuha000, 6 окт 2013.

  1. Ksuha000

    Ksuha000 Новичок

    С нами с:
    7 авг 2013
    Сообщения:
    44
    Симпатии:
    0
    Доброго дня! Пытаюсь осуществить проверку уникальности логина, при вводе любого слова ничего не происходит. Хочу, чтобы когда вводился логин, который уже есть в базе данных, рядом с формой высвечивалось сообщение о занятости логина. Вот код:
    ***index.html***
    <html>
    <head>
    <title>Регистрация на сайте "Рога и копыта"</title>
    <style>
    span.hidden{display: none;}
    span.error{display: inline; color: black; background-color: pink;}
    </style>
    </head>
    <body>
    <script type=text/javascript>
    var req;

    function loadXMLDoc(url) {
    // branch for native XMLHttpRequest object
    if (window.XMLHttpRequest) {
    req = new XMLHttpRequest();
    req.onreadystatechange = processReqChange;
    req.open("GET", url, true);
    req.send(null);
    // branch for IE/Windows ActiveX version
    } else if (window.ActiveXObject) {
    req = new ActiveXObject("Microsoft.XMLHTTP");
    if (req) {
    req.onreadystatechange = processReqChange;
    req.open("GET", url, true);
    req.send();
    }
    }
    }

    function checkName(input, response)
    {
    if (response != ''){
    // Response mode
    message = document.getElementById('nameCheckFailed');

    if (response == '1'){
    message.className = 'error';
    }else{
    message.className = 'hidden';
    }
    }else{
    // Input mode
    url = 'http://localhost/roma/checkUserName.php?q=' + input;
    loadXMLDoc(url);
    }
    }

    function processReqChange()
    {
    // only if req shows "complete"
    if (req.readyState == 4) {
    // only if "OK"
    if (req.status == 200) {
    // ...processing statements go here...
    response = req.responseXML.documentElement;

    method = response.getElementsByTagName('method')[0].firstChild.data;

    result = response.getElementsByTagName('result')[0].firstChild.data;

    eval(method + '(\'\', result)');
    } else {
    alert("Возникла проблема получения данных XML:\n" + req.statusText);
    }
    }
    }
    </script>
    <p><label for=username>Выберите имя:</label>
    <input id="Text1" name="login" type="text" onblur="checkName(this.value,'')" />
    <span class="hidden" id="nameCheckFailed">
    Это имя уже используется, выберите другое.
    </span></p>
    </body>
    </html>

    ***bd.php****
    <?php session_start(); header("Content-type: text/html; charset=utf-8");

    $login=$_POST['login'];

    $conn=mysql_connect("localhost","root") or die
    ("=Невозможно установить соединение".mysql_error());
    mysql_select_db("jakson") or die ("=невозможно выбрать бд".mysql_error());
    $mass=("SELECT * FROM register WHERE login='$login'");
    $result=mysql_query($mass);
    $a=mysql_num_rows($result);

    ?>

    ****checkUserName.php****
    <?php
    header('Content-Type: text/xml');
    include ("bd.php");
    function nameInUse($a)
    { if (empty($a)) {
    echo "login ok";
    } else {echo "login no";}

    }

    ?>
    <? echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>' ?>
    <response>
    <method>checkName</method>
    <result><?php echo nameInUse($_GET['q']); ?></result>
    </response>
     
  2. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    1. XMLHttpRequest уже никто не использует, есть jquery
    2. Не фильтруешь $login. Используй mysql_real_escape_string()
    Если будет обращение к скрипту и не передадут пост логин то будет ворнинг.

    3.Я смотрю ты посылаешь GET а пытаешься прочитать из POST.

    4.
    А Хто такой Рома? :)
     
  3. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    полностью согласен со смитом +
    если по какимто убеждениям необходимо запустить именно эту функцию
    меняем на :
    function processReqChange()
    ...
    (eval(method + '(\'\',\''+ result + '\')' ));
    --

    function checkName(input, response)
    ---
    if (response == 'login no'){
    message.className = 'error';
    }else{
    message.className = 'hidden';
    }

    так как php нам возвращает не "1" а "login ok" или "login no"
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    согласен со Смитом - кто такой Рома?
     
  5. Ke1eth

    Ke1eth Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    1.073
    Симпатии:
    11
    Адрес:
    заблудилса
    Поддерживаю artoodetoo, Рома, кто такая Ксюха?
     
  6. Ksuha000

    Ksuha000 Новичок

    С нами с:
    7 авг 2013
    Сообщения:
    44
    Симпатии:
    0
    ахах))) Рома - это мальчик, который хочет, чтобы на примере написания его сайта, я разбиралась в этом всем)))) спасибо большое за ответы, буду пробовать!

    Добавлено спустя 38 секунд:
    Кто такая Ксюха?? Ксюха - это я
     
  7. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Ksuha000, Пиши в лс, другие контакты, покажу =)
     
  8. Ksuha000

    Ksuha000 Новичок

    С нами с:
    7 авг 2013
    Сообщения:
    44
    Симпатии:
    0
    Исправила на POST, функцию checkName, но что-то все равно не работает(
     
  9. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Попробуй через jquery там намного все проще.

    Т.е.дырявый кусок кода это его сайт?:)
    А можешь адрес дать:)
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Угу. А еще рома любит представляться на форумах ксюшей, потому что он думает, что так лучше помогают :D
     
  11. Ksuha000

    Ksuha000 Новичок

    С нами с:
    7 авг 2013
    Сообщения:
    44
    Симпатии:
    0
    Почему дырявый?)
     
  12. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    никогда не доверяй вводу пользователя! а тут:
    Код (Text):
    1. $login=$_POST['login'];
    2. ...
    3. $mass=("SELECT * FROM register WHERE login='$login'");
    4. $result=mysql_query($mass);
    пользователь может подсунуть зловредный текст и выполнить практически что угодно в твоей базе.

    кстати, код аутентификации вообще нерабочий )))
     
  13. Ksuha000

    Ksuha000 Новичок

    С нами с:
    7 авг 2013
    Сообщения:
    44
    Симпатии:
    0
    Согласна, собственно в этом и была проблема.))) А вообще спасибо за совет не доверять пользователям))))
     
  14. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    ну это не совсем мой совет [ краснея ], это азбучная истина. пользователь скотина и русский шпион.
     
  15. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    шпион германский, а русский - разведчег! =)