MySQLi (MySQL Improved) একটি অত্যন্ত শক্তিশালী PHP লাইব্রেরি যা MySQL ডাটাবেসের সাথে ইন্টারঅ্যাক্ট করতে ব্যবহৃত হয়। এখানে একটি বাস্তব উদাহরণ ও ডেমো দেওয়া হলো, যার মাধ্যমে আপনি MySQLi ব্যবহার করে ডাটাবেস পরিচালনা এবং কার্যকরী PHP অ্যাপ্লিকেশন তৈরি করতে পারবেন।
ডাটাবেস তৈরি এবং টেবিল তৈরি
ধরা যাক, আমরা একটি "users" নামক টেবিল তৈরি করতে চাই, যেখানে ব্যবহারকারীদের নাম, ইমেইল এবং বয়স থাকবে।
প্রথমে, MySQLi ব্যবহার করে একটি নতুন ডাটাবেস তৈরি করা হবে এবং তার পর সেই ডাটাবেসে একটি টেবিল তৈরি করা হবে।
Step 1: ডাটাবেস তৈরি করা
<?php
// ডাটাবেস সংযোগ স্থাপন
$conn = new mysqli("localhost", "root", "", "");
// সংযোগ চেক
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// ডাটাবেস তৈরি
$sql = "CREATE DATABASE IF NOT EXISTS demoDB";
if ($conn->query($sql) === TRUE) {
echo "Database created successfully.";
} else {
echo "Error creating database: " . $conn->error;
}
// সংযোগ বন্ধ করা
$conn->close();
?>
Step 2: টেবিল তৈরি করা
<?php
// ডাটাবেস সংযোগ
$conn = new mysqli("localhost", "root", "", "demoDB");
// সংযোগ চেক
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// টেবিল তৈরি
$sql = "CREATE TABLE IF NOT EXISTS users (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL,
age INT(3) NOT NULL
)";
if ($conn->query($sql) === TRUE) {
echo "Table 'users' created successfully.";
} else {
echo "Error creating table: " . $conn->error;
}
// সংযোগ বন্ধ করা
$conn->close();
?>
ডাটা ইনসার্ট করা
এখন, আমরা টেবিলের মধ্যে কিছু ডাটা ইনসার্ট করব। এখানে Prepared Statements ব্যবহার করা হবে, যা SQL ইনজেকশন থেকে নিরাপত্তা প্রদান করবে।
<?php
// ডাটাবেস সংযোগ
$conn = new mysqli("localhost", "root", "", "demoDB");
// সংযোগ চেক
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// প্রিপেয়ার্ড স্টেটমেন্ট
$stmt = $conn->prepare("INSERT INTO users (name, email, age) VALUES (?, ?, ?)");
$stmt->bind_param("ssi", $name, $email, $age); // 's' মানে string, 'i' মানে integer
// ভ্যালু সেট করা
$name = "John Doe";
$email = "john@example.com";
$age = 28;
$stmt->execute();
$name = "Jane Smith";
$email = "jane@example.com";
$age = 25;
$stmt->execute();
// ইনসার্ট সফল হলে বার্তা প্রদর্শন
echo "New records created successfully";
// স্টেটমেন্ট এবং সংযোগ বন্ধ করা
$stmt->close();
$conn->close();
?>
ডাটা রিড করা
এখন, টেবিল থেকে ডাটা রিড (SELECT) করা হবে এবং PHP স্ক্রিপ্টে প্রদর্শন করা হবে।
<?php
// ডাটাবেস সংযোগ
$conn = new mysqli("localhost", "root", "", "demoDB");
// সংযোগ চেক
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// সিলেক্ট কোয়েরি
$sql = "SELECT id, name, email, age FROM users";
$result = $conn->query($sql);
// ডাটা রিড এবং প্রদর্শন
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"]. " - Age: " . $row["age"]. "<br>";
}
} else {
echo "0 results";
}
// সংযোগ বন্ধ করা
$conn->close();
?>
ডাটা আপডেট এবং ডিলিট করা
এখন, টেবিলের ডাটা আপডেট এবং ডিলিট করার একটি উদাহরণ দেওয়া হলো।
ডাটা আপডেট করা:
<?php
// ডাটাবেস সংযোগ
$conn = new mysqli("localhost", "root", "", "demoDB");
// সংযোগ চেক
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// প্রিপেয়ার্ড স্টেটমেন্ট দিয়ে ডাটা আপডেট করা
$stmt = $conn->prepare("UPDATE users SET age = ? WHERE id = ?");
$stmt->bind_param("ii", $age, $id); // 'i' মানে integer
// ভ্যালু সেট করা
$age = 30;
$id = 1;
$stmt->execute();
echo "Record updated successfully";
// স্টেটমেন্ট এবং সংযোগ বন্ধ করা
$stmt->close();
$conn->close();
?>
ডাটা ডিলিট করা:
<?php
// ডাটাবেস সংযোগ
$conn = new mysqli("localhost", "root", "", "demoDB");
// সংযোগ চেক
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// প্রিপেয়ার্ড স্টেটমেন্ট দিয়ে ডাটা ডিলিট করা
$stmt = $conn->prepare("DELETE FROM users WHERE id = ?");
$stmt->bind_param("i", $id); // 'i' মানে integer
// ভ্যালু সেট করা
$id = 1;
$stmt->execute();
echo "Record deleted successfully";
// স্টেটমেন্ট এবং সংযোগ বন্ধ করা
$stmt->close();
$conn->close();
?>
সারাংশ
এই ডেমোতে, আপনি MySQLi ব্যবহার করে ডাটাবেস তৈরি, টেবিল তৈরি, ডাটা ইনসার্ট, রিড, আপডেট এবং ডিলিট করার কার্যক্রম দেখেছেন। MySQLi-এর মাধ্যমে PHP কোডের মধ্যে ডাটাবেস সংযোগ স্থাপন এবং কার্যক্রম পরিচালনা করা সহজ এবং নিরাপদ। এটি একটি শক্তিশালী টুল যা ডেভেলপারদের ডাটাবেস ম্যানিপুলেশন করতে অত্যন্ত সহায়ক।
MySQLi (MySQL Improved) হল PHP এর একটি এক্সটেনশন যা MySQL ডেটাবেসের সাথে নিরাপদ এবং উন্নত যোগাযোগের জন্য ব্যবহৃত হয়। MySQLi ব্যবহার করে আপনি ডেটাবেস তৈরি, ম্যানেজ, টেবিল তৈরি এবং ডেটা ম্যানিপুলেট করতে পারেন। এই টিউটোরিয়ালে, আমরা MySQLi দিয়ে ডেটাবেজ তৈরি এবং তার ম্যানেজমেন্টের কিছু মৌলিক কাজ সম্পর্কে আলোচনা করব।
MySQLi দিয়ে ডেটাবেজ তৈরি
MySQLi ব্যবহার করে একটি নতুন ডেটাবেজ তৈরি করার জন্য প্রথমে ডেটাবেস সংযোগ স্থাপন করতে হবে এবং তারপর CREATE DATABASE SQL কমান্ড ব্যবহার করতে হবে।
উদাহরণ:
<?php
// MySQLi এর মাধ্যমে সংযোগ স্থাপন
$servername = "localhost";
$username = "root";
$password = "";
// সংযোগ তৈরি
$conn = new mysqli($servername, $username, $password);
// চেক করা যদি সংযোগ সফল হয়
if ($conn->connect_error) {
die("সংযোগ সফল হয়নি: " . $conn->connect_error);
}
// নতুন ডেটাবেজ তৈরি করা
$sql = "CREATE DATABASE myDatabase";
if ($conn->query($sql) === TRUE) {
echo "ডেটাবেজ সফলভাবে তৈরি হয়েছে";
} else {
echo "ডেটাবেজ তৈরি করতে সমস্যা হয়েছে: " . $conn->error;
}
// সংযোগ বন্ধ করা
$conn->close();
?>
এই কোডটি myDatabase নামে একটি নতুন ডেটাবেজ তৈরি করবে।
MySQLi দিয়ে টেবিল তৈরি
একটি ডেটাবেজ তৈরি করার পর, আমরা সেখানে টেবিল তৈরি করতে পারি। টেবিল তৈরি করার জন্য CREATE TABLE SQL কমান্ড ব্যবহার করতে হয়।
উদাহরণ:
<?php
// MySQLi এর মাধ্যমে সংযোগ স্থাপন
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "myDatabase";
// সংযোগ তৈরি
$conn = new mysqli($servername, $username, $password, $dbname);
// চেক করা যদি সংযোগ সফল হয়
if ($conn->connect_error) {
die("সংযোগ সফল হয়নি: " . $conn->connect_error);
}
// নতুন টেবিল তৈরি করা
$sql = "CREATE TABLE Users (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP
)";
if ($conn->query($sql) === TRUE) {
echo "টেবিল সফলভাবে তৈরি হয়েছে";
} else {
echo "টেবিল তৈরি করতে সমস্যা হয়েছে: " . $conn->error;
}
// সংযোগ বন্ধ করা
$conn->close();
?>
এই কোডটি Users নামে একটি টেবিল তৈরি করবে যার মধ্যে id, username, email এবং reg_date কলাম থাকবে।
MySQLi দিয়ে ডেটাবেজ ম্যানেজমেন্ট
MySQLi ব্যবহার করে আপনি ডেটাবেজের মধ্যে বিভিন্ন কাজ করতে পারেন যেমন টেবিলের তথ্য দেখা, আপডেট করা, ডিলিট করা, এবং ডেটাবেসের কলাম ম্যানেজমেন্ট।
১. ডেটাবেজের টেবিলের তথ্য দেখা
<?php
// MySQLi এর মাধ্যমে সংযোগ স্থাপন
$conn = new mysqli("localhost", "root", "", "myDatabase");
// চেক করা যদি সংযোগ সফল হয়
if ($conn->connect_error) {
die("সংযোগ সফল হয়নি: " . $conn->connect_error);
}
// টেবিলের তথ্য দেখা
$sql = "SHOW TABLES";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "টেবিল: " . $row["Tables_in_myDatabase"] . "<br>";
}
} else {
echo "কোনো টেবিল পাওয়া যায়নি";
}
// সংযোগ বন্ধ করা
$conn->close();
?>
২. টেবিলের কলাম পরিবর্তন (ALTER)
টেবিলের মধ্যে নতুন কলাম যুক্ত করতে ALTER কমান্ড ব্যবহার করতে হবে।
<?php
// MySQLi এর মাধ্যমে সংযোগ স্থাপন
$conn = new mysqli("localhost", "root", "", "myDatabase");
// চেক করা যদি সংযোগ সফল হয়
if ($conn->connect_error) {
die("সংযোগ সফল হয়নি: " . $conn->connect_error);
}
// টেবিলের কলাম পরিবর্তন করা
$sql = "ALTER TABLE Users ADD COLUMN age INT(3)";
if ($conn->query($sql) === TRUE) {
echo "কলাম সফলভাবে যোগ করা হয়েছে";
} else {
echo "কলাম যোগ করতে সমস্যা হয়েছে: " . $conn->error;
}
// সংযোগ বন্ধ করা
$conn->close();
?>
এই কোডটি Users টেবিলে একটি নতুন age কলাম যোগ করবে।
৩. টেবিলের ডেটা আপডেট করা (UPDATE)
<?php
// MySQLi এর মাধ্যমে সংযোগ স্থাপন
$conn = new mysqli("localhost", "root", "", "myDatabase");
// চেক করা যদি সংযোগ সফল হয়
if ($conn->connect_error) {
die("সংযোগ সফল হয়নি: " . $conn->connect_error);
}
// টেবিলের ডেটা আপডেট করা
$sql = "UPDATE Users SET email='newemail@example.com' WHERE id=1";
if ($conn->query($sql) === TRUE) {
echo "রেকর্ড সফলভাবে আপডেট হয়েছে";
} else {
echo "আপডেট করতে সমস্যা হয়েছে: " . $conn->error;
}
// সংযোগ বন্ধ করা
$conn->close();
?>
এই কোডটি Users টেবিলের id=1 রেকর্ডের email আপডেট করবে।
৪. টেবিল থেকে ডেটা ডিলিট করা (DELETE)
<?php
// MySQLi এর মাধ্যমে সংযোগ স্থাপন
$conn = new mysqli("localhost", "root", "", "myDatabase");
// চেক করা যদি সংযোগ সফল হয়
if ($conn->connect_error) {
die("সংযোগ সফল হয়নি: " . $conn->connect_error);
}
// টেবিল থেকে ডেটা ডিলিট করা
$sql = "DELETE FROM Users WHERE id=1";
if ($conn->query($sql) === TRUE) {
echo "রেকর্ড সফলভাবে ডিলিট হয়েছে";
} else {
echo "ডিলিট করতে সমস্যা হয়েছে: " . $conn->error;
}
// সংযোগ বন্ধ করা
$conn->close();
?>
এই কোডটি Users টেবিল থেকে id=1 রেকর্ডটি ডিলিট করবে।
সারাংশ
MySQLi দিয়ে আপনি ডেটাবেজ তৈরি এবং ম্যানেজ করতে পারেন। এটি আপনাকে ডেটাবেসের মধ্যে টেবিল তৈরি, ডেটা ইনসার্ট, আপডেট, ডিলিট, এবং বিভিন্ন ধরনের ম্যানেজমেন্ট কাজ করতে সাহায্য করে। এর মাধ্যমে আপনি ডেটাবেসের কাঠামো এবং ডেটার কার্যকারিতা উন্নত করতে পারেন। MySQLi এর মাধ্যমে ডেটাবেজ ম্যানেজমেন্ট করার সময় সঠিক SQL কমান্ড ব্যবহার করা গুরুত্বপূর্ণ, যেমন CREATE DATABASE, CREATE TABLE, ALTER, UPDATE, এবং DELETE।
MySQLi ব্যবহার করে Stored Procedures এবং Transactions পরিচালনা করা হয় ডেটাবেসের কার্যক্রমগুলোকে আরও কার্যকরী, সুরক্ষিত এবং দক্ষভাবে পরিচালনা করার জন্য।
- Stored Procedure একটি প্রি-ডিফাইন্ড SQL কোডের সিকোয়েন্স যা ডেটাবেসে সংরক্ষিত থাকে এবং যখন প্রয়োজন হয়, তখন এটি একাধিক কুয়েরি বা লজিক এক্সিকিউট করার জন্য কল করা যায়।
- Transaction হল একটি সিকোয়েন্সিয়াল অপারেশন যা এক বা একাধিক SQL কুয়েরি অন্তর্ভুক্ত করে এবং শুধুমাত্র সব কুয়েরি সফল হলে তা ডেটাবেসে কমিট করা হয়। যদি কোন একটি কুয়েরি ব্যর্থ হয়, তবে সমস্ত অপারেশন রোলব্যাক করা হয়।
1. Stored Procedure তৈরি এবং কল করা (MySQLi)
Stored Procedure তৈরি করা হয় এবং তারপর MySQLi দিয়ে এটি কল করা হয়। নিচে একটি উদাহরণ দেওয়া হলো যেখানে একটি stored procedure তৈরি করা হয়েছে এবং তারপর PHP ব্যবহার করে এটি কল করা হয়েছে।
1.1 Stored Procedure তৈরি করা:
এখানে একটি সিম্পল Stored Procedure তৈরি করা হচ্ছে যা একটি টেবিল থেকে নির্দিষ্ট নামের ইউজারের তথ্য রিট্রিভ করবে।
DELIMITER
DELIMITER ;
বিশদ ব্যাখ্যা:
DELIMITER $$ব্যবহার করা হয় কারণ MySQLে;একটি স্ট্যান্ডার্ড স্টেটমেন্ট ডিলিমিটার, কিন্তু stored procedure এর মধ্যে;ব্যবহার করা হয়, তাই ডিলিমিটার পরিবর্তন করতে হয়।CREATE PROCEDUREস্টেটমেন্ট ব্যবহার করে stored procedure তৈরি করা হয়।
1.2 Stored Procedure কল করা (PHP MySQLi):
PHP স্ক্রিপ্ট ব্যবহার করে এই stored procedure কল করা হবে:
<?php
// MySQLi সংযোগ তৈরি
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";
// সংযোগ তৈরি করা
$conn = new mysqli($servername, $username, $password, $dbname);
// সংযোগ সফল কিনা তা যাচাই করা
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// Stored Procedure কল করা
$stmt = $conn->prepare("CALL GetUserByName(?)");
$stmt->bind_param("s", $name);
// নামের ভ্যালু সেট করা
$name = "John Doe";
// স্টেটমেন্ট এক্সিকিউট করা
$stmt->execute();
// রেজাল্ট সেট করা
$result = $stmt->get_result();
// রেজাল্ট প্রিন্ট করা
while ($row = $result->fetch_assoc()) {
echo "ID: " . $row['id'] . " - Name: " . $row['name'] . "<br>";
}
// সংযোগ বন্ধ করা
$stmt->close();
$conn->close();
?>
বিশদ ব্যাখ্যা:
prepare()মেথডের মাধ্যমে stored procedure কল করা হয়।bind_param()ব্যবহার করে input parameter (username) এর জন্য ডেটা ব্যাইন্ড করা হয়।execute()মেথড কল করে stored procedure এক্সিকিউট করা হয়।
2. Transaction ব্যবহার (MySQLi)
Transaction ব্যবহারের মাধ্যমে একাধিক SQL কুয়েরি একসাথে কার্যকরীভাবে পরিচালনা করা যায়। যদি একটি কুয়েরি ব্যর্থ হয়, তাহলে পুরো ট্রানজ্যাকশন রোলব্যাক করা যায়।
2.1 Transaction কোড উদাহরণ:
এখানে দুটি টেবিল (যেমন accounts এবং transactions) আপডেট করার জন্য একটি ট্রানজ্যাকশন ব্যবহার করা হচ্ছে। যদি কোন একটিও কুয়েরি ব্যর্থ হয়, তবে সমস্ত পরিবর্তন রোলব্যাক হয়ে যাবে।
<?php
// MySQLi সংযোগ তৈরি
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";
// সংযোগ তৈরি করা
$conn = new mysqli($servername, $username, $password, $dbname);
// সংযোগ সফল কিনা তা যাচাই করা
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// ট্রানজ্যাকশন শুরু করা
$conn->begin_transaction();
try {
// প্রথম কুয়েরি: একাউন্ট থেকে টাকা কাটা
$stmt1 = $conn->prepare("UPDATE accounts SET balance = balance - 500 WHERE account_id = ?");
$stmt1->bind_param("i", $accountId1);
$accountId1 = 1;
$stmt1->execute();
// দ্বিতীয় কুয়েরি: অন্য একাউন্টে টাকা জমা
$stmt2 = $conn->prepare("UPDATE accounts SET balance = balance + 500 WHERE account_id = ?");
$stmt2->bind_param("i", $accountId2);
$accountId2 = 2;
$stmt2->execute();
// টেবিলে একটি ট্রানজেকশন রেকর্ড যোগ করা
$stmt3 = $conn->prepare("INSERT INTO transactions (from_account, to_account, amount) VALUES (?, ?, ?)");
$stmt3->bind_param("iii", $accountId1, $accountId2, $amount);
$amount = 500;
$stmt3->execute();
// সবকিছু সফল হলে কমিট করা
$conn->commit();
echo "Transaction completed successfully!";
} catch (Exception $e) {
// কোন সমস্যা হলে রোলব্যাক করা
$conn->rollback();
echo "Transaction failed: " . $e->getMessage();
}
// সংযোগ বন্ধ করা
$stmt1->close();
$stmt2->close();
$stmt3->close();
$conn->close();
?>
বিশদ ব্যাখ্যা:
begin_transaction()মেথড দিয়ে ট্রানজ্যাকশন শুরু হয়।- ট্রানজ্যাকশনের মধ্যে একাধিক SQL কুয়েরি এক্সিকিউট করা হয়।
- যদি সব কুয়েরি সফল হয়, তবে
commit()মেথড দিয়ে ট্রানজ্যাকশন কমিট করা হয়, অর্থাৎ সমস্ত পরিবর্তন ডেটাবেসে সেভ হয়। - যদি কোনো এক কুয়েরি ব্যর্থ হয়, তাহলে
rollback()মেথড দিয়ে সমস্ত পরিবর্তন রোলব্যাক করা হয়।
উপসংহার
- Stored Procedures এবং Transactions MySQLi এবং PHP এর মাধ্যমে ডেটাবেস অপারেশনগুলোকে আরও সুরক্ষিত এবং কার্যকরী করে তোলে।
- Stored Procedures ব্যবহার করলে কোড পুনঃব্যবহারযোগ্য হয় এবং ডেটাবেসের পারফরম্যান্স বৃদ্ধি পায়, কারণ সার্ভার সাইডে লজিক এক্সিকিউট করা হয়।
- Transactions ব্যবহার করা হলে, ডেটাবেসে একাধিক অপারেশন একত্রে সম্পন্ন হয় এবং কোনো একটি অপারেশন ব্যর্থ হলে সমস্ত অপারেশন রোলব্যাক করা হয়, যা ডেটাবেসের ডাটা ইন্টিগ্রিটি বজায় রাখে।
AJAX এবং Pagination ওয়েব অ্যাপ্লিকেশনে ডাটা ফেচিং এবং পেজিনেশন প্রক্রিয়াকে আরও দ্রুত ও ইউজার-ফ্রেন্ডলি করে তোলে। এখানে আমরা দেখব কিভাবে AJAX এবং MySQLi এর মাধ্যমে পেজিনেশন তৈরি করতে হয়, যাতে ব্যবহারকারী স্ক্রোলিং বা পেজ পরিবর্তন ছাড়াই ডাটা দেখতে পারে।
1. AJAX এবং Pagination এর জন্য টেবিলের তৈরি করা
প্রথমে, একটি HTML টেবিল তৈরি করতে হবে যা পেজিনেটেড ডাটা দেখাবে এবং AJAX কলের মাধ্যমে পেজ পরিবর্তন হবে।
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AJAX Pagination Example</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<style>
table, th, td {
border: 1px solid black;
border-collapse: collapse;
padding: 10px;
}
th, td {
text-align: center;
}
.pagination a {
margin: 5px;
padding: 5px 10px;
background-color: #f1f1f1;
border: 1px solid #ddd;
text-decoration: none;
}
.pagination a.active {
background-color: #4CAF50;
color: white;
}
</style>
</head>
<body>
<h2>AJAX Pagination with MySQLi</h2>
<table id="data-table">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Email</th>
</tr>
</thead>
<tbody>
<!-- Data will be dynamically loaded here -->
</tbody>
</table>
<div class="pagination" id="pagination-links">
<!-- Pagination links will be dynamically loaded here -->
</div>
<script>
// Initial call to load data
$(document).ready(function() {
loadData(1); // Load the first page by default
// Function to load data with AJAX
function loadData(page) {
$.ajax({
url: 'fetch_data.php',
type: 'GET',
data: { page: page },
success: function(response) {
var data = JSON.parse(response);
var html = '';
var pagination = '';
// Display data in the table
$.each(data.records, function(index, record) {
html += '<tr><td>' + record.id + '</td><td>' + record.name + '</td><td>' + record.email + '</td></tr>';
});
$('#data-table tbody').html(html);
// Create pagination links
for (var i = 1; i <= data.totalPages; i++) {
pagination += '<a href="javascript:void(0);" class="pagination-link' + (i == data.currentPage ? ' active' : '') + '" data-page="' + i + '">' + i + '</a>';
}
$('#pagination-links').html(pagination);
}
});
}
// Handle pagination link clicks
$(document).on('click', '.pagination-link', function() {
var page = $(this).data('page');
loadData(page);
});
});
</script>
</body>
</html>
এখানে:
- AJAX ব্যবহার করা হয়েছে ডাটা লোড এবং পেজ পরিবর্তন করার জন্য।
fetch_data.phpস্ক্রিপ্টের মাধ্যমে ডাটা ফেচ করা হবে এবং তারপর সেই ডাটা টেবিল ও পেজিনেশন লিঙ্কে প্রদর্শন করা হবে।- pagination লিঙ্কগুলি ডাইনামিকভাবে তৈরি হবে এবং ক্লিক করলে নতুন ডাটা লোড হবে।
2. PHP স্ক্রিপ্ট (fetch_data.php)
এখন, PHP স্ক্রিপ্টটি তৈরি করতে হবে যা MySQLi ব্যবহার করে ডাটা ফেচ করবে এবং AJAX এর মাধ্যমে পেজিনেশন ডেটা রিটার্ন করবে।
<?php
$host = "localhost";
$user = "root";
$password = "";
$dbname = "test";
// MySQLi connection
$conn = new mysqli($host, $user, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// Get the page number from AJAX request
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$records_per_page = 5; // Number of records per page
$offset = ($page - 1) * $records_per_page;
// Get the total number of records for pagination
$result = $conn->query("SELECT COUNT(*) AS total FROM users");
$row = $result->fetch_assoc();
$total_records = $row['total'];
$total_pages = ceil($total_records / $records_per_page);
// Fetch the records for the current page
$query = "SELECT * FROM users LIMIT $offset, $records_per_page";
$result = $conn->query($query);
// Prepare the data to be returned in JSON format
$records = [];
while ($row = $result->fetch_assoc()) {
$records[] = $row;
}
// Return the data as JSON
$response = [
'records' => $records,
'currentPage' => $page,
'totalPages' => $total_pages
];
echo json_encode($response);
$conn->close();
?>
এখানে:
- $page: AJAX কল থেকে প্রাপ্ত পেজ নম্বর।
- $records_per_page: প্রতি পৃষ্ঠায় কতগুলো রেকর্ড দেখানো হবে।
- $offset: রেকর্ডগুলোর সঠিক অবস্থান (স্কিপ) নির্ধারণ করতে ব্যবহৃত হয়।
- $total_records: টেবিলের মোট রেকর্ড সংখ্যা।
- $total_pages: মোট পৃষ্ঠার সংখ্যা নির্ধারণ করা হয়।
- $records: বর্তমান পৃষ্ঠার ডাটা যা JSON হিসেবে ফেরত দেওয়া হয়।
3. MySQL টেবিল তৈরি করা
আপনার ডাটাবেসে একটি টেবিল থাকতে হবে, যেখানে ডাটা থাকবে। নিচে একটি উদাহরণ:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL
);
এই টেবিলটি ব্যবহার করে আপনি ইউজারদের তথ্য রাখবেন। আপনাকে কিছু রেকর্ড ইন্সার্ট করতে হবে যাতে পেজিনেশন সঠিকভাবে কাজ করে।
INSERT INTO users (name, email) VALUES
('John Doe', 'john@example.com'),
('Jane Smith', 'jane@example.com'),
('Robert Brown', 'robert@example.com'),
('Emily Davis', 'emily@example.com'),
('Michael Johnson', 'michael@example.com'),
('Sarah Lee', 'sarah@example.com'),
('David Wilson', 'david@example.com'),
('Sophia Miller', 'sophia@example.com'),
('James Anderson', 'james@example.com'),
('Olivia Martinez', 'olivia@example.com');
এই ডাটা দিয়ে আপনার টেবিল পূর্ণ হবে এবং পেজিনেশন এবং AJAX কাজ করবে।
সারাংশ
- AJAX এবং MySQLi ব্যবহার করে পেজিনেশন তৈরি করা হয়েছে যাতে ব্যবহারকারী নতুন পেজে পরিবর্তন না করে ডাটা দেখতে পারে।
- পেজিনেশন ডাইনামিকভাবে AJAX কলের মাধ্যমে পরিচালিত হয়, যা ব্যবহারকারীর অভিজ্ঞতাকে আরও উন্নত করে তোলে।
- fetch_data.php স্ক্রিপ্টের মাধ্যমে ডাটাবেস থেকে পেজিনেটেড ডাটা ফেচ করা হয় এবং JSON ফরম্যাটে পাঠানো হয়।
MySQLi ব্যবহার করে ফাইল আপলোড এবং ম্যানেজমেন্ট করার প্রক্রিয়া বেশ সহজ। এখানে একটি সম্পূর্ণ উদাহরণ দেওয়া হলো যেখানে ফাইল আপলোড করা হয় এবং সেগুলি ডেটাবেসে সংরক্ষণ করা হয়।
1. ফাইল আপলোড ফর্ম তৈরি
প্রথমে, একটি HTML ফর্ম তৈরি করতে হবে যা ফাইল আপলোডের জন্য ব্যবহারকারীকে ইন্টারফেস সরবরাহ করবে।
HTML ফর্ম উদাহরণ:
<form action="upload.php" method="post" enctype="multipart/form-data">
<label for="file">Choose file to upload:</label>
<input type="file" name="file" id="file" required>
<button type="submit" name="submit">Upload</button>
</form>
এখানে, enctype="multipart/form-data" নিশ্চিত করে যে ফাইলটি সঠিকভাবে সার্ভারে পাঠানো হবে।
2. PHP স্ক্রিপ্ট লিখুন (upload.php)
এখন ফাইলটি সঠিকভাবে সার্ভারে আপলোড করতে PHP স্ক্রিপ্ট লিখতে হবে। স্ক্রিপ্টটি ফাইলটি আপলোড করবে এবং MySQLi ব্যবহার করে ডেটাবেসে তথ্য সংরক্ষণ করবে।
PHP স্ক্রিপ্ট উদাহরণ:
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "file_upload";
// MySQLi কানেকশন তৈরি
$conn = new mysqli($servername, $username, $password, $dbname);
// কানেকশন চেক করা
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
if (isset($_POST['submit'])) {
// ফাইল ইনপুট এবং গন্তব্য পাথ
$file = $_FILES['file'];
$fileName = $_FILES['file']['name'];
$fileTmpName = $_FILES['file']['tmp_name'];
$fileSize = $_FILES['file']['size'];
$fileError = $_FILES['file']['error'];
$fileType = $_FILES['file']['type'];
// ফাইল এক্সটেনশন চেক করা
$fileExt = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
$allowed = array('jpg', 'jpeg', 'png', 'pdf', 'docx');
if (in_array($fileExt, $allowed)) {
if ($fileError === 0) {
if ($fileSize < 5000000) { // ফাইল সাইজ 5MB এর কম হতে হবে
// ফাইল নাম পরিবর্তন করা
$fileNewName = uniqid('', true) . '.' . $fileExt;
$fileDestination = 'uploads/' . $fileNewName;
// ফাইল আপলোড করা
if (move_uploaded_file($fileTmpName, $fileDestination)) {
// ডেটাবেসে ফাইলের তথ্য সংরক্ষণ
$stmt = $conn->prepare("INSERT INTO files (file_name, file_path, file_size) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $fileNewName, $fileDestination, $fileSize);
if ($stmt->execute()) {
echo "File uploaded and saved to database successfully!";
} else {
echo "Error saving to database: " . $stmt->error;
}
$stmt->close();
} else {
echo "There was an error uploading your file.";
}
} else {
echo "Your file is too large.";
}
} else {
echo "There was an error uploading your file.";
}
} else {
echo "Invalid file type. Only JPG, JPEG, PNG, PDF, DOCX files are allowed.";
}
}
$conn->close();
?>
3. ডেটাবেস সারণী তৈরি করা
এখন, ডেটাবেসে ফাইলের তথ্য সংরক্ষণের জন্য একটি সারণী তৈরি করতে হবে। নিচে একটি SQL কুয়েরি দেওয়া হলো যা ফাইলের নাম, পাথ এবং সাইজ সংরক্ষণ করবে।
CREATE TABLE files (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
file_name VARCHAR(255) NOT NULL,
file_path VARCHAR(255) NOT NULL,
file_size INT NOT NULL,
upload_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
এটি ফাইল আপলোডের নাম, পাথ, সাইজ এবং আপলোডের তারিখ সংরক্ষণ করবে।
4. ফাইল তালিকা প্রদর্শন করা
আপলোড করা ফাইলগুলির তালিকা দেখানোর জন্য একটি স্ক্রিপ্ট তৈরি করা যেতে পারে। এটি ডেটাবেস থেকে ফাইলের তথ্য নিয়ে তালিকা প্রদর্শন করবে।
ফাইল তালিকা স্ক্রিপ্ট (list_files.php):
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "file_upload";
// MySQLi কানেকশন তৈরি
$conn = new mysqli($servername, $username, $password, $dbname);
// কানেকশন চেক করা
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT * FROM files";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// ফাইলের তালিকা দেখানো
while($row = $result->fetch_assoc()) {
echo "ID: " . $row["id"]. " - Name: " . $row["file_name"]. " - Size: " . $row["file_size"] . " bytes <br>";
echo "<a href='" . $row["file_path"] . "' target='_blank'>Download</a><br><br>";
}
} else {
echo "No files found.";
}
$conn->close();
?>
এই স্ক্রিপ্টটি ডেটাবেস থেকে ফাইলের তথ্য নিয়ে ইউজারকে ডাউনলোড লিঙ্কসহ ফাইল তালিকা প্রদর্শন করবে।
5. ফাইল ম্যানেজমেন্ট এবং নিরাপত্তা
ফাইল আপলোডের সময় কিছু নিরাপত্তা ব্যবস্থা নেওয়া গুরুত্বপূর্ণ। নিচে কিছু নিরাপত্তা পদ্ধতি দেওয়া হলো:
- ফাইল টাইপ ভ্যালিডেশন: শুধুমাত্র নির্দিষ্ট ফাইল টাইপ (যেমন, JPG, PNG, PDF) আপলোডের অনুমতি দিন।
- ফাইল সাইজ সীমাবদ্ধ করা: ফাইলের সাইজ 5MB-এর কম হতে হবে (এটি উপরের কোডে দেওয়া হয়েছে)।
- ফাইল নাম পরিবর্তন: ফাইলের নাম এক্সটেনশন সহ পরিবর্তন করুন যাতে ফাইলের আসল নাম সহজে অনুমান করা না যায়।
- ফোল্ডার নিরাপত্তা:
uploads/ফোল্ডারে .htaccess ফাইল দিয়ে নিরাপত্তা বাড়ান।
সারাংশ
MySQLi ব্যবহার করে ফাইল আপলোড এবং ম্যানেজমেন্ট করা সহজ, তবে নিরাপত্তা নিশ্চিত করতে কিছু ব্যবস্থা গ্রহণ করা জরুরি। ফাইল আপলোডের সময় টাইপ, সাইজ চেক, এবং নিরাপদ স্টোরেজ নিশ্চিত করতে হবে। এই প্রক্রিয়ায় ফাইল ডেটাবেসে সংরক্ষণ, তালিকা প্রদর্শন এবং ডাউনলোড করার প্রক্রিয়া অন্তর্ভুক্ত করা হয়েছে।
Read more