نوشتن کد بک آپ گیری

saalek110

Well-Known Member
اولا بگم که خود phpmyadmin می تواند یک جدول تنها را هم اکسپورت کند...
ولی اگر جدول شما خیلی بزرگ باشد ، الان دقیقا نمی دونم چقدر بزرگ .....شاید نشود یک باره کل جدول را اکسپروت کرد....


ولی phpmyadmin فکر کنم باز می تواند تکه تکه جدول شما را اکسپورت کند.


پس شاید این تاپیک بیهوده باشد.

ولی چون نمی خوام چیزی پاک بشه ، در این تاپیک پست می زنم.
 
آخرین ویرایش:

saalek110

Well-Known Member
کوئری ساختن جدول:

SQL:
CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    column3 datatype,
   ....
);

ما حین سایت سازی ، با چنین کوئری هایی کار نکردیم ، حالا در فایل بک آپ ، یک کوئری ساخت جدول داریم..همون جدول پست ها....
آخر هر خط ویرگول داره و بعو پرانتز سمی کلون.
مثال:
SQL:
CREATE TABLE Persons (
    PersonID int,
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
);

منبع:


من این طور نوشتم:
PHP:
<?php
require".....ادرس فایل کانکشن

$sql="CREATE TABLE Persons (
    PersonID int,
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
);";

result=.........

?>

باعث افزوده شدن یک تیبل شد.
این تست برای این بود ، چون داخل فایل بک اپ ، یک کوئری ساخت جدول بود شییه این ولی بزرگ تر...خواستم ببین طرز استفاده اش چطوره.

بله ، با اجرای کوئری خلق جدول داخل فایل بک آپ ، جدول پستهای ۲۹ ستونه در هاست من ایجاد شد.
ستون های اضافه اش را میشه پاک کرد بعدا.

حالا باید کوئری insert اون را اجرا کنم تا ۵۰ پست بیاید داخل جدول ساخته شده.
بله ، انجام شد. ۵۲ پست الان در جدول است.

من به این فکر افتادم همه ۱۴۰۰ پست را یکجا دریافت کنم، به جای دانلود فایل ، نمایش را انتخاب کردم و کوئری insert تمامی پست ها را نشان داد.
 

saalek110

Well-Known Member



در سایت بالا یک کد برای بک آپ گیری هست...

PHP:
<?php

 

/**

 * @function backupDatabaseTables

 * @author Termijan

 * @link http://netparadis.com

 * @usage Backup database tables and save in SQL file

 */

function backupDatabaseTables($dbHost,$dbUsername,$dbPassword,$dbName,$tables = '*'){

    //connect & select the database

    $db = new mysqli($dbHost, $dbUsername, $dbPassword, $dbName);

 

    //get all of the tables

    if($tables == '*'){

        $tables = array();

        $result = $db->query("SHOW TABLES");

        while($row = $result->fetch_row()){

            $tables[] = $row[0];

        }

    }else{

        $tables = is_array($tables)?$tables:explode(',',$tables);

    }

 

    //loop through the tables

    foreach($tables as $table){

        $result = $db->query("SELECT * FROM $table");

        $numColumns = $result->field_count;

 

        $return .= "DROP TABLE $table;";

 

        $result2 = $db->query("SHOW CREATE TABLE $table");

        $row2 = $result2->fetch_row();

 

        $return .= "\n\n".$row2[1].";\n\n";

 

        for($i = 0; $i < $numColumns; $i++){

            while($row = $result->fetch_row()){

                $return .= "INSERT INTO $table VALUES(";

                for($j=0; $j < $numColumns; $j++){

                    $row[$j] = addslashes($row[$j]);

                    $row[$j] = ereg_replace("\n","\\n",$row[$j]);

                    if (isset($row[$j])) { $return .= '"'.$row[$j].'"' ; } else { $return .= '""'; }

                    if ($j < ($numColumns-1)) { $return.= ','; }

                }

                $return .= ");\n";

            }

        }

 

        $return .= "\n\n\n";

    }

 

    //save file

    $handle = fopen('db-backup-'.time().'.sql','w+');

    fwrite($handle,$return);

    fclose($handle);

}

نحوه فراخوانی :

از تابع backupDatabaseTables() برای ساختن بکاپ دیتابیس در قالب فایل sql به اینصورت استفاده کنید



backupDatabaseTables('localhost','root','*****','netparadis');
 

saalek110

Well-Known Member

دریافت بکاپ از mysql با php



سالک: کد زیر کار می کند. کنار فایل یک کپی از فایل کانکشن را قرار دهید ، داخل فایل کانکشن باید دو جا ccoonn را به conn تبدیل کنید. بالای کد فایل کانکشن ساخته شده را require کنید.
با انجام این کار فایل بک آپ دانلود می شود.

ولی حروف فارسی خوانا نیست. شاید collation خوبی را انتخاب نکرده ایم. شاید هم اشکال از جای دیگس. شاید در کد اگر charset تغییر کند نتیجه متفاوت بشود.

من بک آپ را روی سایتی که اینجا با هم ساختیم امتحان کردم نه در هاست های دیگر.
collation ئی که تنظیم کردیم شاید نمی خوره با تظیم کد زیر.


ولی در اون هاست دیگر که فروم phpbb داشتم ، خود mysql که بک آپ گرفت ، ... حروف فارسی قابل خواندن بود.
البته در فایل بک آپ کد زیر ، حروف به همان شکلی بود که در دیتابیس دیده می شود. یک سری شکلهای گرد.. پس ممکن است اگر فایل بک آپ روی دیتابیس دوباره لود شود ، هیچ مشکلی نداشته باشد. نیاز به تست و بررسی دارد.



PHP:
<?php
// Database configuration
$host = "localhost";
$username = "root";
$password = "";
$database_name = "mydatabasename";
// Get connection object and set the charset
$conn = mysqli_connect($host, $username, $password, $database_name);
$conn->set_charset("utf8");
// Get All Table Names From the Database
$tables = array();
$sql = "SHOW TABLES";
$result = mysqli_query($conn, $sql);
while ($row = mysqli_fetch_row($result)) {
$tables[] = $row[0];
}
$sqlScript = "";
foreach ($tables as $table) {
// Prepare SQLscript for creating table structure
$query = "SHOW CREATE TABLE $table";
$result = mysqli_query($conn, $query);
$row = mysqli_fetch_row($result);
$sqlScript .= "\n\n" . $row[1] . ";\n\n";
$query = "SELECT * FROM $table";
$result = mysqli_query($conn, $query);
$columnCount = mysqli_num_fields($result);
// Prepare SQLscript for dumping data for each table
for ($i = 0; $i < $columnCount; $i ++) {
while ($row = mysqli_fetch_row($result)) {
$sqlScript .= "INSERT INTO $table VALUES(";
for ($j = 0; $j < $columnCount; $j ++) {
$row[$j] = $row[$j];
if (isset($row[$j])) {
$sqlScript .= '"' . $row[$j] . '"';
} else {
$sqlScript .= '""';
}
if ($j < ($columnCount - 1)) {
$sqlScript .= ',';
}
}
$sqlScript .= ");\n";
}
}

$sqlScript .= "\n";
}

if(!empty($sqlScript))
{
// Save the SQL script to a backup file
$backup_file_name = $database_name . '_backup_' . time() . '.sql';
$fileHandler = fopen($backup_file_name, 'w+');
$number_of_lines = fwrite($fileHandler, $sqlScript);
fclose($fileHandler);
// Download the SQL backup file to the browser
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . basename($backup_file_name));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($backup_file_name));
ob_clean();
flush();
readfile($backup_file_name);
exec('rm ' . $backup_file_name);
}
?>
 

saalek110

Well-Known Member
دو تا فایل بک آپ گیر در پستهای قبل داشتیم.
اولی:
PHP:
<?php
 
/**
 * @function    backupDatabaseTables
 * @author      Termijan
 * @link        http://netparadis.com
 * @usage       Backup database tables and save in SQL file
 */
function backupDatabaseTables($dbHost,$dbUsername,$dbPassword,$dbName,$tables = '*'){
    //connect & select the database
    $db = new mysqli($dbHost, $dbUsername, $dbPassword, $dbName);
 
    //get all of the tables
    if($tables == '*'){
        $tables = array();
        $result = $db->query("SHOW TABLES");
        while($row = $result->fetch_row()){
            $tables[] = $row[0];
        }
    }else{
        $tables = is_array($tables)?$tables:explode(',',$tables);
    }
 
    //loop through the tables
    foreach($tables as $table){
        $result = $db->query("SELECT * FROM $table");
        $numColumns = $result->field_count;
 
        $return .= "DROP TABLE $table;";
 
        $result2 = $db->query("SHOW CREATE TABLE $table");
        $row2 = $result2->fetch_row();
 
        $return .= "\n\n".$row2[1].";\n\n";
 
        for($i = 0; $i < $numColumns; $i++){
            while($row = $result->fetch_row()){
                $return .= "INSERT INTO $table VALUES(";
                for($j=0; $j < $numColumns; $j++){
                    $row[$j] = addslashes($row[$j]);
                    $row[$j] = ereg_replace("\n","\\n",$row[$j]);
                    if (isset($row[$j])) { $return .= '"'.$row[$j].'"' ; } else { $return .= '""'; }
                    if ($j < ($numColumns-1)) { $return.= ','; }
                }
                $return .= ");\n";
            }
        }
 
        $return .= "\n\n\n";
    }
 
    //save file
    $handle = fopen('db-backup-'.time().'.sql','w+');
    fwrite($handle,$return);
    fclose($handle);
}
نحوه فراخوانی :
از تابع backupDatabaseTables() برای ساختن بکاپ دیتابیس در قالب فایل sql به اینصورت استفاده کنید

backupDatabaseTables('localhost','root','*****','netparadis');
 

saalek110

Well-Known Member
دومی:
PHP:
<?php
// Database configuration
$host = "localhost";
$username = "root";
$password = "";
$database_name = "mydatabasename";
// Get connection object and set the charset
$conn = mysqli_connect($host, $username, $password, $database_name);
$conn->set_charset("utf8");
// Get All Table Names From the Database
$tables = array();
$sql = "SHOW TABLES";
$result = mysqli_query($conn, $sql);
while ($row = mysqli_fetch_row($result)) {
$tables[] = $row[0];
}
$sqlScript = "";
foreach ($tables as $table) {
// Prepare SQLscript for creating table structure
$query = "SHOW CREATE TABLE $table";
$result = mysqli_query($conn, $query);
$row = mysqli_fetch_row($result);
$sqlScript .= "\n\n" . $row[1] . ";\n\n";
$query = "SELECT * FROM $table";
$result = mysqli_query($conn, $query);
$columnCount = mysqli_num_fields($result);
// Prepare SQLscript for dumping data for each table
for ($i = 0; $i < $columnCount; $i ++) {
while ($row = mysqli_fetch_row($result)) {
$sqlScript .= "INSERT INTO $table VALUES(";
for ($j = 0; $j < $columnCount; $j ++) {
$row[$j] = $row[$j];
if (isset($row[$j])) {
$sqlScript .= '"' . $row[$j] . '"';
} else {
$sqlScript .= '""';
}
if ($j < ($columnCount - 1)) {
$sqlScript .= ',';
}
}
$sqlScript .= ");\n";
}
}

$sqlScript .= "\n";
}

if(!empty($sqlScript))
{
// Save the SQL script to a backup file
$backup_file_name = $database_name . '_backup_' . time() . '.sql';
$fileHandler = fopen($backup_file_name, 'w+');
$number_of_lines = fwrite($fileHandler, $sqlScript);
fclose($fileHandler);
// Download the SQL backup file to the browser
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . basename($backup_file_name));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($backup_file_name));
ob_clean();
flush();
readfile($backup_file_name);
exec('rm ' . $backup_file_name);
}
?>
 

saalek110

Well-Known Member
اگر اول فایل کدهای دو پست قبل ..... فایل کانکشن را require کنید و داخل فایل کانکشن ، دو جا ccoonn را تبدیل به conn کنید ، دو کد دو پست قبل اجرا میشه.

و فایل بک آپ می سازد.

اگر فایل بک آپ را در phpmyadmin ایمپورت کنیم کوئری ها را اجرا می کند.

فایل کانکشن من این طوری است:

PHP:
<?php
$db_name = "epiz_9999999_name";
$mysql_username = "epiz_999909";
$mysql_password ="pppppppppp";
$server_name = "sql313.epizy.com";
$ccoonn = mysqli_connect($server_name, $mysql_username, $mysql_password,$db_name);
if (!$ccoonn)
  {
  die("Connection error: " . mysqli_connect_error());
  }
 
?>
 

saalek110

Well-Known Member
از :






برای بک آپ گیری



PHP:
<?php

$database = 'YOUR-DB-NAME';

$user = 'USERNAME';

$pass = 'PASSWORD';

$host = 'localhost';

$charset = "utf8mb4"; # utf8mb4_unicode_ci



$conn = new mysqli($host, $user, $pass, $database);

$conn->set_charset($charset);



# get all tables

$result = mysqli_query($conn, "SHOW TABLES");

$tables = array();



while ($row = mysqli_fetch_row($result)) {

    $tables[] = $row[0];

}



# Get tables data

$sqlScript = "";

foreach ($tables as $table) {

    $query = "SHOW CREATE TABLE $table";

    $result = mysqli_query($conn, $query);

    $row = mysqli_fetch_row($result);

  

    $sqlScript .= "\n\n" . $row[1] . ";\n\n";

  

  

    $query = "SELECT * FROM $table";

    $result = mysqli_query($conn, $query);

  

    $columnCount = mysqli_num_fields($result);

  

    for ($i = 0; $i < $columnCount; $i ++) {

        while ($row = mysqli_fetch_row($result)) {

            $sqlScript .= "INSERT INTO $table VALUES(";

            for ($j = 0; $j < $columnCount; $j ++) {

                $row[$j] = $row[$j];

              

                $sqlScript .= (isset($row[$j])) ? '"' . $row[$j] . '"' : '""';



                if ($j < ($columnCount - 1)) {

                    $sqlScript .= ',';

                }



            }

            $sqlScript .= ");\n";

        }

    }

  

    $sqlScript .= "\n";

}



//save file

$mysql_file = fopen($database . '_backup_'.time() . '.sql', 'w+');

fwrite($mysql_file ,$sqlScript );

fclose($mysql_file );
 

saalek110

Well-Known Member
کد پست قبل را من کمی تغییر دادم،
اونجایی که در اون متغیر چیزی اضافه می کرد ، من کپی کردم و معادل echo آن را زیرش نوشتم.
تا به جای ذخیره در اون متغیر روی صفحه چاپ بشه.
PHP:
<?php

require"ccoonn.php";

$charset = "utf8mb4";// # utf8mb4_unicode_ci

//$conn = new mysqli($host, $user, $pass, $database);
$conn->set_charset($charset);

# get all tables
$result = mysqli_query($conn, "SHOW TABLES");
$tables = array();

while ($row = mysqli_fetch_row($result)) {
   // echo "<br>".$row[0];
    $tables[] = $row[0];
}

# Get tables data
$sqlScript = "";
foreach ($tables as $table) {
  
    $query = "SHOW CREATE TABLE $table";
    $result = mysqli_query($conn, $query);
    $row = mysqli_fetch_row($result);
 
    $sqlScript .= "\n\n" . $row[1] . ";\n\n";
     //  echo"\n\n" . $row[1] . ";\n\n";

 
    $query = "SELECT * FROM $table";
    $result = mysqli_query($conn, $query);
 
    $columnCount = mysqli_num_fields($result);
 
    for ($i = 0; $i < $columnCount; $i ++) {
        while ($row = mysqli_fetch_row($result)) {
            $sqlScript .= "INSERT INTO $table VALUES(";
         echo"INSERT INTO $table VALUES(";

            for ($j = 0; $j < $columnCount; $j ++) {
                $row[$j] = $row[$j];
            
 $sqlScript .= (isset($row[$j])) ? '"' . $row[$j] . '"' : '""';
if (isset($row[$j])) echo'"'.$row[$j].'"';
if (!isset($row[$j])) echo'""';

                if ($j < ($columnCount - 1)) {
                    $sqlScript .= ',';
                      echo',';

                }

            }
            $sqlScript .= ");\n";
        echo ");<br>";

        }
    }
 
    $sqlScript .= "\n";
        echo "<br>";

}

?>
نتیجه اجرا:
کد:
INSERT INTO counters VALUES("1","28");

INSERT INTO name_email VALUES("2","Saalek110","[email protected]");
INSERT INTO name_email VALUES("2","Amir","Amir email");
INSERT INTO name_email VALUES("2","Amir2","Amir2 email");
INSERT INTO name_email VALUES("2","Saman","Saman@");
INSERT INTO name_email VALUES("2","Saalek110","[email protected]");
INSERT INTO name_email VALUES("2","Amir","Amir email");
INSERT INTO name_email VALUES("2","Amir2","Amir2 email");
INSERT INTO name_email VALUES("2","Saman","Saman@");

INSERT INTO posts VALUES("1","بسم الله الرحمن الرحیم","","","");
INSERT INTO posts VALUES("2","من تعدادی جدول ساختم. دو جدول در بالا و یک جدول در میانه سایت. جدول میانه ۳ ستون دارد و در هر ستون خودش حاوی یک جدول است. ستون میانه پست ها است. ستون سمت راست لینک ها. و ستون سمت چپ ، فعلا خالی.","","","");
INSERT INTO posts VALUES("3","پست ۳","","","");
INSERT INTO posts VALUES("4","پست ۴","","","");
INSERT INTO posts VALUES("5","پست ۵","","","");
INSERT INTO posts VALUES("6","پست ۶","","","");
INSERT INTO posts VALUES("7","پست ۷","","","");

INSERT INTO texts VALUES("1","In the name of god","---");
INSERT INTO texts VALUES("2","welcome","خوش آمدید");
INSERT INTO texts VALUES("3","Start","شروع");
INSERT INTO texts VALUES("4","Create new statment","عبارت جدید بسازید");
INSERT INTO texts VALUES("5","New post","پست جدید");
INSERT INTO texts VALUES("6","Review","بازدید");
INSERT INTO texts VALUES("7","Test","تست");
INSERT INTO texts VALUES("8","Dasti dar myadmin vared kardam","نوشته فارسی دستی در ادمین نوشتم");
INSERT INTO texts VALUES("9","Welcome","خوش آمدید");
INSERT INTO texts VALUES("10","Create new statment","عبارت جدید بسازید");
INSERT INTO texts VALUES("11","New post","پست جدید");
INSERT INTO texts VALUES("12","Review","بازدید");
 

saalek110

Well-Known Member
تمامی جداول را بک آپ میگیره کد قبل.
من دنبال اینم یک جدول و تعدادی سطر را بک آپ بگیره.

پس اینکه بخواد لیست جداول را تهیه کنه و همه را بخونه را حذف کردم.

result.png


دقت کنید خط foreach که حلقه درست می کنه را به شکل کامنت درآوردم و یک کروشه از آخر را هم بابت خارج شدن foreach به حالت کامنت درآوردم. چون باید تعداد کروشه بازها با تعداد کروشه بسته ها برابر باشه.
PHP:
<?php
require"ccoonn.php";
$charset = "utf8";
$conn->set_charset($charset);




$sqlScript = "";
$table="name_email";
//foreach ($tables as $table) {
 
    $query = "SELECT * FROM $table";
    $result = mysqli_query($conn, $query);
 
    $columnCount = mysqli_num_fields($result);
 
    for ($i = 0; $i < $columnCount; $i ++) {
        while ($row = mysqli_fetch_row($result)) {
            $sqlScript .= "INSERT INTO $table VALUES(";
         echo"INSERT INTO $table VALUES(";

            for ($j = 0; $j < $columnCount; $j ++) {
                $row[$j] = $row[$j];
         
 $sqlScript .= (isset($row[$j])) ? '"' . $row[$j] . '"' : '""';
if (isset($row[$j])) echo'"'.$row[$j].'"';
if (!isset($row[$j])) echo'""';

                if ($j < ($columnCount - 1)) {
                    $sqlScript .= ',';
                      echo',';

                }

            }
            $sqlScript .= ");\n";
        echo ");<br>";

        }
    }
 
    $sqlScript .= "\n";
        echo "<br>";

//} foreach

?>

نتیجه اجرا:
کد:
INSERT INTO name_email VALUES("2","Saalek110","[email protected]");
INSERT INTO name_email VALUES("2","Amir","Amir email");
INSERT INTO name_email VALUES("2","Amir2","Amir2 email");
INSERT INTO name_email VALUES("2","Saman","Saman@");
حالا فقط اون تیبلی که اسمش را در کد نوشتم بک آپ گرفته شده.
ولی من می خوهم از شماره سطری که من میگم شروع کنه تا شماره سطری که من میگم تموم کنه. باید باز تغیرش بدهم.
 

saalek110

Well-Known Member
کد کوئری ساختن بک آپ ، ردیف های دلخواه جدول یک جدول دیتابیس:
سالک: کد را خودم با نگاه به کدهای اون سایتها نوشتم.
PHP:
<?php

<?php
require"ccoonn.php";
$charset = "utf8";
$conn->set_charset($charset);



$sqlScript = "";
//-------------
$table="test";
$table2="test2";
$start=3;
$end=9;
$max_soton=3;
//-------------

 for ($i = $start; $i <=$end; $i ++) {
    $query = "SELECT * FROM $table WHERE number=$i";
    $result = mysqli_query($conn, $query);
      echo"INSERT INTO $table2 (`a1`,`a2`,`a3`) VALUES(";
    
     while ($row = mysqli_fetch_row($result)) {
         for ($p = 1; $p <=$max_soton; $p ++) {

       
     
    if (isset($row[$p])) echo"'".$row[$p]."'";
    if (!isset($row[$p])) echo"''";


      if ($p <= ($max_soton - 1)) {   echo',';  }

         }//second for loop
    }// while fetch
        echo ");<br>";
   } // for loop
 
        echo "<br>";
?>

Screenshot_۲۰۲۴-۰۱-۲۳_۲۲۰۹۱۴.jpg

نتیجه اجرای کد بالا:
کد:
INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('A1','B1','C1');
INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('A2','B2','C2');
INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('A3','B3','C3');
INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('A4','B4','C4');
INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('A5','B5','C5');
INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('A6','B6','C6');
INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('A7','B7','C7');
با عکس ، نتیجه اجرا را مطابقت دهید ، ردیف ۳ تا ۹ را من کوئری ساخته ام.

جدول پستهای من در فرومم ۱۳۸۰ ردیف دارد. یعنی فروم ۱۳۸۰ پست دارد. شاید تکه تکه بیاورم بهتر باشه تا همش را یهویی. برای همین ، این کد را نوشتم.
 

saalek110

Well-Known Member
شرح کد: دو حلقه دارد کد.



اون عدد $p ستون هایی را که می خونیم را تعیین می کند...

و عدد $i ردیف هایی را که می خونیم را تعیین می کند. فرض این است که جدول منبع ستونی با نام number دارد. اگر مثلا ستون اون اسمش post_id باشه ، فکر کنم در فروم phpbb شماره پستها در جدول پستها اسمش post_id است... خلاصه اونجا که نوشتیم where number=به جای number ستون خود افزایش یابنده جدول منبع قرار می گیرد.

اون تکه:

PHP:
//-------------

$table="test";

$table2="test";

$start=3;

$end=9;

$max_soton=3;

//-------------

حکم محل کنترل کد را دارد. نام جدول مبدا و مقصد و شماره شروع و پایان ردیف ها و تعداد ستونی که می خواهیم بخوانیم یعنی max_soton اینجا تنظیم میشه.





اون متغیر $sqlScript قبلا متغیری بود که همه چیز به جای چاپ درون اون ریخته می شد.

میشه وقتی کد نهایی شد ، به جای چاپ روی صفحه ، چیزها را در این متغیر ریخت و در فایل ذخیره کرد و فایل را برای دانلود قرار داد. کدهای سایتها این طوری است ، در پستهای قبل می توانید ببینید ، من تبدیل به چاپ روی صفحه کردم، اگر فایل بهتر باشه ، قابل تبدیل به حالت فایل است.
 

saalek110

Well-Known Member
روش کار با کد بالا:

کد کوئری ساز بک آپ گیر را من در این هاست تکمیل می کنم و بعد می برم روی اون هاست که فروم اونجاست..
بعد گد یا روی صفحه چاپ می کند ، یا فایل بک آپ تولید می کند.
بعد اون فایل بک آپ را می دهم به phpmyadmin سایت مقصد که قراره فروم دست نویس اونجا تاسیس بشه. دکمه import را می زنم ، دکمه انتخاب فایل داره، فایل را از گوشی انتخاب می کنم ( فعلا دارم در گوشی کار می کنم) ، به قسمت import می دهم.

پس بهتره عددهای ردیف شروع و پایان را برنامه بالا با فرم بگیره...
و کار کنم روی فایل ساختنش ، تا نخوام از روی صفحه کپی کنم و فایل بسازم. شایدم از روی صفحه راحت تر و بهتر باشه ، هنوز کار نکردم.
فعلا کد فرم را برایش بنویسم.
 

saalek110

Well-Known Member
نسخه برنامه قبلی ، همراه با فرم برای وارد کردن عدد ردیف شروع و عدد ردیف پایان:


PHP:
<?php
require"ccoonn.php";
$charset = "utf8";
$conn->set_charset($charset);

?>
<br><br>
<form id='myform' action="<?php echo $_SERVER['PHP_SELF']; ?>"  method = 'POST'>
<center>
start: <input type="text" style=" font-size:35px; height:55px; width:120px" name="start">
end: <input type="text" style=" font-size:35px; height:55px; width:120px" name="end"><br><br>
<input type="submit" style=" font-size:35px; height:55px; width:120px"name='action_2' value="Submit">
</center>
</form>
<?php

 if(isset($_POST['action_2']))
 {
     echo"<br>";
     $start=test_input($_POST["start"]);
     $end=test_input($_POST["end"]);

 echo "<br>start= ".$start;
 echo "<br>end= ".$end;
 echo"<br><br>";



 $sqlScript = "";
//-------------
$table="test";
$table2="test2";
$max_soton=3;
//-------------

 for ($i = $start; $i <=$end; $i ++) {
    $query = "SELECT * FROM $table WHERE number=$i";
    $result = mysqli_query($conn, $query);
      echo"INSERT INTO $table2 (`a1`,`a2`,`a3`) VALUES(";
    
     while ($row = mysqli_fetch_row($result)) {
         for ($p = 1; $p <=$max_soton; $p ++) {

      
    
    if (isset($row[$p])) echo"'".$row[$p]."'";
    if (!isset($row[$p])) echo"''";


      if ($p <= ($max_soton - 1)) {   echo',';  }

         }//second for loop
    }// while fetch
        echo ");<br>";
   } // for loop
 
        echo "<br>";

 }// if action
        function test_input($data) {
              $data = trim($data);
             $data = stripslashes($data);
             $data = htmlspecialchars($data);
                 return $data;                                                                    }
      
?>

نمای برنامه بعد دریافت عدد شروع و عدد پایان:

Screenshot_۲۰۲۴-۰۱-۲۴_۰۶۰۳۰۲.jpg
 

saalek110

Well-Known Member
نسخه بعدی:
نسخه ای که فرم بعد گرفتن اعداد در مرحله نمایش کوئری ، خود فرم دیگه نمایش پیدا نکند:
PHP:
<?php
require"ccoonn.php";
$charset = "utf8";
$conn->set_charset($charset);


 if(!isset($_POST['action_2']))
{
?>
<br><br>
<form id='myform' action="<?php echo $_SERVER['PHP_SELF']; ?>"  method = 'POST'>
<center>
start: <input type="text" style=" font-size:35px; height:55px; width:120px" name="start">
end: <input type="text" style=" font-size:35px; height:55px; width:120px" name="end"><br><br>
<input type="submit" style=" font-size:35px; height:55px; width:120px"name='action_2' value="Submit">
</center>
</form>
<?php
}// form badan namayesh peyda nakonad
 if(isset($_POST['action_2']))
 {
     echo"<br>";
     $start=test_input($_POST["start"]);
     $end=test_input($_POST["end"]);

 echo "<br>start= ".$start;
 echo "<br>end= ".$end;
 echo"<br><br>";



 $sqlScript = "";
//-------------
$table="test";
$table2="test2";
$max_soton=3;
//-------------

 for ($i = $start; $i <=$end; $i ++) {
    $query = "SELECT * FROM $table WHERE number=$i";
    $result = mysqli_query($conn, $query);
      echo"INSERT INTO $table2 (`a1`,`a2`,`a3`) VALUES(";
     
     while ($row = mysqli_fetch_row($result)) {
         for ($p = 1; $p <=$max_soton; $p ++) {

       
     
    if (isset($row[$p])) echo"'".$row[$p]."'";
    if (!isset($row[$p])) echo"''";


      if ($p <= ($max_soton - 1)) {   echo',';  }

         }//second for loop
    }// while fetch
        echo ");<br>";
   } // for loop
 
        echo "<br>";

 }// if action
        function test_input($data) {
              $data = trim($data);
             $data = stripslashes($data);
             $data = htmlspecialchars($data);
                 return $data;                                                                    }
       
?>
 

saalek110

Well-Known Member
نسخه فایل ساز:

PHP:
<?php
require"ccoonn.php";
$charset = "utf8";
$conn->set_charset($charset);


 if(!isset($_POST['action_2']))
{
?>
<br><br>
<form id='myform' action="<?php echo $_SERVER['PHP_SELF']; ?>"  method = 'POST'>
<center>
start: <input type="text" style=" font-size:35px; height:55px; width:120px" name="start">
end: <input type="text" style=" font-size:35px; height:55px; width:120px" name="end"><br><br>
<input type="submit" style=" font-size:35px; height:55px; width:120px"name='action_2' value="Submit">
</center>
</form>
<?php
}// form badan namayesh peyda nakonad
 if(isset($_POST['action_2']))
 {
     echo"<br>";
     $start=test_input($_POST["start"]);
     $end=test_input($_POST["end"]);

 echo "<br>start= ".$start;
 echo "<br>end= ".$end;
 echo"<br><br>";



 $sqlScript = "";
//-------------
$table="test";
$table2="test2";
$max_soton=3;
//-------------

 for ($i = $start; $i <=$end; $i ++) {
    $query = "SELECT * FROM $table WHERE number=$i";
    $result = mysqli_query($conn, $query);
      echo"INSERT INTO $table2 (`a1`,`a2`,`a3`) VALUES(";
       $sqlScript .="INSERT INTO $table2 (`a1`,`a2`,`a3`) VALUES(";


     while ($row = mysqli_fetch_row($result)) {
         for ($p = 1; $p <=$max_soton; $p ++) {

       
     
    if (isset($row[$p]))
    {
        echo"'".$row[$p]."'";
         $sqlScript .= "'".$row[$p]."'";
    }
    if (!isset($row[$p]))
    {
    echo"''";
     $sqlScript .= "''";

    }

      if ($p <= ($max_soton - 1)) {   echo',';  }

         }//second for loop
    }// while fetch
        echo ");<br>";
      $sqlScript .= ");\n";

   } // for loop
 
        echo "<br>";
           $sqlScript .= "\n";



echo"<br> chaape sqlScrip: <br><br>";
echo $sqlScript;

if(!empty($sqlScript))
{
// Save the SQL script to a backup file
$backup_file_name = $database_name . '_backup_' . time() . '.sql';
$fileHandler = fopen($backup_file_name, 'w+');
$number_of_lines = fwrite($fileHandler, $sqlScript);
fclose($fileHandler);
// Download the SQL backup file to the browser
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . basename($backup_file_name));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($backup_file_name));
ob_clean();
flush();
readfile($backup_file_name);
exec('rm ' . $backup_file_name);
}


 }// if action
        function test_input($data) {
              $data = trim($data);
             $data = stripslashes($data);
             $data = htmlspecialchars($data);
                 return $data;                                                                    }
       
?>

می توانید این طوری:
PHP:
//if(!empty($sqlScript))
if (false)
جلوی ساخت فایل و دانلود را بگیرید.
 

saalek110

Well-Known Member
بعدش چنین اجرایی را دارید:



کد:
start= 2

end= 10



INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('Aaa1','Bbb1','Ccc1');

INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('A1','B1','C1');

INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('A2','B2','C2');

INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('A3','B3','C3');

INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('A4','B4','C4');

INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('A5','B5','C5');

INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('A6','B6','C6');

INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('A7','B7','C7');

INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('A8','B8','C8');





chaape sqlScrip:



INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('Aaa1''Bbb1''Ccc1'); INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('A1''B1''C1'); INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('A2''B2''C2'); INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('A3''B3''C3'); INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('A4''B4''C4'); INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('A5''B5''C5'); INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('A6''B6''C6'); INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('A7''B7''C7'); INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('A8''B8''C8');



می بینید که وقتی sqlScript را چاپ کردیم ، خط بعدی نرفته ، ولی \n در فایل عمل می کند و موقع چاپ در صفحه عمل نمی کند. در فایل درست عمل می کند و می رود خط بعد.

منظورم این خط است:

PHP:
 $sqlScript .= "\n";

و در فایل داریم:

کد:
INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('Aaa1''Bbb1''Ccc1');

INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('A1''B1''C1');

INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('A2''B2''C2');

INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('A3''B3''C3');

INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('A4''B4''C4');

INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('A5''B5''C5');

INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('A6''B6''C6');

INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('A7''B7''C7');

INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('A8''B8''C8');

INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('A9''B9''C9');

INSERT INTO test2 (`a1`,`a2`,`a3`) VALUES('A10''B10''C10');

می بیند که داخل فایل بک آپ ساخته شده دقیقا شکل اون چیزی است که قبلا با echo چاپ می کردیم. جایگذاری در فایل مقداری فرق داره با چاپ روی صفحه. روی صفحه کاراکتر html داریم به نام br ولی در فایل که html نداریم.









کاراکتر .= نقطه بعدش مساوی ، کارش اینه که یک عبارت را به یک متغیر اضافه می کند و کاری با چیزهایی که قبلا داخلش بوده ندارد و به انتهایش اضافه می کند:

PHP:
.=
 

saalek110

Well-Known Member
طرز استفاده از کد بالا:
به قولی دفترچه راهنمای انتهایی استفاده از کد.
خوب، کوئری ساز ، برای سطرهای دلخواه یک جدول دلخواه ساخته شد.

اون اسم $table باید برابر با نام جدول مبدا بشه ، مثلا مال من phpbb_posts است. در فروم phpbb جداول را میشه پیشوند phpbb داد و من داده ام.

و اون humber در کد باید اسم ستونی از جدول مبدا باشه که شماره ردیف انداخته ، مثلا مال من post_id است در جدول پستهای فروم phpbb..... پس در کد باید قبل استفاده کلمه number به اسم ستون شمارنده جدول مبدا تغیر یابد.

جلوی :
PHP:
$table="test";
هم به سادگی میشه اسم جدول مبدا را نوشت.

در مورد جدول مقصد ، من می خوام خودم دستی جدول مقصد را بسازم.
پس در خط:
PHP:
$table2="test2";
اسم همون جدول. که دستی ساختم را می دهم.
و اون a1 و a2 و a3 هم اسم ستونهای جدول مقصد است ، طبیعی است قبل استفاده از فایل بک آپ با imporp در phpmyadmin باید ستون ها را ساخته باشید... اگر هر اشکالی باشه phpmyadmin خطا می دهد و وب می توانید رفع اشکال کنید و دوباره عمل کنید.
 

جدیدترین ارسال ها

بالا