Լրացուցիչ Բլոկների Տեսակներ (EBT) - Դասավորության Կառուցողի նոր փորձառություն❗

Լրացուցիչ Բլոկների Տեսակներ (EBT) - ձևավորված, կարգավորելի բլոկների տեսակներ՝ սլայդշոուներ, ներդիրներ, քարտեր, բացվող ցանկեր և շատ ուրիշներ։ Ներառված կարգավորումներ՝ ֆոնի, DOM տուփի, JavaScript փլագինների համար։ Փորձեք դասավորությունների կառուցման ապագան արդեն այսօր։

EBT մոդուլների ցուցադրական տարբերակներ Ներբեռնել EBT մոդուլները

❗Լրացուցիչ Պարբերությունների Տեսակներ (EPT) - Պարբերությունների նոր փորձառություն

Լրացուցիչ պարբերության տեսակներ (EPT) - անալոգիական պարբերության վրա հիմնված մոդուլների հավաքակազմ։

EPT մոդուլների ցուցադրական տարբերակներ Ներբեռնել EPT մոդուլները

Scroll

PHP դասեր - Դաս 3.5 - Աշխատանք MySQL տվյալների բազայի հետ։ JOIN օպերատոր։ Ֆայլերի բեռնում սերվեր

10/05/2025, by Ivan
Մինչ այս դասը գրելը, ես երկար մտածում էի, թե ինչպես ավելի լավ ներկայացնել JOIN օպերատորով հարցումները։ Բանն այն է, որ JOIN օպերատորը անհրաժեշտ է մի քանի աղյուսակներից միաժամանակ տվյալներ ընտրելու համար։ Իսկ եթե պահանջվում է երկրորդ աղյուսակ, եկեք այն ստեղծենք։ Ես առաջարկում եմ ստեղծել ֆայլերի աղյուսակ, որոնք այս դասում կբեռնենք ձևի միջոցով։ Այսպիսով, դասը կլինի երկու ուղղությամբ՝ ԲԴ-ի հետ աշխատանք և ձևերի հետ աշխատանք։ Եկեք սկսենք ֆայլ բեռնման դաշտի ավելացումից։ Որպեսզի ձևը կարողանա ֆայլեր բեռնել, անհրաժեշտ է ավելացնել համապատասխան տիպը ձևի պարամետրերում.
$content .=	'<form action="' . $_SERVER['PHP_SELF'] . '" method="post" enctype="multipart/form-data">';
Այսպես, enctype պարամետրով մենք ցույց ենք տալիս բրաուզերին, որ այս ձևով ֆայլեր ենք փոխանցելու։ Հիմա, երբ ձևը պատրաստ է, ավելացնենք ֆայլ բեռնման դաշտը.
public function display_admin() { // հաղորդագրության մուտքագրման մեթոդ
  $content = '';
  
  $content .= '<form action="' . $_SERVER['PHP_SELF'] . '" method="post" enctype="multipart/form-data">';
  $content .= '<label for="title">Անուն:</label><br />';
  $content .= '<input name="title" id="title" type="text" maxlength="150" />';
  $content .= '<div class="clear"></div>';
  $content .= '<label for="bodytext">Հաղորդագրություն:</label><br />';
  $content .= '<textarea name="bodytext" id="bodytext"></textarea>';
  $content .= '<input type="file" name="filename">'; // ֆայլ բեռնման դաշտ
  $content .= '<div class="clear"></div>';
  $content .= '<input type="submit" value="Ավելացնել հաղորդագրություն" />';
  $content .= '</form>';
  $content .= '<p><a href="/index.php">Վերադառնալ գլխավոր էջ</a></p>';

  return $content;
}
input տիպի file դաշտով մենք բեռնում ենք ֆայլը։ Եթե պահպանեք ֆայլերը և թարմացնեք հաղորդագրության ավելացման էջը, ապա կտեսնեք ֆայլ բեռնման դաշտը։ Եկեք տեսնենք, թե ինչպես է ֆայլը փոխանցվում POST հարցմամբ։
public function write($p) {
  print_r($p); // տպում ենք ձևի զանգվածը
  print_r($_FILES); // տպում ենք ֆայլերի զանգվածը
  $sql = 'INSERT INTO Messages (title, bodytext, created) VALUES ("'. $p["title"] . '", "' . $p["bodytext"] . '", ' . time() . ')';
  return mysql_query($sql);
}
Այժմ բեռնենք որևէ ֆայլ և պահպանենք հաղորդագրությունը։ Բոլոր ֆայլերը, որոնք կբեռնվեն ձևի միջոցով, հասանելի կլինեն $_FILES սուպերգլոբալ փոփոխականում։ Ես բեռնեցի ֆայլ և ստացա հետևյալ զանգվածները․
Array (
  [title] => asfasdf
  [bodytext] => asfasdf
)
Array (
  [filename] => Array (
    [name] => ip.txt
    [type] => text/plain
    [tmp_name] => Y:\tmp\phpAA.tmp
    [error] => 0
    [size] => 13
  )
)
Այժմ, երբ ունենք տվյալների և ֆայլի զանգված, եկեք ստեղծենք ֆայլերի աղյուսակ՝ բեռնված ֆայլերը պահպանելու համար։ Սկսենք ստեղծելով `files` թղթապանակ կայքի արմատում և տվեք նրան 777 իրավունքներ, որպեսզի սցենարը կարողանա այնտեղ ֆայլեր գրել։ Փոխենք buildDB() մեթոդի տվյալների բազայի հարցումը.
$sql = "CREATE TABLE Messages (
  mid int NOT NULL AUTO_INCREMENT,
  PRIMARY KEY(mid),
  title varchar(15),
  bodytext text,
  created  int(11),
  file int(11)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

CREATE TABLE Files (
  fid int NOT NULL AUTO_INCREMENT,
  PRIMARY KEY(fid),
  filename varchar(255),
  filepath varchar(255),
  filemime varchar(255),
  filesize int(10),
  timestamp int(10)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;";
Բացի նոր աղյուսակի ավելացումից, Messages աղյուսակում ավելացվում է fid դաշտ՝ որպես արտաքին բանալի Files աղյուսակի համար։ Files աղյուսակի դաշտերն են՝ - **fid** – ֆայլի հիմնական բանալի, - **filename** – ֆայլի անունը, - **filepath** – ֆայլի ուղին կայքի արմատից, - **filemime** – ֆայլի MIME տիպը (օր.՝ text/plain, image/png), - **filesize** – ֆայլի չափը բայթերով, - **timestamp** – բեռնման ժամանակը։ Այժմ գրենք կոդը ֆայլը պահպանելու և տվյալների բազա ավելացնելու համար։ Կարող եք անհրաժեշտ դաշտերը ստեղծել phpMyAdmin-ով։
if($_FILES["filename"]["size"] > 1024*3*1024) {
  echo ("Ֆայլի չափը գերազանցում է երեք մեգաբայթը");
  exit;
}
if(is_uploaded_file($_FILES["filename"]["tmp_name"])) {
  move_uploaded_file($_FILES["filename"]["tmp_name"], "/files/".$_FILES["filename"]["name"]);
} else {
  echo("Ֆայլի բեռնման սխալ");
}
Այժմ ֆայլը պահպանվում է `files` թղթապանակում։ Հաջորդ քայլով ֆայլի տվյալները ավելացնում ենք Files աղյուսակում։
$sql = 'INSERT INTO Files (filename, filepath, filemime, filesize, timestamp)
VALUES ("'. $_FILES['filename']['name'] . '",
"files/' . $_FILES['filename']['name'] . '",
"'. $_FILES['filename']['type'] .'",
'. $_FILES['filename']['size'] .',
'. time() . ')';

mysql_query($sql);
Այժմ, երբ ֆայլի գրառումը բազայում ավելացվեց, ավելացնում ենք նաև հաղորդագրությունը՝
$sql = 'INSERT INTO Messages (title, bodytext, created, fid)
VALUES ("'. $p["title"] . '", "' . $p["bodytext"] . '", ' . time() . ',LAST_INSERT_ID())';
Ուշադրություն դարձրեք `LAST_INSERT_ID()` ֆունկցիային։ Այն վերադարձնում է տվյալների բազայում վերջին ավելացված գրառման ID-ը, տվյալ դեպքում՝ ֆայլի։ Հիմա գրառումները ավելացվում են աղյուսակներում, մնում է դրանք ցուցադրել JOIN օպերատորի օգնությամբ։ Փոխենք հաղորդագրությունների ընտրության հարցումը՝ ցուցադրելու նաև ֆայլի անունը։
public function display_public() {
  $content = '';
  $sql = 'SELECT * FROM Messages LEFT JOIN Files ON Messages.fid=Files.fid ORDER BY mid DESC';
  $result = mysql_query($sql) or die(mysql_error());
  ...
JOIN օպերատորը այստեղ օգտագործված է LEFT ձևով։ Դեռևս ընդունում ենք, որ LEFT JOIN-ը վերադարձնում է բոլոր գրառումները, այդ թվում՝ fid չունեցողները։ Եթե տպենք հարցման արդյունքը՝
while($row = mysql_fetch_array($result)) {
  print_r($row);
Կտեսնենք որ ցուցադրվում են տվյալներ թե՛ հաղորդագրությունների, թե՛ ֆայլերի աղյուսակից։ Եթե ֆայլ չկա, դաշտերը կլինեն դատարկ, հետևաբար պետք է դրանք ստուգել։
if(!empty($row['filename'])) {
  $content .= '<p>Կցված ֆայլ՝ <a target="_blank" href="/'. $row['filepath'] .'">'. $row['filename'] .'</a></p>';
}
Այժմ հաղորդագրության հետ նաև կցված ֆայլի հղում կցուցադրվի։ Հաջորդ դասում կծանոթանանք JOIN օպերատորի ավելի մանրամասն կիրառությանը՝ մի քանի աղյուսակների հետ աշխատանքում։ Ինչպես միշտ, կցվում է նաև թարմացված տվյալների բազայի պատճենը, պատրաստված phpMyAdmin-ով։