الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف اتحكم فى عرض هذه البيانات ؟

مغلق
بدأه abduljawaad saad في 8 يونيو 2007 · 22 رد · 2,034 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لدى قاعدة بيانات لمواضيع مختلفة, بها جدول يحتوى على ثلاث حقول : رقم الموضوع + عنوان الموضوع + الموضوع نفسه

على صفحة الموقع أظهر عناوين المواضيع كروابط منسقة بطريقة رأسية (عنوان تحت عنوان) يمكن لمتصفح الموقع ان يختار احد منها لعرض الموضوع المرتبط بها

ونظرا لكثرة المواضيع المخزنة في قاعدة البيانات فأن العناوين التي تظهر على صفحة الموقع تكون كثيرة مما يؤدي ذلك الى زيادة طول الصفحة بشكل كبير

السؤال : أريد إضافة كود يعرض لي عددا محددا من العناوين (مثلا عدد 10 عنوان ) بحيث أوضح لمتصفح الموقع كيف يستعرض العناوين التالية لتظهر مكان العناوين الحالية وهكذا حتى نهاية المواضيع المخزنة في قاعدة البيانات

مع العلم أنى استخدم الكود التالي لعرض رابط كل عنوان هكذا :

while ($array = mysql_fetch_array($tquery))
	 {
			?>
				<a href="mypage.php?main=2&thread=<? echo $array['id']; ?>">	 
				<span style="text-decoration: none"><font face="Tahoma" size="2">
				<? echo $array['title'];?></font></span></a> <br>
			<?				
	   }

حيث أن id = رقم الموضوع & title = عنوان الموضوع

mytrial_a.gif

نحن بحاجة لتدوين تجاربنا , نحن بحاجة إلى اكتشاف قيمة التجربة, هذه تجربتى مثيرة ومفيدة ...,

هنا
#2

تستطيع استخدام التحكم مثل التالي والأخير والسابق والأول

سوف أعطيك الفكرة المبدئية:

في select query تضيف LIMIT كالتالي:

$sql = "SELECET * FROM table LIMIT $start, $end";

بحيث يكون متغير start هو أول رقم يبدأ به ومتغير end آخر رقم تريد عرضه، يعني لو كانت قيمة start هي 0 و end هي 10 فسيعرض لك عشرة نتائج فقط

الجزء الثاني من الكود يضاعف البداية والنهاية بحيث يجعل الصفر 10 والعشرة 20 كلما تضغط على رابط "التالي" وينقص القيمة كلما تضغط على رابط "السابق"

تحديد البداية يكون باستخدام متغير $_GET تضع فيه بداية القيمة تتزايد وتتناقص حسب الضغط على الرابط وتحديد النهاية يكون بإضافة ما تريد من نتائج لعرضها بمعنى لو أردت عرض 10 نتائج فتزيدها على قيمة البداية ولو تريد عرض 15 نتيجة فتفعل نفس الشيء

حاول وسوف أساعدك عند وجود صعوبة

بالتوفيق

sign3.jpg
#3

استاذى / عبد الله

مرة أخرى شكرا لك .. سأحاول بناء على ما تفضلت به وسوف ارجع لك مرة أخرى لأبلغك بنتيجة محاولتى .. حاول ان تراجع الموضوع من فترة لأخرى .. لك تحياتى

mytrial_a.gif

نحن بحاجة لتدوين تجاربنا , نحن بحاجة إلى اكتشاف قيمة التجربة, هذه تجربتى مثيرة ومفيدة ...,

هنا
#4

يمكنك اخي الفاضل إستخدام هذا الكود وهو مريح جداً لك

$sql = "SELECET * FROM أسم الجدولLIMIT 10 order by id desc";

طبعاً هذا 10 فقط.. ويمكنك تغيير العدد كما تشاء

والسلام عليكم ورحمة الله وبركاته

تم تعديل هذه المشاركة بواسطة majd2002 في 9 يونيو 2007 في 19:02

لا اله الا الله محمد رسول الله

شبكة شباب IT

http://www.shababit.net

shababit.gif

#5

في جملة الإستعلام كما ذكروا الشباب تقوم بالإستعلام عن مثلا المقالات بتحديد رقم البداية التي يتدا فيها برنامج قاعدة البيانات بجل المعلومات و عدد الrecords و من ثم تقوم بعرضها اما بالنسبة لعرض الصفحات فأقوم بها كالتالي:

if($Web->GET("page")!="")
		{
			$Offset = ($Web->GET("page")-1)*10;
		}
		else {
			$Offset = 0;
		}
		$Num = $AM->countArticles($Web->GET("catid"));
		$NumOfPages = $Num / 10;
		if($Num % 10 > 0) $NumOfPages++;
		for($i=1;$i<=$NumOfPages;$i++)
		{
			$Pages .= "<a href='articles.php?catid=".$Web->GET("catid")."&page=".$i."'>".$i."</a> || ";
		}

لاحظ كيفية ترتيب الصفحات على لنكات بحيث عندما يضغط المستخدم على اي رقم يذهب المتصفح الى الصفحة التي تجلب 10 مقالات من صفحة 2 اي

2 - 1 * 10 = 10

سوف يبدا من مقالة رقم 10 و يحضر 10 مقالات

راكان الحنيطي

Be Open Source

opensource-550x4752.gif

#6

اتقدم بخالص شكرى وتقديرى لكل ما ساهم بالرد عن سؤالى وسوف اجتهد فى استيعاب الحلول المقدمة ثم استخدمها لعرض الموضوعات

وبالنسبة للأخ / عبد الله عياش00 لقد جربت الجزء الأول من الكود وفعلا عرضت عدد من لنكات المواضيع ولكن بعد ان أضع يدويا قيم للمتغيرstart و المتغير end.. ولقد حاولت فى تنفيذ الجزء الثانى من الكود أى عرض اللنكات عن طريق مضاعفة البداية والنهاية ولكنى فشلت فى تحقيق هذا وكانت محاولتى كالأنتى:

تخيلت لينك التالى يكون هكذا:

<a href="index.php?start=<? ECHO $start=$start+5?> & end=<? ECHO $end=$end+10?>">التالي</a>

تخيلت لينك السابق يكون هكذا:

<a href="index.php?start=<? ECHO $start=$start-5?> & end=<? ECHO $end=$end-10?>">السابق</a>

أرجو تصحيح اخطائى00

نقطه أخرى أريد توضيحها:

انا اعرض اللينكات داخل جدول فى مكان محدد على الصفحة الرئيسية وأرغب ايضا فى اظهارها فى نفس المكان عندما أستخدم اسلوب التالي أو السابق

تم تعديل هذه المشاركة بواسطة abduljawaad saad في 10 يونيو 2007 في 11:01

mytrial_a.gif

نحن بحاجة لتدوين تجاربنا , نحن بحاجة إلى اكتشاف قيمة التجربة, هذه تجربتى مثيرة ومفيدة ...,

هنا
#7

أولا لا تترك فراغات قبل أو بعد علامة & لأن ذلك سيسبب مشكلة

ثانيا، لو تكتب لنا الكود كامل حتى نصحح لك أي خطأ قد يواجهك

سوف أشرح لك الفكرة بشكل أفضل

أولا تحدد نقطة البداية وعدد الحقول اللتي تريد عرضها في كل صفحة بهذا الشكل:

//  المتغير المسئول عن نقطة البداية في كل صفحة وسكيون تلقائيا بقيمة واحد في بداية الصفحة
$begin = 1;

// إذا تم الانتقال للصفحة الثانية فيعني أن المتغير سوف يحصل على قيمة جديدة من GET
if(isset($_GET['page']))
{
	$begin = $_GET['page'];
}

// عدد الحقول في كل صفحة
$end = 10;

// نحسب الآن التغيير الحاصل في كل صفحة بضرب نقطة البداية في عدد الصفوف، لاحظ أننا ننقص واحد في كل عملية لأن قاعدة البيانات تبدأ من 0 وليس واحد ونحن نريد عرض الرقم واحد في عنوان الصفحة
$start = ($begin - 1) * $end;

$sql = "SELECT val FROM randoms LIMIT $start, $end";
$query = mysql_query($sql);

من الأشياء المهمة، بقي شيء واحد وهو تجزيء عدد الصفوف المراد عرضها لمعرفة كم صفحة سيكون لدينا وهذا سيتم من خلال قسمة مجموع الصفوف كلها على عدد الصفوف المراد عرضها

أولا لمعرفة كل عدد الصفوف فنحتاج لكويري آخر يعطينا كامل العدد بهذا الشكل

$sql_table = "SELECT id FROM $table_name WHERE language='$language'";
$query_table = mysql_query($sql_table) or die(mysql_error());
$table_rows = mysql_num_rows($query_table);

بعدها نقوم بعملية القسمة

$limit = ceil($table_rows / $end);

الآن نكتب الروابط لكل شيء

if($start > 1) {
   $page = $start - 1;
   $back = "<a id='nav2' href='show.php?page=$page'> < </a>";
   $first = "<a id='nav2' href='show.php?page=1'> << </a>";
} else {
   $back = ' < ';
   $first = ' << ';
}

if($start < $limit) {
   $page = $start + 1;
   $next = "<a id='nav2' href='show.php?page=$page'> > </a>";
   $last = "<a id='nav2' href='show.php?page=$limit")."'> >> </a>";
} else {
   $next = ' > ';
   $last = ' >> ';
}

// كتابة سطر التحكم		
$navigate_all = "{$first} {$back}   {$next} {$last}";

جرب وأخبرنا

sign3.jpg
#8

شكرا لك استاذ عبد الله عياش .. بالتأكيد لقد اوضحت لى امور كثيرة كنت اجهلها .. سوف اجرب واعود اليك ان شاء الله

mytrial_a.gif

نحن بحاجة لتدوين تجاربنا , نحن بحاجة إلى اكتشاف قيمة التجربة, هذه تجربتى مثيرة ومفيدة ...,

هنا
#9

الأخ / عبد الله عياش

آمل الإجابة على هذه التساؤلات

- فى جملة $sql_table = "SELECT id FROM $table_name WHERE language=$language

ماذا تقصد language=$language

<a id='nav2' href='show.php?page=$page'>

ماذ تقصد id='nav2

mytrial_a.gif

نحن بحاجة لتدوين تجاربنا , نحن بحاجة إلى اكتشاف قيمة التجربة, هذه تجربتى مثيرة ومفيدة ...,

هنا
#10

الأمثلة اللي أوردها لك هي من بعض الأكواد التي أستخدمها، فلا تعير اهتماما كبيرا للتفاصيل، أنا كنت أشرح لك الفكرة فحاول تطبيق الفكرة على الأكواد اللتي تعمل عليها أنت ولا تأخذها كما هي حتى لا تختلط عليك الأمور. خذ الفكرة فقط

حتى أكون منصفا في جوابي، احذف "WHERE language=$language" واحذف "id=nav2"

بالتوفيق

sign3.jpg
#11

استاذ / عبد الله عياش

اعود اليك مرة أخرى بعد ان حاولت مرارا وتكرارا ولكنى فشلت .. حاولت تحقيق ما أريده مسترشدا بالكود الذى شرحته سابقا ولكن يبدوا انى لا اسير على الطريق الصحيح 000 مرفق صورة تعبر عن الفكرة التى اريد تحقيقها وكذلك الكود الذى استخدمته.. أرجو تصويب إخطائى وتوجيهى الى الأسلوب الصحيح للحل ولكم خالص شكرى

لقد لاحظت عند الضغط على أحد روابط التحكم عدم تنفيذ جملة (['if ($_get['page مما يدل على عدم تعريف أو عدم تعيين المتغير page

<tr>
<td height="133" align="right" valign="top" bgcolor="#FFFFCC"><font face="Tahoma" size="2">
<p align="center"></p></font>

<?
   include('config.php');

   $begin=1;
   if ($_get['page'])
	  {
		$begin= $_get['page'];
	  }

   $end=5;
   $start= ($begin - 1) * $end;

   $sql = "SELECT * FROM thread WHERE articale_status=1 LIMIT $start,$end";
   $tquery = mysql_query($sql);
   $num = mysql_num_rows($tquery);

   if ($num <1)
		 {
			echo '<CENTER>';
			echo '<BR>';
			echo '<BR><B><FONT COLOR=GREEN>لايوجد هناك أي موضوع</a></FONT></BR></B>';
		 }
 //لينكات المواضيع تظهر بهذا الكود
   else
		 {
			echo '<p align="center"></p>';
			while ($array = mysql_fetch_array($tquery))
			{
				?>
				<a href="index.php?websrc=view_one.php&main=2&thread=<? echo $array['id']; ?>">
				<font face="Tahoma" size="2">
				<? echo $array['title'];?></font></a>
				<br>
				<?
			}
		 }
?>
</td>
<tr>
<td>

//هنا اضع كود التحكم
<?
	$sql_table = "SELECT id FROM thread";
	$tquery_table = mysql_query($sql_table) or die (mysql_error());
	$num_table = mysql_num_rows($tquery_table);

	$limit = ceil($num_table/$end);

	if ($start > 1)
	   {
		 $page = $start - 1;
		 $back = "<a href='index.php&page=$page'> < </a>";
		 $first = "<a href='index.php&page=1'> << </a>";
	   }
	else
	   {
		 $back = ' < ';
		 $first = ' << ';
	   }

	if ($start < $limit)
	   {
		 $page = $start + 1;
		 $next = "<a href='index.php&page=$page'><span style='text-decoration: none'>></span></a>";
		 $last = "<a href='=index.php&page=$limit'><span style='text-decoration: none'>>></span></a>";
	   }
	else
	   {
		 $next = ' > ';
		 $last = ' >> ';;
	   }

	   $navigate_all="{$first} {$back}   {$next} {$last}";
	   echo $navigate_all;
?>
</td>
</tr>
<tr>
<td height="30" align="center" bgcolor="#CCCC00">
<p align="right"><font face="Tahoma" size="2"><b>الزائرون</b></font></td>
</tr>

post-1254-1181749343_thumb.jpg

mytrial_a.gif

نحن بحاجة لتدوين تجاربنا , نحن بحاجة إلى اكتشاف قيمة التجربة, هذه تجربتى مثيرة ومفيدة ...,

هنا
#12

بسم الله

أولا، من الأفضل أن تضع لنا نتيجة العمل اللذي قمت به، حتى نعرف مكان الخلل.

ثانيا، هل يوجد في الجدول thread عمود باسم id؟

$sql_table = "SELECT id FROM thread";

إذا لم يكن هناك فبدله إلى *

$sql_table = "SELECT * FROM thread";

بالتوفيق

sign3.jpg
#13

شكرا لك أخى / عبد الله

أولا : نتيجة هذا الكود تظهر كما انا موضح فى الصورة المرفقه.. ولكن عندما اضغط على أى لينك تحكم لا احصل على أى نتيجة مثلا لو ضغطت على لينك التالى لا احصل على الخمس مواضيع التالية وهكذا ..

ثانيا: نعم يوجد في الجدول thread عمود باسم id .. وأنا تأكدت أن الكود ($limit = ceil($num_table/$end$ يحسب بدقه عدد السجلات أو الصفوف فى كامل الجدول

post-1254-1181810660_thumb.jpg

تم تعديل هذه المشاركة بواسطة abduljawaad saad في 14 يونيو 2007 في 11:45

mytrial_a.gif

نحن بحاجة لتدوين تجاربنا , نحن بحاجة إلى اكتشاف قيمة التجربة, هذه تجربتى مثيرة ومفيدة ...,

هنا
#14

لديك خطأ واضح هنا:

$back = "<a href='index.php&page=$page'> < </a>";
$first = "<a href='index.php&page=1'> << </a>";

وهنا:

$next = "<a href='index.php&page=$page'><span style='text-decoration: none'>></span></a>";
$last = "<a href='=index.php&page=$limit'><span style='text-decoration: none'>>></span></a>";

يجب أن تكون أول علامة بعد امتداد php هي علامة الاستفهام واللتي تدل على بداية الكويري سترينج

التصحيح:

$back = "<a href='index.php?page=$page'> < </a>";
$first = "<a href='index.php?page=1'> << </a>";
$next = "<a href='index.php?page=$page'><span style='text-decoration: none'>></span></a>";
$last = "<a href='=index.php?page=$limit'><span style='text-decoration: none'>>></span></a>";

بالتوفيق

sign3.jpg
#15

عملت التصحيح ولكن لم تتغير النتيجة

واضح ان تنفيذ جملة (['if ($_get['page فى كل مره يتم فيها الضغط على اى زر تحكم يكون نتيجته fales أى ان المتغير begin تظل قيمته = 1 ولا تتغير ابدا

لأنه من المفروض عندما اضغط على أى زر تحكم تكون نتيجة اختبار الشرط (['if ($_get['page هى true وبالتالى تتغير قيمة المتغير begin التى تؤثر على قيمة المتغير start وهكذا

mytrial_a.gif

نحن بحاجة لتدوين تجاربنا , نحن بحاجة إلى اكتشاف قيمة التجربة, هذه تجربتى مثيرة ومفيدة ...,

هنا
#16

جرب

if(isset($_GET['page'])) {
  $begin = $_GET['page'];
} else {
  $begin = 1;
}
sign3.jpg
#17

لو حددت begin = 1 فلن يحدث شئ 00000 لكنى حددت قيمة المتغير begin = 2 فحصلت على الخمس لينكات التالية

إذن المشكله الأساسية هي : عدم تغير قيمة المتغير begin نتيجة لعدم تعيين قيمة المتغير page بعد الضغط على أى من لينكات التحكم

أرجو ان يكون تحليلي هذا صحيح..

mytrial_a.gif

نحن بحاجة لتدوين تجاربنا , نحن بحاجة إلى اكتشاف قيمة التجربة, هذه تجربتى مثيرة ومفيدة ...,

هنا
#18

للرفع

mytrial_a.gif

نحن بحاجة لتدوين تجاربنا , نحن بحاجة إلى اكتشاف قيمة التجربة, هذه تجربتى مثيرة ومفيدة ...,

هنا
#19

السلام عليكم :

هاذا كود مجرب ورائع وأنا جاهز لأي إستفسار

 <?php

	@mysql_connect($localhost, $user, $password) or die("ERROR--CAN'T CONNECT TO SERVER");
	@mysql_select_db($database) or die("ERROR--CAN'T CONNECT TO DB");

	$limit		  = 25;			   
	$query_count	= "SELECT count(*) FROM table";	
	$result_count   = mysql_query($query_count);	
	$totalrows	  = mysql_num_rows($result_count); 

	if(empty($page)){
		$page = 1;
	}


	$limitvalue = $page * $limit - ($limit); 
	$query  = "SELECT * FROM table LIMIT $limitvalue, $limit";		
	$result = mysql_query($query) or die("Error: " . mysql_error()); 

	if(mysql_num_rows($result) == 0){
		echo("Nothing to Display!");
	}

	$bgcolor = "#E0E0E0"; // light gray

	echo("<table>");

	while($row = mysql_fetch_array($result)){
		if ($bgcolor == "#E0E0E0"){
			$bgcolor = "#FFFFFF";
		}else{
			$bgcolor = "#E0E0E0";
		}

	echo("<tr bgcolor=".$bgcolor.">n<td>");
	echo($row["users"]);
	echo("</td>n<td>");
	echo($row["usersID"]);
	echo("</td>n</tr>");
	}

	echo("</table>");

	if($page != 1){ 
		$pageprev = $page--;

		echo("<a href="$PHP_SELF&page=$pageprev">PREV".$limit."</a> "); 
	}else{
		echo("PREV".$limit." ");
	}

	$numofpages = $totalrows / $limit; 

	for($i = 1; $i <= $numofpages; $i++){
		if($i == $page){
			echo($i." ");
		}else{
			echo("<a href="$PHP_SELF?page=$i">$i</a> ");
		}
	}


	if(($totalrows % $limit) != 0){
		if($i == $page){
			echo($i." ");
		}else{
			echo("<a href="$PHP_SELF?page=$i">$i</a> ");
		}
	}

	if(($totalrows - ($limit * $page)) > 0){
		$pagenext = $page++;

		echo("<a href="$PHP_SELF?page=$pagenext">NEXT".$limit."</a>"); 
	}else{
		echo("NEXT".$limit); 
	}

	mysql_free_result($result);

?>
#20

استاذ spyshow

الكود افادنى جدا .. جربته واعطي نتائج طيبة .. انا احاول تطويره حتى انفذ الفكرة التى عرضتها .. ترقب ان اعود اليك فى اى تساؤل

لك تحياتى وتقديرى

mytrial_a.gif

نحن بحاجة لتدوين تجاربنا , نحن بحاجة إلى اكتشاف قيمة التجربة, هذه تجربتى مثيرة ومفيدة ...,

هنا
#21

أخي عبد الجواد لاشكر على واجب وأنا جاهز لأي إستفسار

وعلى أي حال هذا كود أخر مماثل لكن أصغر مع شرح

 <?php

// Database Connection
include 'db.php';

// If current page number, use it
// if not, set one!

if(!isset($_GET['page'])){
	$page = 1;
} else {
	$page = $_GET['page'];
}

// Define the number of results per page
$max_results = 10;

// Figure out the limit for the query based
// on the current page number.
$from = (($page * $max_results) - $max_results); 

// Perform MySQL query on only the current page number's results

$sql = mysql_query("SELECT * FROM pages LIMIT $from, $max_results");

while($row = mysql_fetch_array($sql)){
	// Build your formatted results here.
	echo $row['title']."<br />";
}

// Figure out the total number of results in DB:
$total_results = mysql_result(mysql_query("SELECT COUNT(*) as Num FROM pages"),0);

// Figure out the total number of pages. Always round up using ceil()
$total_pages = ceil($total_results / $max_results);

// Build Page Number Hyperlinks
echo "<center>Select a Page<br />";

// Build Previous Link
if($page > 1){
	$prev = ($page - 1);
	echo "<a href="".$_SERVER['PHP_SELF']."?page=$prev"><<Previous</a> ";
}

for($i = 1; $i <= $total_pages; $i++){
	if(($page) == $i){
		echo "$i ";
		} else {
			echo "<a href="".$_SERVER['PHP_SELF']."?page=$i">$i</a> ";
	}
}

// Build Next Link
if($page < $total_pages){
	$next = ($page + 1);
	echo "<a href="".$_SERVER['PHP_SELF']."?page=$next">Next>></a>";
}
echo "</center>";
?>
#22

شكرا مرة ثانيه أخى spyshow على هذا الكود الجديد .. طبعا سأجربه واعود اليك

ولكن فى الكود الأول : أريد وضع ارقام الصفحات داخل تحديد كما هو موجود فى هذه الصفحة .

mytrial_a.gif

نحن بحاجة لتدوين تجاربنا , نحن بحاجة إلى اكتشاف قيمة التجربة, هذه تجربتى مثيرة ومفيدة ...,

هنا
#23

أخي هي أعتقد أنها حركة css سأحاول جلبها لك بس بعد يوم الخميس (بس خلص الفحص :angry: )

هذا الموضوع مغلق.

مواضيع مشابهة