ارسال موضوع  ارسال پاسخ 
 
رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
این کد رو به چه طریق دیگه ای میشه نوشت
نویسنده پیام
amir abbas آفلاین
با سابقه ها و بزرگان
MT LEGEND

ارسال‌ها: 750
Likes Given: 0
Likes Received: 0 in 0 posts
تاریخ عضویت: ۲ تیر ۱۳۸۵
ارسال: #11
این کد رو به چه طریق دیگه ای میشه نوشت
جوابش رو خودم پیدا کردم Big Grin
کد رو دوباره می نویسم

تو بخش اول کد:

کد:
$page_title = 'view users page';
include('includes/header.html');
require_once('connection.php');
$display = 10;

خط اول تایتل صفحه رو مشخص می کنه
دومی هیدر رو اینکلود می کنه
خط سوم فایل ارتباط با دیتابیس رو ایمپورت میکنه
و خط چهارم هم متغیر display رو تعریف میکنه

تیکه دوم کد

کد:
if ( isset($_GET['p']) && is_numeric($_GET['p']) ) {
    $page = $_GET['p'];
} else {
    $q = "SELECT COUNT(user_id) FROM users";
    $r = @mysqli_query($dbc, $q);
    $row = @mysqli_fetch_array($r, MYSQLI_NUM);
    $records =$row[0];
    if ($records > $display) {
        $page = ceil($records/$display);
    } else {
        $page = 1;
    }
}

این تیکه کد میگه اگر تعداد صفحات تو نوار آدرس مشخص شده بود که تعداد رو از اونجا بگیر ولی اگر مشخص نشده بود از تیبل یوزر ها با فانکشن count یه کوئری بگیر و تعداد کاربران رو مشخص کن. بعد اگر تعداد کاربران از مقدار display که 10 بود بیشتر بود، تعداد کاربران رو به 10 تقسیم کن و به سمت بالا گرد کنش . مثلا اگر 25 تا کاربر باشه. 25 تقسیم بر 10 میشه که میشه 2.5 که به بالا گرد بشه میشه 3. یعنی 3 صفحه. و اگر هم تعداد کاربران از متغیر display بیشتر نبود که مقدار رو معادل 1 قرار میده.

کد:
if ( (isset($_GET['s'])) && (is_numeric($_GET['s'])) ) {
    $start = $_GET['s'];
} else {
    $start = 0;
}

تو این تیکه کد اول بررسی میشه که تو نوار آدرس مقدار s یا همون $start مشخص شده یا نه. اگر مشخص شده باشه که از اون استفاده می کنه و اگر نباشه که از مقدار صفر استفاده میشه (یعنی طرف برای بار اول صفحه رو باز کرده)

کد:
$q = "SELECT first_name, last_name, DATE_FORMAT(registration_date, '%d, %m, %Y') AS date, user_id FROM users ORDER BY registration_date ASC LIMIT $start, $display";
$r = @mysqli_query($dbc, $q);
// table header
echo '<table align="center" cellspacing="0" cellpadding="5" width="75%">
<tr> <th>edit</th><th>delete</th><th>first name</th><th>last name</th><th>registration date </th></tr>';
$bg = '#eeeeee';
while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
    $bg = ($bg == '#eeeeee' ? '#ffffff' : '#eeeeee');
    echo '<tr bgcolor="' . $bg . '"><td><a href="edit_user.php?id=' . $row['user_id'] . '">edit</a></td><td><a href="delete_user.php?id=' . $row['user_id'] . '">delete</a></td><td>' . $row['first_name'] . '</td><td>' . $row['last_name'] . '</td><td>' . $row['date'] . '</td></tr>';
}
echo '</table>';
mysqli_free_result($r);
mysqli_close($dbc);

این تیکه کد هم یه کوئری به دیتابیس میفرسته که نام و نام خانوادگی و تاریخ ثبت نام و یوزر آیدی رو درخواست می کنه و به ترتیب تاریخ ثبت نام مرتبش میکنه منتها LIMIT داره و برای بار اول که $start اش معادله صفره یعنی از اولین رکورد نمایش میده و display هم که 10 هست و تو هر نوبت 10 تا رو نشون میده. بعد یه تیبل ایجاد میکنه و داده هارو توش نشون میده و بعد متغیر $r رو خالی میکنه و ارتباط با دیتابیس رو می بنده

کد:
if ($page > 1) {
    echo '<br /><p>';
    $current_page = ($start/$display) + 1 ;
    if ($current_page != 1) {
        echo '<a href="view_users2.php?s=' . ($start - $display) . '$p=' . $page . '"> Previous </a>';
    }
    for ($i = 1 ; $i <= $page; $i++) {
        if ($i != $current_page) {
            echo '<a href="view_users2.php?s=' . (($display * ($i - 1))) . '&p=' . $page . '">' . $i . '</a> ';
        } else {
            echo $i . ' ';
        }
    }
    if ($current_page != $page) {
        echo '<a href="view_users2.php?s=' . ($start + $display) . '&p=' . $page . '">Next </a>';
    }
    echo '</p>';
}
include('includes/footer.html');
?>

این تیکه هم که میگه اگر تعداد صفحات کمتر از یک صفحه بود که اصلا لینکی زیر صفحه نمایش نده ولی اگر بیشتر از یک صفحه بود :
- اول چک کنه که صفحه این که توش هست صفحه اول نتایج هست یا نه. اگر صفحه اول نیست ، لینک previous رو نشون بده با مقادیر مناسب

- بعد به تعداد صفحات، زیر صفحه لینک ایجاد کنه و تعداد صفحات رو بفرسته به نوار آدرس

- اگر تو صفحه آخر هم نیستیم، لینک next رو نشون بده

خوب الان ما تو کوئری ای که نام و نام خانوادگی رو می خوند اصلا از $page استفاده نکرده بودیم که بخواد تو صفحه تاثیر داشته باشه. در ضمن این شماره صفحه تو نوار آدرس ثابته و صفحه به صفحه هیچ تغییری نمی کنه.

چیزی که من حدس می زنم اینه:
هر چی هست توی این بخشه

کد:
if ( isset($_GET['p']) && is_numeric($_GET['p']) ) {
    $page = $_GET['p'];
} else {
    $q = "SELECT COUNT(user_id) FROM users";
    $r = @mysqli_query($dbc, $q);
    $row = @mysqli_fetch_array($r, MYSQLI_NUM);
    $records =$row[0];
    if ($records > $display) {
        $page = ceil($records/$display);
    } else {
        $page = 1;
    }
}

اگر متغیر page تو نوار آدرس هست از اون استفاده کن ولی اگر نیست اون مراحل بعدی رو انجام بده و یک کوئری بفرست به دیتابیس و تعداد صفحات رو مشخص کن
اینطوری با اول بازدید صفحه دو کوئری اجرا میشه. یکی برای مشخص کردن تعداد کاربران و یکی برای گرفتم نام و نام خانوادگی و ....

ولی وقتی $page میره تو نوار آدرس، بعد از کلیک روی لینک صفحات دیگه ، دیگه لازم نیست که کوئری اول اجرا بشه چون $page مشخصه و یه کوئری صرفه جویی میشه و به دیتابیس فشار کمتری میاد چون حتی بدون فرستادن $page به نوار آدرس هم همه چیز به درستی کار میکنه.

Wink

[تصویر: 2s9egxl.jpg]
آموزش CSS -- سی اس اس
طراحی سایت, طراحی وب
۲۵ بهمن ۱۳۸۷ ۰۹:۲۷ عصر
یافتن تمامی ارسال‌های این کاربر Like Post نقل قول این ارسال در پاسخ
ارسال موضوع  ارسال پاسخ 


پرش در انجمن: