درخواست فيلد چكر

Exoid

Member
ممنون دوست عزيز.

ميخوام ديتابيس رو بخونه و ببينه ايا اين نام كاربري قبلا ثبت شده يا نه.
 

amirds

New Member
سلام
دوست عزیز شما ابتدا باید یه برنامه مثلا پی اچ پی داشته باشی که مقدار فیلد رو که دریافت کرد ، بره دیتابیس و چک کنه و یه شما پاسخ بده (البته با رعایت کامل مسائل امنیتی). خوب تا اینجای کار که سادست . بعد در فرم خود به صورت ای جکسی اطلاعات اون فیلد رو به برنامه خودتون ارسال میکنید و نتیجه رو نمایش میدید .

اگه وقت داشتم حتما کدی رو برای نمونه قرار میدادم ، ولی شما شروع کنید اگر به مشکلی برخورد کردید اساتید زیادی در این انجمن وجود داره ... :)
 
آخرین ویرایش:

Exoid

Member
دوست عزیز من درست کردم. اما یک مشکلی هست نام های انگلیسی رو درست نشون میده اما چون در دیتابیس نام های کاربری فارسی به صورت latin1 ایمپورت هست نمیتونه تبدیل کنه و به صورت حروف فارسی اطلاعات رو بگیره.

مثلا : نام بهرام رو چک میکنی میگه نام کاربری موجود نیست و میتوان ثبت کرد.
 

amirds

New Member
نکته اینجاست که شما باید ابتدا دیتابیس رو درست تنظیم کنی (برای این کار یه سرچ بزنی کلی مطلب هست ) تا بتونی فارسی رو هم داشته باشی .
اما از این نکته مهمتر ، به هیچ عنوان به شما توصیه نمی کنم که نام کاربری رو اجازه بدی فارسی قرار بدن . خوب علل زیادی هم داره که باز میتونی سرچ کنی و از اون راحتتر اینکه یه خورده الگو بردرای کنی . :)
 

Exoid

Member
در مورد نام کاربری فارسی از همه لحاظ چک شده.

اما اینکه موقع چک کردن نام کاربری فارسی به مشکل برخورد کردیم.

جستجو کردم اما اون چیزی که کاره من رو راه بندازه پیدا نکردم.
 

amirds

New Member
ببخشید اگه دیر جواب میدم :cry: سرم خیلی شلوغه .
نمی دونم:neutral:، چون برنامه شما رو ندیدم نمی تونم نظر درستی بدم . اما چندتا نکته رو بررسی کن :

1- دیتابیس درست تنظیم شده ؟ یعنی در مورد دریافت فارسی و ذخیری مشکلی نداره ؟
2- اطلاعاتی که از فرم ارسال میشه مشکل Unicode نداره ؟ (معمولا در آجاکس پیش میاد)
3- مرحله به مرحله کدت رو اجرا کن و از دستور پرینت برای بررسی اطلاعاتی که رد و بدل میشه استفاده کن .
4- روش بالا رو در مورد دیتابیس هم چک کن . ببین چه چیزی رو برمیگردونه که با شرط های شما مطابقت نداره .
5- حتما شرط ها رو دوباره چک کن و یه خورده بهشون سخت تر بگیر .
 

Exoid

Member
خوب من کد ها رو گذاشتم تا خودتون ببینید.

فایل usercheck.php
ت
PHP:
<?php
require_once(dirname(__FILE__) . '/mainfile.php');
    //include(NUKE_INCLUDE_DIR . 'functions_validate.php');


$u = addslashes($_GET['param']);

//// Change these to reflect your database details too: //////////////////
    $query = "SELECT username FROM nuke_users WHERE username = '$u'";

$result = sql_query($query);
while($row = sql_fetch_array($result, MYSQL_ASSOC))
{
$checked = $row['username'];
}

//// Now we'll make the requested comparison in lowercase so that it's correct: ///////////////////
$checked = strtolower($checked);
$u2 = strtolower($u);

//// Message to Print if the username is taken: ///////////////////
if($u2 == $checked) { echo "<font color=\"red\"><span class=\"messageboxerror\">$u  This User name Already exists</span></font>"; }

//mysql_close($conn);
?>

این هم کد اجاکس.

کد:
var url = "usercheck.php?param=";
function updateName() {
  document.getElementById('checked').innerHTML = "<span class=\"messagebox\">Checking...</span>";
  var name = document.getElementById("username").value;
  http.open("GET", url + escape(name), true);
  http.onreadystatechange = handleHttpResponse;
  http.send(null);
}
function handleHttpResponse() {
  if (http.readyState == 4) {
    results = http.responseText;
    var name = document.getElementById("username").value;
    if(results == "") results = "<font color=\"green\"><span class=\"messageboxok\">"+name+" Username available to register</span></font>";
    document.getElementById('checked').innerHTML = results;
  }
}
function getHTTPObject() {
  var xmlhttp;
  if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
    try {
      xmlhttp = new XMLHttpRequest();
    } catch (e) {
      xmlhttp = false;
    }
  }
  return xmlhttp;
}
var http = getHTTPObject();

بازم ممنون ازتون بابت راهنمای های که تا الان کردید.

مشکل فقط اینجاس که

چون sql نیوک latin 1 هست حروف فارسی رو هم به صورت latin1 از دیتابیس بخونه .

من خودم هر کاری کردم نتونستم .
 

mn3250

New Member
کوئری رو به این صورت استفاده کنید:
PHP:
$query = "SELECT username FROM nuke_users WHERE username = CONVERT( _utf8 $u USING latin1 ) COLLATE latin1_swedish_ci";
ببینید جواب میده؟ البته فرض اینه که کدینگ صفحه utf8 هست وگرنه باید اصلاح بشه.
 
آخرین ویرایش:

Exoid

Member
در دیتابیس نیوک ما وقتی میخوایم sql رو ایمپورت کنیم با latin1 ایمپورت میکنیم.

برای مثال :

یوزر (مهدی) به صورت (مهدی) ذخیره میشه. حالا باید این رو ما طوری کد نویسی کنیم تا (مهدی) رو برگردونه. کدی هم که دوستمون داد رو تست کردم ولی درست نشد .
 

mn3250

New Member
در هدر صفحه تگی بعنوان:
<meta http-equiv="Content-Type" content="text/html; charset=windows-1256">

یا مشابه باید باشه. charset شما چیه؟ ممکنه کد اچ تی ام ال صفحه ای جکستون رو اینجا قرار دهید؟
 

Exoid

Member
این کل کد ها هست . توی نیوک به صورت utf8 هست.

خودتون دیگه نگاه بندازید. :wink:
 

پیوست ها

  • html.zip
    5.6 کیلوبایت · بازدیدها: 6

mn3250

New Member
من چیزی در این دو فایل ندیدم. موقع اجرا روی صفحه کیک کنید و سورس html اش رو پست کنید. باید هدر داشته باشه. یا در بخش تنظیمات ببینید charset چیه؟ یا لینک صفحه رو اینجا بگذارید.
 

mn3250

New Member
UTF-8 استفاده شده بنابراین کوئری:
$query = "SELECT username FROM nuke_users WHERE username = CONVERT( _utf8 '".$u."' USING latin1 ) COLLATE latin1_bin";
بنظرم صحیح باشه.
اما اکیدا توصیه میکنم از یونیکد استفاده کنید. کمی حجم دیتابیس بالا میره اما به هزار دلیل بهتره.
 

جدیدترین ارسال ها

بالا