Katika somo lililotangulia tuliona jinsi ya ku futa data kwenye database na kwenye folda. Sasa katika somo hili tunakwenda kujifunza jinsi ya ku upload mafaili mengi yaani ku upload mafaili zaidi ya moja. Pia utajifunza ku upload taarifa hizi kwenye database. Tutakwenda kutumia table yetu ile ile ya blog.

 

Kipengele muhimu cha kwanza ni kwenye html. Kwanza kabisa ni kuiruhusu html form iweze kuchaguwa mafaili zaidi ya moja. Kufanya hivi utatakiwa kuongeza attribute ingine ya form. Attrib ute hii inaitwa multiple ambayo itakuwa na value multiple. Mfano multiple="multiple" pia kwenye name ya value yake utaiongezea mabano yale ya array [] mfano name="file[] hivyo basi html form itaonekana kama hivi:-

html>

<html lang="en">

<head>

   <meta charset="utf-8">

   <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

   <title>Uploadstitle>

head>

<body>

<div class="container mt-5">

   <form action="upload.php" method="post" enctype="multipart/form-data" >

    <input type="file" name="file[]" multiple="multiple">

     <button type="submit" name="submit">Upload Filesbutton>

   form>

div>

body>

html>

 

Sasa sehemu ya msingi zaidi ni faili la PHP ambalo linakwenda ku process data zetu. Kwanza tunatakiwa tupate orodha ya mafaili am bayo mtumiaji ameselect. Hapa mafaili tutayapata kwa njia ya array.

 

Hivyo basi kuna njii kuu 2 ambazo tunaweza kuzitumia ili kupata mafaili hayo. Kwanza ni kwa kutumia for loop. Tulishajifunza kuhusu for loop. Tutatumia mfano kama ule am bao tulitumia. Njia ya pili ni kwa kutumoia froeach loop. Piua tyutatumia mfano kama ule. 

 

  1. Kwa kutumia for loop:

Kwanza tutahitajika kujuwa idadi ya mafaili ambayo tayari yapo. Kama unakumbuka kwenye somo la for loop nilikwambia kuwa utatumia hii kama unajuwa kuwa code zako ziutatakiwa ku run mara ngapi. Hivyo ni lazima tujuwe kuna mafaili mangapi kwenye array.

 

Kufanya hivi tutatumia count() function. Tutaweka parameta iliyo na majina ya mafaili kutoka kwenye POST method. Mfano count($_FILES['file']['tmp_name'])

Hapo tutahitajika kuwa na variable maalimu ambayo ina hiyo idadi ya mafaili. Hivyo tutafanya $num_files = count($_FILES['file']['tmp_name']);Hatuwa inayofuata ni ku loop hiyo idadi ya mafaili kwenye for mfano for($i=0; $i < $num_files;$i++)Hivyo code zetu zitaendelea ku run maadamu idadi ya mafaili haijafikiwa. Ila ikifikiwa itastop.

 

Katiika mfano wa hapo juu utaona kuwa variable ambayo ndio ita run autoincrement ni $i, hivyo ili kupata majina ya mafaili yote tutahitajika ku loop na $i . hivyo itaonekana kama hivi $_FILES['file']['name'][$i])Hapo utaweza kupata majina ya mafaili yote. Na kama utahitaji taarifa ingine kwa mfano $_FILES['file']['tmp_name'][$i]au $_FILES['file']['size'][$i]Na kadhalika. 

 

Baada ya kumaliza ku upload tutahitajika kuingiza taarifa hizo kwenye database. Hii tutafanya kama tulivyofanya kwenye somo lililopita. Mfano $sql="INSERT INTO blog(image) VALUES ('$fn')";

 

if (mysqli_query($conn, $sql)) {

   header("location: index.php");

} else {

   echo "failed";

}

 

Hivyo basi code za ku upload mafaili zitaonekana hivi:-

 

include 'config.php';

if(isset($_FILES['file']['tmp_name']))

{

//set upload directory

   $target_dir = "upload/";

   $num_files = count($_FILES['file']['tmp_name']);

   for($i=0; $i < $num_files;$i++)

   {

       $fn = $_FILES['file']['name'][$i];

           if(move_uploaded_file($_FILES['file']['tmp_name'][$i],$target_dir.$_FILES['file']['name'][$i]))

           {

               $sql="INSERT INTO blog(image) VALUES ('$fn')";

 

               if (mysqli_query($conn, $sql)) {

                   header("location: index.php");

               } else {

                   echo "failed";

               }

           }

           else

           {

              echo "failed";

           }

       }

}

?>

 

  1. Kwa kutumia foreach loop:

Nimeshakueleza kuwa data hizi za mfaili zipo kwenye mfumo wa arrya na ndio maana kule kwenye html tumetumia []. Pia ulishajifunza kuwa foreach inatumika kwnye array tu. sasa hapa tutakwenda kufanya associate array kama ambavyo tuliona kwenye somo la foreach loop kwa mfano foreach($_FILES['fileUpload']['name'] as $i=>$val)

Kisha taarifa ambazo zote tutazitaka itatubidi zipitie kwenye lloop hii. Hivyo tutatumia variable $i kwa ajili ya kupata vaklue ya hizo loop.

Mfano wa code nzima:

 

 

include 'config.php';

if(isset($_FILES['file']['tmp_name']))

{

//set upload directory

   $target_dir = "upload/";

   $num_files = count($_FILES['file']['tmp_name']);

       foreach($_FILES['fileUpload']['name'] as $i=>$val){

   {

       $fn = $_FILES['file']['name'][$i];

           if(move_uploaded_file($_FILES['file']['tmp_name'][$i],$target_dir.$_FILES['file']['name'][$i]))

           {

               $sql="INSERT INTO blog(image) VALUES ('$fn')";

 

               if (mysqli_query($conn, $sql)) {

                   header("location: index.php");

               } else {

                   echo "failed";

               }

           }

           else

           {

              echo "failed";

           }

       }

   }

}

 

?>

 

 

MWISHO

Mpaka kufika hapa tumemaliza somo letu la ku upload mafaili zaidi ya moja. Tukutane kwenye somo la 13 tutaona jinsi ya kutengeneza faili na kusoma faili kwa kutumia php.