Ajax проверка за потребителско име
17-10-2009
<?php
function validate($name) {
if($name == '') {
return '';
}

if(strlen($name) < 3) {
return "<span id=\"warn\">Потребителското име е прекалено кратко!</span>\n";
}

switch($name) {
case 'bob':
case 'jim':
case 'joe':
case 'carol':
return "<span id=\"warn\">Потребителското име съществува!</span>\n";
}

return "<span id=\"notice\">Потребителското име е OK!</span>\n";
}

echo validate(trim($_GET['name']));
?>


Какво направихме в този файл: имаме една custom функция validate, правим проверка със strlen() за дължината на потребителското име. Ако то вече съществува ще ни изведе съобщение за грешка. С trim се премахват всички празни полета преди и след текста. Запаметяваме файла като validate.php

Повече за конструкцията switch


<script type="text/javascript">
var http = false;

if(navigator.appName == "Microsoft Internet Explorer") {
http = new ActiveXObject("Microsoft.XMLHTTP");
}
else
{
http = new XMLHttpRequest();
}

function validate(user) {
http.abort();
http.open("GET", "validate.php?name=" + user, true);
http.onreadystatechange=function() {
if(http.readyState == 4) {
document.getElementById('foo').innerHTML = http.responseText;
}
}
http.send(null);
}
</script>

<h1>Избери име:</h1>


<form>
<input type="text" onkeyup="validate(this.value)" />
<div id="foo"></div>
</form>


Оригинален източник:
http://daniel.lorch.cc/docs/ajax_simple/






-----------------------------------------
-----------------------------------------



Втория код
проверява в базата данни дали потребителското име съществува .
Видео ДЕМОТО ползва базата данни на уеб турист :

Файловете са 2:
user_check

<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251">

<script language="javascript">
var xmlhttp

function showHint(str)
{
if (str.length==0)
{
document.getElementById("txtHint").innerHTML="";
return;
}
xmlhttp=GetXmlHttpObject();
if (xmlhttp==null)
{
alert ("Your browser does not support XMLHTTP!");
return;
}
var url="gethint.php";
url=url+"?q="+str;
url=url+"&sid="+Math.random();
xmlhttp.onreadystatechange=stateChanged;
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}

function stateChanged()
{
if (xmlhttp.readyState==4)
{
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
}
}

function GetXmlHttpObject()
{
if (window.XMLHttpRequest)
{
// code for IE7+, Firefox, Chrome, Opera, Safari
return new XMLHttpRequest();
}
if (window.ActiveXObject)
{
// code for IE6, IE5
return new ActiveXObject("Microsoft.XMLHTTP");
}
return null;
}
</script>
</head>
<body>

<form>
Username: <input type="text" id="txt1" onkeyup="showHint(this.value)" />
</form>
<p><span id="txtHint"></span></p>




</body>
</html>



gethint.php


<?php
$db_name = '';
$db_user = '';
$db_pass = '';
mysql_connect(localhost,$db_user,$db_pass);
mysql_select_db($db_name) or die( "Unable to select database");

$q=htmlspecialchars($_GET["q"]);

$query="SELECT username from phpbb_users where username like '$q'";
$result=mysql_query($query);

$num=mysql_num_rows($result);



if ($num == 0)
{
$response="свободен";
}
else
{
$response="акаунта ".$q." е зает";
}


echo $response;
?>



Източника на втория код е:
http://www.w3schools.com/php/php_ajax_suggest.asp
само, че е преработен да работи с база данни (в случая с база данни на phpbb2 форум).


/ Трябва да сте регистриран за да напишете коментар /
От: BattleGrounds
3:36 18-10-2009
Супер урок :* въпрос само защо излизат яроглифи има мета таг?
От: admin
3:49 18-10-2009
Енкодинга на файла от който взимаш данните( gethint.php) оправи ли го да е UTF-8 ? Не на мета тага, а на самия файл.
Кой код пробваш? Първият или вторият?
От: rombeca
10:59 18-10-2009
Как се отразява това на производителността ,ако търси да речем в 2-3000 записа?
От: federer_11
11:10 18-10-2009
Намерих един доста интересен сайт: http://www.ajaxprojects.com/
А иначе не мисля, че ще се отрази, стига да се пооптимизира малко
От: BattleGrounds
14:26 18-10-2009

Сложих но същата файда, ще пусна една тема да видя
От: grafdevil
19:58 07-12-2009
На мен ми вади грешка :(
използвам "XAMPP" на локалната си машина и там си имам база данно "da" след като настроих "gethint.php" според инструкциите ми вади грешка: Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in G:\WebServers\xampp\htdocs\php\name\gethint.php on line 13
свободен

ето и самоя код с настройките:
От: admin
23:50 07-12-2009
Може да бъдеш сигурен, че причината е в теб.
Не си нанесъл правилно данните за връзка с базата данни.
Скрипта който аз съм дал е прекалено прост и съм сигурен, че не съм сгрешил, защото други потребители са го тествали.

Провери какво си попълнил тук:
$db_name = '';
$db_user = '';
$db_pass = '';
1