Доброго дня! Пытаюсь осуществить проверку уникальности логина, при вводе любого слова ничего не происходит. Хочу, чтобы когда вводился логин, который уже есть в базе данных, рядом с формой высвечивалось сообщение о занятости логина. Вот код: ***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>
1. XMLHttpRequest уже никто не использует, есть jquery 2. Не фильтруешь $login. Используй mysql_real_escape_string() Если будет обращение к скрипту и не передадут пост логин то будет ворнинг. 3.Я смотрю ты посылаешь GET а пытаешься прочитать из POST. 4. А Хто такой Рома?
полностью согласен со смитом + если по какимто убеждениям необходимо запустить именно эту функцию меняем на : 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"
ахах))) Рома - это мальчик, который хочет, чтобы на примере написания его сайта, я разбиралась в этом всем)))) спасибо большое за ответы, буду пробовать! Добавлено спустя 38 секунд: Кто такая Ксюха?? Ксюха - это я
Попробуй через jquery там намного все проще. Т.е.дырявый кусок кода это его сайт? А можешь адрес дать
никогда не доверяй вводу пользователя! а тут: Код (Text): $login=$_POST['login']; ... $mass=("SELECT * FROM register WHERE login='$login'"); $result=mysql_query($mass); пользователь может подсунуть зловредный текст и выполнить практически что угодно в твоей базе. кстати, код аутентификации вообще нерабочий )))
Согласна, собственно в этом и была проблема.))) А вообще спасибо за совет не доверять пользователям))))