PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : مشکل با توابع



ms313
July 21st, 2014, 00:39
درود دوستان
یه مشکل ساده داشتم تو php واسه فراخوانی یه تابع .
من یه اسکریپت چت نوشتم کولچو هستش البته چت خصوصی نه عمومی
یه مشکلی داشتم .


<?php include('config1.php') ;include('div.php');?>
<html>
<head>
<title>chat-admins</title>
<link rel="stylesheet" href="css/style.css">
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js'></script>
<script src="js/organictabs.jquery.js"></script>
<script>
$(function() {
$("#example-one").organicTabs();
setInterval(function(){
$('.div').load('div.php');
}, 1000);
});
</script>
</head>
<body>
<div id="page-wrap">

<h1>Organic Tabs</h1>

<p>The purpose of this demo is to show a tabbed area where the content in tabbed panels are
of different heights. When we switch between tabs, the content below is gently moved up or down
to accomodate.</p>
<div id="example-one">
<?php
$num = 1 ;
$pages=0;
$db->open();
$db->query("select distinct session from chat ");
$session = array();
echo '<ul class="nav">';
while($row = $db->fetchObject()){
if($num==1){
echo '<li class="nav-two"><a href="#'.$row->session.'" class="current">'.$row->session.'</a></li>';
}else{
echo '<li class="nav-three"><a href="#'.$row->session.'">'.$row->session.'</a></li>';
}
$session[] = $row->session;
$num++;
}
echo '</ul>';
////////////////////////////////////////////////////
echo '<div class="list-wrap">';
///////////////////////////////////////////////////
$count = count($session);
$i=0;$j=0;
while($count>0){
if($i!=0){
echo'<ul id="'.$session[$i].'" class="hide"><div id="div">';
}else{
echo'<ul id="'.$session[$i].'">
';
}
?>
<div class="div">
<?php
test($session[$i]);
?>
</div>
<?php
echo'
<form method="post">
<input type="hidden" name="hiid" value="'.$session[$i].'">
<input type="submit" name="sub">
<textarea name="text"></textarea>
</form>';

$i++;
$count--;
echo'</ul>';
///////////////////////////////////////////////////
}echo'</div>';
///////////////////////////////////////////////////
?>
</div>
</div>
<?php
if(isset($_POST['sub'])){
echo $_POST['hiid'];
}
?>
</body>
</html>

این بخش مدیریتی هست همه چی معلومه دیگه :دی و از جی کئوری تب استفاده کردم و ...
اینم همون صفحه ای که هی می خوام فراخوانی کنم به عنوان ریفرش که پی ام ها رو پشت سر هم دریافت کنم





<?php
function test(){
include 'config1.php';
$db->open();
$db->query("select * from chat where session='$session[$i]'");
while($rows=$db->fetchObject()){
echo'<li>'.$rows->name.','.$rows->family.':'.$rows->payam.'</li>';
};
}
?>



ولی با این ارور مواجه میشم


( ! ) Fatal error: Cannot redeclare test() (previously declared in C:\wamp\www\tphp\chat\div.php:2) in C:\wamp\www\tphp\chat\div.php on line 9

hamid53214
July 21st, 2014, 02:28
از
include_once
استفاده کنید

ms313
July 21st, 2014, 02:51
اون وقت صفحه یه بار اجرا میشه کلا می خوام هر ثانیه ریفرش بشه تا داده های جدید رو ببینم .

hamid53214
July 21st, 2014, 03:13
تعریف تابع فقط یک بار لازمه. اجرای تابع فقط با دستور
test();
امکان پذیره

ms313
July 21st, 2014, 14:11
خب منم همون کار رو کردم دیگه :|

iMohsen
July 21st, 2014, 14:24
محتوای فایل div.php اون متن دومی هست ؟ چون فک کنم کامل نزاشتینش .

ms313
July 21st, 2014, 14:37
بعلی همونه نه تایع کامل هست .
چون فقط یه دونه اونه رفرش میزنه .
فک کنم نشه اینکار رو کرد یا با متغییر های سوپر گلوبال بشه یا هم با ob_flush تست نکردم حقیقتش

iMohsen
July 21st, 2014, 14:42
اول این که چرا تابع رو نمیزارین تو همون صفحه ؟
دوم این که اگر با include_once بزارید فقط یک بار include میشه ولی برای دفعات بعدی باز هم میتونه اجرا بشه .
سوم این که شما میتونی قبل از این که function شروع بشه اول چک کنی ببینی این function وجود داره یا نه .
PHP: function_exists - Manual (http://php.net/manual/en/function.function-exists.php)

ms313
July 21st, 2014, 15:13
با include_once یا بدون اینکه اینکلود کنم همون تابع یه بار اجرا میشه جال ابنکه الان چک کردم ببینم اصلا تابع وجود داره نشناخت :|
درصورتی که حداقل یه بار اجرا میشه . فک کنم اون جی کئوری هم مشکل داشته باشه با این اوصاف چون یه بار flase داد :|


if(function_exists('test()')){
//test($session[$i]);
echo "true";
}else{
echo "false";
}

hamid53214
July 21st, 2014, 15:40
setInterval(function(){
$('.div').load('div.php');
}, 1000)
اینجا هر یه ثانیه دوباره تابعو تعریف کردی

ms313
July 21st, 2014, 15:44
میشه با جی کئوری یه چیزی نوشت که دیگه یه صفحه جدا رو هر ثانیه لود نکنه .تو طرف کلاین این درست کار می کنه
اما طرف ادمین درست کار نمی کنه اصلاً
یا یه طوری منطقی تر بگید یه روش دیگه ای رو تست کنم .

iMohsen
July 21st, 2014, 15:46
با include_once یا بدون اینکه اینکلود کنم همون تابع یه بار اجرا میشه جال ابنکه الان چک کردم ببینم اصلا تابع وجود داره نشناخت :|
درصورتی که حداقل یه بار اجرا میشه . فک کنم اون جی کئوری هم مشکل داشته باشه با این اوصاف چون یه بار flase داد :|

آخه شما اومدی یه فایل ساختی که توش یک تابع تعریف کردی . حالا این فایل رو هی call میکنی . مشخصه که duplicate میده . شما بیا این فانکشن رو بزار تو یک فایل و داخل یک فایل دیگه هم بخونش ( دیگه این بدترین راه هست که بشه پیاده کرد !) و فایل دوم رو با jquery هی call کن .

البته از function_exist اشتباه استفاده کردی . باید بزاریش داخل div.php




<?php
if ( !(function_exist('test'))) {
function test(){
include 'config1.php';
$db->open();
$db->query("select * from chat where session='$session[$i]'");
while($rows=$db->fetchObject()){
echo'<li>'.$rows->name.','.$rows->family.':'.$rows->payam.'</li>';
};
}
}
?>

ms313
July 21st, 2014, 16:52
یه فایل درست کردم به اسم mohsen.php و این تابعی که بالا دادی رو توش گذاشتم .
الان همون div.php رو هی فراخوانی می کنم متغییر ها رو نمیشناسه :|

iMohsen
July 21st, 2014, 17:00
یه فایل درست کردم به اسم mohsen.php و این تابعی که بالا دادی رو توش گذاشتم .
الان همون div.php رو هی فراخوانی می کنم متغییر ها رو نمیشناسه :|

متن خطا رو بده تا دقیق بفهمم چی میگه .
الان این کدی که نوشتم اولش میگه اگه فانکشن test وجود داشت دیگه تعریفش نکن . البته بهتره اون config رو بیاری خارج از if ممکنه متغیرهایی که نیاز داری تو اون باشن .

ms313
July 21st, 2014, 20:10
متن خطا رو بده تا دقیق بفهمم چی میگه .
الان این کدی که نوشتم اولش میگه اگه فانکشن test وجود داشت دیگه تعریفش نکن . البته بهتره اون config رو بیاری خارج از if ممکنه متغیرهایی که نیاز داری تو اون باشن .




Notice: Undefined variable: session in C:\wamp\www\tphp\chat\imhosen.php on line 6

انواع و اقسام مدل ها رو تست کردم .
فقط بار اول اینطوری درست اجرا میشه که تو صفحه اصلی همون تابع رو صدا بزنی و تمام دیگه درست کار نمی کنه .
بقیه موارد یا صفحه سفید هست یا ارور بالا رو یمده روش دیگه ای نیست که من اینکار رو بتنونم بکنم ؟!