PDA

View Full Version : رفرش صفحه php با ajax



eletcomp
جمعه 01 آبان 1394, 10:54 صبح
با سلام
یک صفحه php دارم که میخوام اطلاعاتی که از طریق ftp-server به صفحه ارسال میشه را هر 5 ثانیه 1 بار رفرش بشه اتوماتیک!! اطلاعات از فایل تکس خوانده می شوند نه دیتابیس !! ایا این امکان وجود دارد که صفحه را بتوان رفرش کرد؟
سپاس

hamedarian2009
جمعه 01 آبان 1394, 11:15 صبح
خودت جواب دادی دیگه با ajax باید اینکارو بکنی یک تابع با AJAX برای گرفتن دیتا از فایل تکست و قراردادن اون داخل صفحه PHP درست کن و با استفاده از دستور setInterval تابع رو طی بازه های زمانی مثلا 5 ثانیه اجرا می کند




function ajaxCall() {
//do your AJAX stuff here
}
setInterval(ajaxCall, 5000);



نکته: 5000 میلی ثانیه همون 5 ثانیه است

eletcomp
جمعه 01 آبان 1394, 14:02 عصر
یک تابع با AJAX برای گرفتن دیتا از فایل تکست و قراردادن اون داخل صفحه PHP درست کن

ممنون مهندس: من کد نویسی اش را بلد نیستم!!لطفا بیشتر توضیح بدهید!

سپاس

hamedarian2009
جمعه 01 آبان 1394, 16:56 عصر
اگه داده های فایل تکست رو میدیدم کد رو طبق اون مینوشتم ولی در کل فرض کنیم یک فایل تکست به نام data.txt داریم

تو صفحه index.html کافیه این کدهارو بنویسی:


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
</head>
<body>
<div id="result">

</div>
<script type="text/javascript">
function ajaxCall() {
$('#result').load('data.txt');
}
$(document).ready(function(){
setInterval(ajaxCall, 5000);
});
</script>
</body>
</html>


اگه دیتاهای توی فایل تکست به حالت خاصی باشند مثل json خب مسلما باید یکسری کارهای دیگه هم انجام بدهید

eletcomp
جمعه 01 آبان 1394, 17:33 عصر
اگه داده های فایل تکست رو میدیدم کد رو طبق اون مینوشتم ولی در کل فرض کنیم یک فایل تکست به نام data.txt داریم

تو صفحه index.html کافیه این کدهارو بنویسی:


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
</head>
<body>
<div id="result">

</div>
<script type="text/javascript">
function ajaxCall() {
$('#result').load('data.txt');
}
$(document).ready(function(){
setInterval(ajaxCall, 5000);
});
</script>
</body>
</html>


اگه دیتاهای توی فایل تکست به حالت خاصی باشند مثل json خب مسلما باید یکسری کارهای دیگه هم انجام بدهید
ممنون دوست عزیز: والا پروژه من در مورد ارسال اطلاعات به هاست توسط ftp-server هست !! که داده توسط sim900 داخل فایل txt ریخته می شوند !! و فایل txt در حالت عادی خالی هست !! بعد کم کم مقادیر اضافه می شوند به فایل txt!
برای همین می خواستم مقادیر اوتوماتیک رفرش شوند!! کد هاش هم به صورت زیر هست!! فقط نمی دانم روی این کد ها جواب میده یا نه!؟؟ بعد قضیه json چی هست؟
================================================== ====
راستی در حال دیدن کد ها بودم که به ابن خط کد رسیدم !!! ایا این کد معادل ajax هست؟ یعنی صفحه را رفرش می کند؟


<meta http-equiv="refresh" content="30">

کد های اصلی :


<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="refresh" content="30">
<link href="style.css" rel="stylesheet" type="text/css" />
<title>اپروژه ارسال اطلاعات به سایت با sim900</title>
<body bgcolor="#76C9FF">
</head>
<?php
$text = file_get_contents("data.txt","r");
$size = filesize("data.txt");
$position1 = strrpos($text , "feshar");
$position2 = strrpos($text , "zaraban");
$position1 = $position1 + 9;
$len1 = $position2 - $position1;
$position2 = $position2 + 10;
$len2 = $size - $position2;
$feshar = substr($text,$position1,$len1);
$zaraban = substr($text,$position2,$len2);
?>
<body>

<div id="column1">
<h1>پروژه ارسال اطلاعات دلخواه به سایت</h1>
<h1>از طریق ماژول sim900</h1>
<hr>
<h2></h2>
<a href="www.elec.com"> <img src="zero3.png" alt="www.elec.com" width="407" height="156" /> </a>
<hr>
<h2> </h2>
<hr>
<h2></h2>
<h2></h2>
<hr>
</div>
<div id="column2">
<table border="1">
<tr>
<td><h1>فشار خون</h1></td>
<td><h1><?php echo($feshar); ?></h1></td>
</tr>
<tr>
<td><h1>ضربان قلب</h1></td>
<td><h1><?php echo($zaraban); ?></h1></td>
</tr>
</table>
</div>
</body>
</html>




سپاس

hamedarian2009
جمعه 01 آبان 1394, 21:22 عصر
خب امتحان کنید ببینید به کارتون میخوره یا نه
json هم یک نوع فرمت داده ای هست که معمولا برای انتقال داده ها استفاده میشه
اون کدی که گزاشتید کل صفحه رو هر 30 ثانیه یکبار رفرش می کند اما خب ajax کل صفحه رو رفرش نمی کنه و فقط همون div رو به روز می کنه که روش بهتری هست

eletcomp
جمعه 01 آبان 1394, 22:59 عصر
اون کدی که گزاشتید کل صفحه رو هر 30 ثانیه یکبار رفرش می کند اما خب ajax کل صفحه رو رفرش نمی کنه و فقط همون div رو به روز می کنه که روش بهتری هست
ممنون مهندس: همان کد ساده گمان کنم کارم را راه بندازد ولی هر دو را تست خواهم فعلا هاست و دامین ام تعطیل هست!
راستی این کد را متوجه میشید چی میگه؟مخصوصا strrpos وsubstrو len ها !!


$text = file_get_contents("data.txt","r");
$size = filesize("data.txt");
$position1 = strrpos($text , "feshar");
$position2 = strrpos($text , "zaraban");
$position1 = $position1 + 9;
$len1 = $position2 - $position1;
$position2 = $position2 + 10;
$len2 = $size - $position2;
$feshar = substr($text,$position1,$len1);
$zaraban = substr($text,$position2,$len2);



سپاس

hamedarian2009
شنبه 02 آبان 1394, 09:55 صبح
نمیدونم برای چی اینکارو کرده اما خب اومده محتویات یک فایل رو دریافت کرده (محتویات رشته هستند) و سپس با strpos موقعیت دوتا کلمه رو تو اون محتویات اون فایل پیدا می کند که یکعدد است و کدهای وسط هم که جمع و کم هست دیگه در نهایت اومده با تابع substr که یک زیررشته از رشته بزرگتر رو بدست میاره و خب پارامترهای تابع مشخص هستند اولی محتویات داخل همون فایل است و دومی موقعیت شروع زیر رشته و پارامتر سوم هم از موقعیت شروع به چه تعداد برداره

eletcomp
شنبه 02 آبان 1394, 19:58 عصر
نمیدونم برای چی اینکارو کرده اما خب اومده محتویات یک فایل رو دریافت کرده (محتویات رشته هستند) و سپس با strpos موقعیت دوتا کلمه رو تو اون محتویات اون فایل پیدا می کند که یکعدد است و کدهای وسط هم که جمع و کم هست دیگه در نهایت اومده با تابع substr که یک زیررشته از رشته بزرگتر رو بدست میاره و خب پارامترهای تابع مشخص هستند اولی محتویات داخل همون فایل است و دومی موقعیت شروع زیر رشته و پارامتر سوم هم از موقعیت شروع به چه تعداد برداره
ممنون دوست عزیز: ان کد ها توضیحات اش را دارم ولی بعضی جاهاش را متوجه نمیشم!!! توضیحات کد ها را اینجا می گذرام براتان!! من میخوام فقط یک مقدار روی صفحه وب نمایش بدم !! مثلا فقط مقدار فشار خون !! این کد هایی که گذاشتم برای نمایش 2 متغیر هست !! که براساس فرمول خاصی هست که متوجه نمیشم مخصوصا متغیر های len که چکار می کنه: با توجه به اینکه شما برنامه نویسی کار کردید و الگوریتم و اینها را متوجه میشید لطفا راهنمایی کنید!
توضیح کد ها:
http://s3.picofile.com/file/8218919000/%D8%AA%D9%88%D8%B6%DB%8C%D8%AD.PNG
عکس خروجی بر روی صفحه وب که 2 متغیر(فشار خون-ضربان قلب) را روی صفحه نشان داده که من میخوام فقط یک متغیر را نمایش بدم که به این فرمول مرتبط میشه!
http://s6.picofile.com/file/8218919026/%D8%AE%D8%B1%D9%88%D8%AC%DB%8C.PNG

به نظر من با کامنت کردن کد های زیر مشکل یک متغیر کردن حل میشه!! نظر شما چیست؟


<?php
$text = file_get_contents("vahid_data.txt","r");
$size = filesize("vahid_data.txt");
$position1 = strrpos($text , "feshar");
//$position2 = strrpos($text , "zaraban");
$position1 = $position1 + 9;
$len1 = $position2 - $position1;
//$position2 = $position2 + 10;
//$len2 = $size - $position2;
$feshar = substr($text,$position1,$len1);
//$zaraban = substr($text,$position2,$len2);
?>

(http://s6.picofile.com/file/8218919026/%D8%AE%D8%B1%D9%88%D8%AC%DB%8C.PNG)
سپاس

hamedarian2009
شنبه 02 آبان 1394, 22:16 عصر
والله توضیح به این خوبی داده طبق یک فرمولی اون عدد ها رو از فایل میگیره الان کدت تغییر میکنه
فایل data.txt


Feshar = 8,7
Zaraban = 48


فایل index.php


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
</head>
<body>
<div id="result"></div>
<script type="text/javascript">
function ajaxCall() {
$.get('ajax.php', function(data) {
$("#result").html(data);
});
}
$(document).ready(function (){
setInterval(ajaxCall, 5000);
});
</script>
</body>
</html>


فایل ajax.php


<?php
$text = file_get_contents("data.txt","r");
$size = filesize("data.txt"); //26
$position1 = strrpos($text , "Feshar"); //0
$position2 = strrpos($text , "Zaraban"); //14
$position1 = $position1 + 9; //9
$len1 = $position2 - $position1; //5
$position2 = $position2 + 10; //24
$len2 = $size - $position2; //2
//az position 9 be toole 5 substr
$feshar = substr($text,$position1,$len1);
//az position 24 be toole 2 substr
$zaraban = substr($text,$position2,$len2);

echo 'فشار خون : '.$feshar.'<br />';
echo 'ضربان قلب :'.$zaraban;


این سه تا فایلو کنار هم باید بگذاری. تو فایل ajax.php میتونی هر قالبی دوست داری این متغیرهارو اکو کنی مثلا داخل جدول با کدهای css

hamedarian2009
شنبه 02 آبان 1394, 22:19 عصر
ارسال تکراری. حذف شود

eletcomp
شنبه 02 آبان 1394, 23:21 عصر
ممنون دوست عزیز: الان شما چکار کردی؟ یک توضیح میدی؟ من که متوجه نشدم:متفکر:شما برنامه نویسی بهتر متوجه میشی:لبخند:
ان 26 چطور محاسبه شده؟ ! مگه تعداد کارکتر را حساب نمی کنه این دستور؟
من len1 و len2 را هم متوجه نمیشم فرمول اش را!!! و اعداد به دست امده!
مثلا من بخوام فقط یک متغیر به نام فشار را اطلاعات اش را دریافت کنم و متغیر دوم که ضربان هست را حذف کنم!! ایا ان فرمول ها بهم نمیخورد؟
سپاس

hamedarian2009
یک شنبه 03 آبان 1394, 10:00 صبح
ان 26 چطور محاسبه شده؟ ! مگه تعداد کارکتر را حساب نمی کنه این دستور؟
بله تعداد کاراکتر و space ها رو حساب میکنه ابتدا تو فایل تکست دوتا متغیر داشتم و عددها بر حسب اون دوتای اولی هست بعد برای تست دوتا دیگه اضافه کردم دیدم کار میکنه یادم رفت بهت بگم
سایز کل رشته اینجا 26 هست
روی شکل بهتر متوجه میشی اینجا هرچی بگم ممکنه برات گنگ باشه اما برات بیشتر باز میکنم وقتی پوزیشن یک کلمه رو می گیری عددی که میده موقعیتی که کلمه شروع میشه رو میده مثلا برای فشار 0 میده چون قبلش کلمه ای نیست خب از اول کلمه Feshar تا اول عدد 8,7 حساب کنی میشه 9 کاراکتر پس اومده پوزیشن کلمه اول رو 9 تا اضافه کرده تا موقعیت به ابتدای عدد فشار برسه
پوزیشن 2 هم که اول کلمه ضربان هست پس اگه ما محدوده بین اول عدد 8,7 تا اول کلمه ضربان رو داشته باشیم همون عدد 8,7 تو این محدوده هست که گزاشته تو متغیر len1

به پوزیشن 2 هم 10 تا اضافه میکنه تا برسیم به اول عدد 48 و چون دیگه بعدش چیزی نداریم برای بدست آوردن طول محدوده از سایز کل رشته متغیر position2 رو کم می کنه که عدد 48 تو این محدوده هست که میزاره تو متغیر len2
substr هم میاد از یک رشته بزرگتر یک زیررشته کوچیکتر از همون رشته رو بهت میده خب باید اول بهش خود رشته اصلی رو بدیم که تو متغیر text قراردادیم و سپس بهش بگیم از چه موقعیتی برامون زیررشته رو جدا کنه که تو فشار میشه پوزیشن 9 که اول همون عدد 8,7 است و پارامتر سوم هم میگه تا چندتا کاراکتر رو برات جدا کنم خب محدوده len1 که تا اول کلمه ضربان هست رو بهش میدیم مشخصا عدد 8,7 اینجا بدست میاد واسه ضربان هم همینطور.
اوف تا حالا انقدر جزیی توضیح نداده بودم :لبخند:


مثلا من بخوام فقط یک متغیر به نام فشار را اطلاعات اش را دریافت کنم و متغیر دوم که ضربان هست را حذف کنم!! ایا ان فرمول ها بهم نمیخورد؟
خب متغیر ضربان رو اکو نکن و خط آخرو کامنت کن دیگه به فرمول دست نزن

eletcomp
یک شنبه 03 آبان 1394, 10:28 صبح
ممنون دوست عزیز:همین اولش را ماندم:لبخند:

سایز کل رشته اینجا 26 هست
ابن 26 از کجا امد؟ من طول 2 تا رشته شمردم : شد 24 تا !!!
در اینجا:بعد feshar یک فضای خالی هست !! و بعد اش = و وسط 8و7 یک ویرگول هست!! اینها هم جز فضا رشته حساب می شوند؟


Feshar = 8,7
Zaraban = 48


سپاس

hamedarian2009
یک شنبه 03 آبان 1394, 11:19 صبح
اگه از text$ یه اکو بگیری می بینی تو کامپیوتر space های اضافی بینش رو حذف میکنه حالا با ctrl+shift کاراکترهارو بشمری می بینی تعدادش میشه 25 تا خب یکی دوتا space بعدش هم حساب میکنه
برای اینکه بهتر متوجه بشی این کدو اول ajax.php بزار و نتیجه رو ببین


$fp = fopen('data.txt', 'r');
$i =1;
while (!feof($fp)) {
echo $i.' : '.fgetc($fp).'<br />';
$i++;
}
exit;

این کد تعداد کاراکترهارو دونه دونه میگیره چاپ میکنه اینجوری متوجه میشی کدومارو حساب کرده

eletcomp
یک شنبه 03 آبان 1394, 17:45 عصر
اگه از text$ یه اکو بگیری می بینی تو کامپیوتر space های اضافی بینش رو حذف میکنه حالا با ctrl+shift کاراکترهارو بشمری می بینی تعدادش میشه 25 تا خب یکی دوتا space بعدش هم حساب میکنه
برای اینکه بهتر متوجه بشی این کدو اول ajax.php بزار و نتیجه رو ببین


$fp = fopen('data.txt', 'r');
$i =1;
while (!feof($fp)) {
echo $i.' : '.fgetc($fp).'<br />';
$i++;
}
exit;

این کد تعداد کاراکترهارو دونه دونه میگیره چاپ میکنه اینجوری متوجه میشی کدومارو حساب کرده
ممنون دوست عزیز: فعلا دامین ام از کار افتاده نمی تونم کد ها را تست کنم ! تست این کد ها به چه صورت هست؟ یعنی خروجی اش چطور نشان میده؟
در کل میخواستم کاری کنم که یک متغیر را در خروجی بشه نمایش داد !! که ترفند خوبی را معرفی کردی!
یک کد دیگه هم دارم که شبیه به این هست گمان کنم! به نظرت معادل همین کد php نیست!؟این کد برای میکرو هست!

ftoa(feshar,1,data1);
itoa(zaraban,data2);
size=strlen(data1);
size2=strlen(data2);
size=size+size2;
size=size+21;
itoa(size,size_data);
feshar=feshar+0.7;
zaraban=zaraban+8;

سپاس