נגישות       נגישות
שינוי גודל טקסט:
א א א
שינוי צבעי האתר:
? מקשי קיצור:

לחיצה חוזרת ונשנית על המקש Tab תעביר אתכם בין הקישורים והאזורים השונים בעמוד.

הפעלת מקשי הקיצור תלויה בדפדפן שבו אתם משתמשים.

Internet Explorer, Chrome ובגרסאות ישנות של Firefox: לחצו על מקש Alt ועל מקש המספר או האות על-פי הרשימה. ב Firefox 3 ומעלה: לחצו על המקשים Alt + Shift + המספר או האות.

S - עבור לתוכן הדף
L - חיפוש
1- עמוד הבית
2 - פרוייקטים
3 - מדריכים
4 - אודות
5 - צרו קשר
6 - הצהרת נגישות
 

גלריית תמונות דינמית באמצעות PHP ו-MySQL

מחבר:
בתאריך:

במדריך זה, אסביר כיצד לייצר גלריית תמונות שמבוססת על מסד-נתונים MySQL, ומשולב בה טופס שמאפשר לגולש לבחור תמונות לפי תגיות. כדי לצפות בקוד בפעולה, לחצו על הכפתור.

להדגמה

 

מדריך זה מבוסס על מדריך קודם שמסביר כיצד לייצר טבלת PHP דינמית שמספר השורות והתאים בה משתנה לפי מספר הפריטים. ניתן לגלוש למדריך שמסביר זאת מהקישור המצורף:

מדריך – קוד לכתיבת טבלת PHP דינמית

 

טבלת phpMyAdmin

את הטבלה הבאה צריך ליצור במסד הנתונים. במקרה זה, השתמשתי בטבלה שמבוססת על MySQL. הטבלה מפנה לתמונות שנמצאות בתיקייה images.

type description image id
reshetech רשת-טק images/img1.jpg 1
dance דאנס-אקדמי images/img2.jpg 2
dance דאנס-אקדמי 1 images/img3.jpg 3
dance דאנס-אקדמי 2 images/img4.jpg 4
dance דאנס-אקדמי 3 images/img5.jpg 5
reshetech רשת-טק 1 images/img6.jpg 6
reshetech רשת-טק 2 images/img7.jpg 7
reshetech רשת-טק 3 images/img8.jpg 8
reshetech רשת-טק 4 images/img9.jpg 9

 

הוספת קובץ connect.inc.php

הקובץ connect.inc.php מקשר את קובץ ה-PHP למסד הנתונים.

<?php
$error_message = 'Could not connect.';
if((@!mysql_connect('localhost' , 'root' ,'')) || (@!mysql_select_db('database_name')))
{
    //במקרה של תקלה בתקשורת עם מסד הנתונים, הסקריפט יפסיק לרוץ ויציג את הודעת השגיאה שהגדרנו מראש
    die($error_message);
}
?>

 

הכללת הקובץ connect.inc.php בקובץ index.php

הכללת הקובץ inc תיעשה באמצעות require_once מיד בתחילתו של הקובץ index.php, ובין תגיות ה-<head>. השימוש ב-require הוא מפני שאם לא נצליח ליצור תקשורת עם מסד הנתונים, לא נוכל להציג דבר. מטה-תגית שרצוי להוסיפה גם כן היא:

<META CHARSET = 'UTF-8'>

מפני שזו תגית שמאפשרת הצגת עברית בדף הטמ"ל.

<head>
    <META CHARSET = "UTF-8">
    <?php
        require_once 'connect.inc.php';
   ?>
</head>

 

הוספת הטופס לדף ההטמ"ל

את הטופס ניצור בין תגיות ה-form, והוא מאפשר בחירה בין תמונות לפי התגיות שמוגדרות להן. נשתמש בשיטה POST כדי לשלוח את הטופס לדף index.php שבו הוא משובץ. בין תגיות ה-select נכלול את האפשרויות השונות לסוג התמונות. 

<body>
    <form method='POST' action='index.php' dir='rtl'>
         <p id='instruction'>בחר את סוג התמונה:</p>
         <select name='type'>
               <option value='reshetech'>רשת-טק</option>
               <option value='dance'>דאנס-אקדמי</option>
               <option value='*'>כל התמונות</option>
         </select>
         <input type='submit' value='שלח'>
    </form>
</body>

האפשרויות שיישלח הטופס בשיטת POST הן: 'type='reshetech' , type='dance' או '*'=type, והשאילתה שנייצר, ונשלח למסד הנתונים, היא בהתאם.

 

קוד PHP שמקבל את הערכים ששולח הטופס ומייצר מערך שעליו תתבסס הטבלה

המשכו של הקוד מקבל את הערכים ששולח הטופס באמצעות []POST_$, ומזין אותם למשתנה query$. אחר כך מיוצרת שאילה למסד הנתונים, שמשתנה לפי הבחירה של המשתמש:

SELECT image, description FROM gallery WHERE type= $type;

את השאילתה מריצים עם ()mysql_query. 

בהמשך, מהתוצאות שמוחזרות מבסיס הנתונים, מיוצר המערך gallery_items$ באמצעות לולאת while, שרצה לפי מספר התוצאות שמוחזרות, ומוסיפה פריטים למערך בכל פעם באמצעות ()array_push.

<?php
//?האם הטופס הוגש כהלכה
if(empty($_POST['type']) || !isset($_POST['type'])){
      /*    אם הטופס לא הוגדר כהלכה, או שזו הפעם הראשונה שהגולש הגיע לדף יישלח הטופס
     type='*'     */
     $type = '*';
}else{
      //אם המשתמש בחר בסוג התמונה, ושלח את הטופס אז נאחסן את מה שהוא שלח במשתנה
      //$type
      //זו פונקציה שהופכת את כל האותיות לאותיות קטנות strtolower()
      //משמשת מסיבות של אבטחה htmlentities()
      $type = htmlentities(strtolower($_POST['type']));
}
//השאילתה עצמה
if($type == '*')
{
      //$query המשתנה
      //שולף נתונים ממסד הנתונים בהתאם לשאילתה הרצויה למשתמש
      //במידה ולא נשלחה שאילתה או שהמשתמש מעוניין בהצגת כל התמונות, זו השאילתה שתשמש אותו
      $query = "SELECT image, description FROM gallery";
}
else
{
     //במידה והמשתמש מעוניין בתמונות מסוג מסוים
      $query = "SELECT image, description FROM gallery"." WHERE type= ' ".$type." ' ";
}
//נריץ את השאילתה במסד הנתונים
$query_run = mysql_query($query);
//התנהגות במידה והשאילתה אינה מחזירה כל תוצאה
if (mysql_num_rows($query_run)== NULL){
       echo '<p dir="rtl">מציג את כל התמונות. בחרו את סוג התמונות שבו אתם מעוניינים.</p>';
}
else
{
       // $gallery_items הערכים שמתקבלים ממסד הנתונים מתווספים למערך ששמו
       $gallery_items = Array();
       while($row = mysql_fetch_array($query_run))
       {
             array_push($gallery_items, Array($row['image'], $row['description']));
       }
?>

 

יצירת טבלה דינמית שמבוססת על המערך שיצרנו בסעיף קודם

סעיף זה שמסביר כיצד לייצר טבלת PHP דינמית, הוסבר כבר במדריך קודם, ולכן לא אחזור על ההסבר במדריך הנוכחי.

<?php
//ספירת מספר הפריטים במערך
$number_items = count($gallery_items);
//קביעת מספר הפריטים בכל שורה בטבלה
$number_items_per_row = 4;
//חישוב מספר השורות בטבלה
$number_of_rows = ceil($number_items / $number_items_per_row);
?>
<table>
      <?php
     //לופ שמייצר את מספר השורות הרצוי לנו בטבלה לפי החישוב שביצענו לפני כן
     for($k=0; $k < $number_of_rows; $k++){
     ?>
         <tr>
        <?php
         //קביעת מספר התאים בכל שורה
         for($i=0; $i < $number_items_per_row; $i++){
         ?>
             <td>
             <?php
             //חישוב מספר התמונות שמוצג משתנה בין השורה הראשונה והשורות הבאות
             //חישוב עבור השורה הראשונה
             if($k==0)
             {
                  $m = $i;
             }
             //חישוב עבור השורה השנייה ומעלה
             elseif($k>0)
             {
                 $m = ($k*$number_items_per_row) + $i;
             }
             //צריך להציג רק פריטים קיימים
             if($m < $number_items)
             {
                  //הצגת התמונות כוללת את התמונה עצמה ואת התיאור
                 echo '<img src='.'"'.$gallery_items[$m][0].'"'.'description='.' " '.$gallery_items[$m][1].' " '.'width="100" height="100" />';
             }
             ?>
             </td>
        <?php } ?>
        </tr>
<?php } ?>
</table>
<?php } ?>
</body>
</html>

 

סיכום

במדריך זה הראינו כיצד ניתן לייצר גלריית תמונות דינמית מבוססת מסד נתונים מסוג SQL, וקוד PHP.

לכל מדריכי ה-PHP

 

הוסף תגובה חדשה

 

= 6 + 4