• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشكل در ajax و include
#1
سلام .
من الان دارم از اينكه چرا اين مشكل وجود داره منفجر ميشم خواهش ميكنم قبل از اينكه كار دست خودم و خانوادم بدم كمك كنيد . Huh
خيلي جامع شرح ميدم : ما 2 تا فايل داريم يكي html كه در اون يك كادر متن و يك دكمه ارسال وجود داره زماني كه متني رو در كادر نوشتم از طريق Ajax به فايل دوم كه يك صفحه php هست ارسال ميشه و اگه متن مورد نظر در بانك اطلاعاتي وجود داشت در صفحه html يك پيغام ظاهر ميشه .
حالا مشكل : وقتي كه من در صفحه php مستقيم مقادير localhost , user , pss رو ميدم هيچ مشكلي وجود نداره و مقدار يك ارسال ميشه ولي زماني كه از include استفاده مي كنم عدد ديگري غير از يك ميفرسته . بعد از كلي كلنجار متوجه شدم كه در روش غير مستقيم جواب ، طولش دو رقمي يعني عدد 1 رو با يه كاركتر ديگه كه شايد فضاي خالي باشه ارسال ميكنه .
اينطوري ميتونيد در صفحه html در قسمت كد ajax متوجه منظورم بشيد .
کد:
str=xmlHttp.responseText ;
alert(str);
alert(str.length);
اين كد مربوط به روش غير مستقيمه .

کد پی‌اچ‌پی:
include ('config.php'); 
    
$con=mysql_connect($db_host,$db_user,$db_password);
    
$db=mysql_select_db('ajax',$con);
    
$sql="SELECT *  FROM `users` WHERE `user` ='".$_GET['user']."'";
    
$r=mysql_query($sql);
    
$result=mysql_num_rows($r);
    echo( 
$result); 

اين كدي رو كه ميبينيد مربوط
  پاسخ
تشکر شده توسط :
#2
اي بابا Idea كسي بلد نيست ؟
  پاسخ
تشکر شده توسط :
#3
اگه میشه کدت رو کامل بذار شاید بتونم کمکت کنم !
فکر نکنم ربطی به include داشته باشه !
توی اون خط alert(str) چه پیغامی میده ؟ کنار 1 چیزی مینویسه ؟
این کد که درست کار میکنه : (الان تست کردم )
این کد صفحه اول :

کد پی‌اچ‌پی:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<
title>AJAX</title>
<
script language="javascript">
function 
GetXmlHttpObject(){
var 
xmlHttp=null;
try { 
xmlHttp=new XMLHttpRequest(); } // Firefox, Opera 8.0+, Safari
catch (e) {
 try{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");} //Internet Explorer
 
catch (e){xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");}
 }
return 
xmlHttp;
}

var 
XMLReq;
function 
check_Text(){ 
XMLReq=GetXmlHttpObject();
if (
XMLReq==null){alert ("Browser does not support HTTP Request");return;}
url='Server.php?user='+document.getElementById('txtuser').value+'&ts='+new Date().getTime;
XMLReq.onreadystatechange=check_Action;
XMLReq.open("GET",url,true);
XMLReq.send(null);
}

function 
check_Action(){ 
if (
XMLReq.readyState==|| XMLReq.readyState=="complete"){ 
    if (
XMLReq.responseText==1){
        
alert('YES');
    }else{
        
alert('NO');
    }

}
</
script>
</
head>

<
body>
<
input type="text" id="txtuser"  maxlength="25"/>
<
input type="button" value="ارسال" onclick="check_Text()" />
</
body>
</
html

اینم صفحه دوم :
کد پی‌اچ‌پی:
<?php
include ('config.php'); 
    
$con=mysql_connect($db_host,$db_user,$db_password);
    
$db=mysql_select_db('db1',$con);
    
$sql="SELECT *  FROM `users` WHERE `user` ='".$_GET['user']."'";
    
$r=mysql_query($sql);
    
$result=mysql_num_rows($r);
    echo(
$result); 
?>
  پاسخ
تشکر شده توسط :
#4
سلام از اينكه جواب داديد ممنون . دقيقا كد هاي شما رو استفاده كردم ولي همونطوريه فرقي نكرد . قبل از دستور شرط اين دستور رو اضافه كردم
کد:
alert(XMLReq.responseText) ;
پيغامي كه ظاهر ميشه عدد 1 هست ولي بعدش پيغام NO رو ميده . زماني كه جاي include اين كد
کد:
$con=mysql_connect('localhost','root','');
رو ميدم همه چيز درسته من كل برنامه رو پيوست مي كنم شما بررسي كنيد ببينيد چطوريه .
اين كد صفحه config
کد پی‌اچ‌پی:
<?php
$db_host
='localhost' ;
$db_user='root' ;
$db_password='' ;
?>



فایل‌های پیوست
.zip   test2.zip (اندازه 68.91 KB / تعداد دانلود: 8)
  پاسخ
تشکر شده توسط :
#5
فهمیدم مشکلت کجاست !
فقط کافیه توی خط اول فایل کانفیگ بجای
کد پی‌اچ‌پی:
<?php 
از این
کد پی‌اچ‌پی:
<? 
به تنهایی استفاده کنی !
راستشو بخوای دلیل فنی و اصلیشو نمیدونم که چرا یه کاراکتر قبل از 1 میده ولی اینجوری حل میشه !
اساتید اگه هر کسی میدونه بگه (ممنون میشم ! واسه خودمم سوال شد )
  پاسخ
تشکر شده توسط : ahmad65
#6
آقا خيلي بزرگواري . نميدوني با چه هحجاني رفتم كاري كه گفتي انجام دادم آخه بد جوري منو گير انداخته بود ولي نشد . چند دقيقه اي مات و مبهوت به مانيتور نگاه كردم يكدفه بهم الهام شد كه encode صفحه config رو از utf-8 به چيز ديگه تغير بدم كه دادم ANSI و در نهايت ناباوري ديدم درست شد . آيكيو من نميكشه كه چرا اين مشكل وجود داره اگه اساتيد ميدونند بگند چون كل سايتم با utf-8 ، اينكد شده نميخوام جايي مشكل ايجاد بشه . ولي خيلي ايراد مسخره اي بود تاحالا اينطوري سر كار نبودم .
  پاسخ
تشکر شده توسط : hosseintdk775
#7
خواهش میکنم عزیز !
البته منم utf-8 تست کردما !
درست کار میکرد !
اولش همونی که گفتی میشد ! ( 2 تا کاراکتر میداد ) ولی با تغییر کانفیگ درست شد ! ExclamationExclamation
روی utf-8 هم فقط 1 رو میفرسته !
با یه مرورگر دیگه تست کن ببین همینجوریه ! ( آخه عجیبه ) شاید کروم دیگه خیلی گیر داده !
  پاسخ
تشکر شده توسط :
#8
(۱۳۹۰ اردیبهشت ۰۴, ۰۴:۵۷ ب.ظ)Bojbaj نوشته: خواهش میکنم عزیز !
البته منم utf-8 تست کردما !
درست کار میکرد !
اولش همونی که گفتی میشد ! ( 2 تا کاراکتر میداد ) ولی با تغییر کانفیگ درست شد ! ExclamationExclamation
روی utf-8 هم فقط 1 رو میفرسته !
با یه مرورگر دیگه تست کن ببین همینجوریه ! ( آخه عجیبه ) شاید کروم دیگه خیلی گیر داده !

بسم الله الرحمن الرحیم
سلام
اگه اشتباه نکنم شما صفجه تون utf8 بدون bom ذخیره شده ولی این دوستمون با bom ذخیره کردن و اینطوری شده (با bom چند کاراکتر همینطوری به صفحه افزوده می شه که دیده نمی شه)
و اینکه با تابع ob_clean(); هم می شه کاراکترهای اضافه صفحه رو هم از بین برد (البته بهتره قبلش خروجی که خودتون تعیین کردید نداشته باشید)
  پاسخ
تشکر شده توسط : ahmad65 Bojbaj
#9
رفتم اين قضيه bom رو بررسي كردم ديدم درسته utf بدون bom درست كار مي كنه ولي با bom نه .
در مورد اين كد <?php با اين كد <? فرقي نداره هر دو جواب ميده . فقط در مورد مرورگر اينكه تو 4 تا مرورگر IE , Opera , Fire Fox , chrome آزمايش كردم ( با bom ) كه در همه پيغام ميداد كه 2 كاراكتر وجود و نتيجه NO ميشد ولي در IE با وجود 2 كاراكتر ميشد YES . كه به ابهامات زندگي من يك مورد اضافه كرد . از همه متشكرم .
  پاسخ
تشکر شده توسط : hosseintdk775


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان