תחי ישראל - אין לנו ארץ אחרת

תחי ישראל -אין לנו ארץ אחרת

גלריית תמונות דינמית באמצעות 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

 

 

אהבתם? לא אהבתם? דרגו!

0 הצבעות, ממוצע 0 מתוך 5 כוכבים

 

 

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

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

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

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

השימוש שלך באתר מהווה ראייה להסכמתך עם הכללים והתקנות שנוסחו בהסכם תנאי השימוש.

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

 

 

ענה על השאלה הפשוטה הבאה כתנאי להוספת תגובה:

דג למים הוא כמו ציפור ל...?