Created
August 24, 2017 12:24
-
-
Save thaiall/6a360c71ef95193864fcea2eb7f52e8b to your computer and use it in GitHub Desktop.
mysqlworking.php version 5.2560-08-19
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
ini_set('max_execution_time', 86400); // 86400 = 60 * 60 * 24 seconds = 24 Hours | |
/* | |
Script_name : mysqlworking.php | |
Source_code : http://www.thaiall.com/perlphpasp/source.pl?9116 | |
Version 5.2560-08-19 | |
########################### | |
Update Description | |
- เพิ่มลักษณะข้อมูลเป็น ตัวอักษรภาษาไทย และภาษาอังกฤษ เมื่อ insert 1000 ผ่าน การแปลงตัวอักษรด้วย iconv(); | |
- เพิ่มการควบคุมตัวอักษรพิเศษ เปิดปิดการป้องกัน SQL Injection ผ่านตัวแปร $protect_sql_injection | |
- เพิ่มการตรวจสอบ keyword สำหรับ findname ต้อง > 1 ตัวอักษร | |
- ตารางที่สร้างกำหนด COLLATION คือ การจัดเรียงและเปรียบเทียบเป็นแบบ ด้วย COLLATE utf8_unicode_ci | |
- ปรับให้ทำงานกับ UTF-8 ตั้งแต่สร้างตาราง ด้วย CHARSET=utf8 | |
- ย้ายปุ่ม Delete Table ไปไว้ด้านหลัง และปรับสี | |
- ปรับให้ใช้กับ XAMPP บน Local host [xampp-win32-5.6.31-0-VC11-installer] | |
- ปรับให้ใช้กับ Palapa Web Server บน Smartphone | |
- ปรับให้ใช้กับ Thaiabc.ueuo.com บน Free web hosting | |
- เพิ่มปุ่มให้สร้าง Table ได้ทั้ง innodb และ myisam | |
- เปลี่ยนวิธีติดต่อ Database ตามข้อกำหนดใน php 5.4.4 บน xampp for windows 1.8.0 | |
จาก $result = mysql_db_query($db,$query); เป็น mysql_select_db($db,$connect); และ $result = mysql_query($query,$connect); | |
- เริ่มพัฒนาในปี 2547 เพื่อใช้งานร่วมกับข้อมูลใน Microsoft Excel | |
########################### */ | |
/* Section 1 : Configuration */ | |
$host = 'localhost'; | |
$db = 'mysql'; // please change for the implementation | |
$tb = 'car'; | |
$user = 'root'; // for xampp Web Server | |
$password = ''; // for xampp Web Server | |
// $user = 'root'; // for Palapa Web Server | |
// $password = 'adminadmin'; // for Palapa Web Server | |
// | |
$connect = mysql_connect("$host","$user","$password"); | |
mysql_select_db($db,$connect); | |
$chk_tb = mysql_query("show tables like '$tb'",$connect); | |
$tb_found = mysql_num_rows($chk_tb); | |
$protect_sql_injection = false; // true = protection | |
// | |
$start = microtime(); | |
?><html><head><title>mysql working</title> | |
<meta http-equiv="content-type" content="text/html;charset=UTF-8" /> | |
<style type="text/css"> | |
textarea{font-family:microsoft sans serif;font-size:12px;color:blue;scrollbar-base-color:red;scrollbar-arrow-color:white;background:#ffffdd;} | |
input{font-family:microsoft sans serif;font-size:16px;color:black;background:#ffffdd;} | |
</style> | |
</head><body> | |
<!-- Section 2 : Menu screen --> | |
<form action="" method="post"> | |
<table bgcolor="blue" cellspacing="1" align="center" width="740px" border="15px"> | |
<?php if ($tb_found == 0) { ?> | |
<tr><td colspan="2" bgcolor="white"> | |
<input type="submit" value="Create table InnoDB" name="action" style="width:350px;height:50px;"> | |
<input type="submit" value="Create table MyISAM" name="action" style="width:350px;height:50px;"> | |
</td></tr> | |
<?php } else { ?> | |
<tr><td valign="top" bgcolor="white" width="100" align="center"> | |
<input type="submit" value="post 1000" name="action" style="width:100px;background-color:yellow;"> | |
<input type="submit" value="post_recs" name="action" style="width:100px;background-color:#dddddd;"> | |
<input name="recs" value="1000" size="6"> | |
</td> | |
<td valign="top" bgcolor="#dddddd"><input type="submit" value="postmany" name="action" style="width:100px;background-color:#ddffdd;"> | |
ข้อมูลข้างล่างนี้สามารถ copy จาก excel มา paste ได้</br> | |
<textarea name=manyrecord rows=4 cols=100 wrap=off> | |
1 2547 หจก. กองเกตุเอ๊กซ์เปรส 20 11 2551 8/1 ม.2 แขวงทุ่งครุ ทุ่งครุ กรุงเทพฯ 17 14 3 1 3 | |
2 2547 หจก. ดาวคะนองการท่องเที่ยว 5 1 2552 10/223 ม.4 แขวงดินแดง ห้วยขวาง กรุงเทพฯ 2 2 3 | |
3 2547 บจ. ธรรมนูญ โพธิ์ทอง 5 1 2552 1407/6 ซ.ตากสิน 7 ถ.สมเด็จพระเจ้าตากสิน แขวงบุคคโล สายไหม กรุงเทพฯ 4 2 2 3 | |
4 2547 บจ. นิติพงษ์ ไพบูลย์ทรานสปอร์ต 6 1 2552 15/20 ถ.นวลจันทร์ แขวงคลองกุ่ม สายไหม กรุงเทพฯ 1 1 3 | |
5 2547 นาย บางแคการท่องเที่ยว 6 1 2552 209/718 ม.ปรีชา 8 ถ.รามคำแหง แขวงหัวหมาก สะพานสูง กรุงเทพฯ 1 1 3 | |
6 2547 นาย ผาน ตอลบรัมย์ 6 1 2552 4/33 ม.6 แขวงสายไหม สวนหลวง กรุงเทพฯ 1 1 3 | |
7 2547 บจ. วิจิตรประกอบ 7 1 2552 25 ซ.อ่อนนุช 10 ถ.อ่อนนุช แขวงสวนหลวง ลาดพร้าว กรุงเทพฯ 02-2743222-3 3 3 3 | |
8 2547 หจก. สตาร์แปซิฟิคทรานสปอร์ต 26 1 2552 41/9 ม.9 ถ.วิภาวดีรังสิต แขวงสีกัน บึงกุ่ม กรุงเทพฯ 21 1 19 1 3 | |
9 2547 นาย สมนึก ผลดีนานา 12 1 2552 43 ซ.บรมราชชนนี 14 ถ.บรมราชชนนี แขวงบางบำหรุ บางพลัด กรุงเทพฯ 1 1 3 | |
10 2547 บจ. สวัสดิภาพทัวร์ 13 1 2552 44/73 ม.7 แขวงลาดพร้าว บางกะปิ กรุงเทพฯ 2 2 3 | |
11 2547 นาย สุชาติ ภรมงคลธรรม 13 1 2552 52/4 ม.13 ถ.กรุงเทพกรีฑา แขวงสะพานสูง บางกะปิ กรุงเทพฯ 1 1 3 | |
12 2547 นาย เสวกทัวร์ 13 1 2552 55 ม.9 ซ.ปรีชา แขวงฉิมพลี ธนบุรี กรุงเทพฯ 1 1 3 | |
13 2547 หจก. ไสว วรรณรังสี 24 1 2552 55/4 ม.3 ซ.ประชาอุทิศ 76 ถ.ประชาอุทิศ แขวงทุ่งครุ ทุ่งครุ กรุงเทพฯ 10 10 3 | |
</textarea> | |
</td></tr></table> | |
<table style="background-color:black;border-spacing:5px;text-align:center;width:760px;margin-left:auto;margin-right:auto;"><tr> | |
<td bgcolor="white" align="center"><input type="submit" value="listall" name="action" style="width:60px;background-color:#ffdddd;"> | |
เริ่ม <input name="begin" value="0" size="1"> | |
จำนวน <input name="total" value="100" size="2"> | |
</td> | |
<td bgcolor="white" align=center><input type="submit" value="findname" name="action"> | |
<input name="name" value="หจก." size="3" style="width:60px;background-color:#ffddff;"></td> | |
<td bgcolor="white" align=center><input type="submit" value="deleterecord" name="action" style="width:100px;background-color:#ddddff;"> | |
<input name="did" value="1" size="1"><input name="dyear" value="2547" size="4"></td> | |
<td bgcolor="white" align=center><input type="submit" value="deletetable" name="action" style="width:100px;background-color:red;color:white;"></td> | |
</tr> | |
<?php } ?> | |
</table> | |
</form> | |
<!-- Section 3 : Activity --> | |
<table bgcolor="gray" cellspacing="1" align="center" width="760"><tr><td bgcolor="white"> | |
<?php | |
########################### | |
if (isset($_POST{'action'})) { | |
########################### | |
# 1 # create table InnoDB | |
########################### | |
if ($_POST{'action'} == "Create table InnoDB") { | |
$query = "CREATE TABLE $tb ("; | |
for ($i=1;$i<=26;$i++) $query = $query . "f" . $i . " CHAR(100),"; | |
$query .= "f27 CHAR(100)"; | |
$query .= ") ENGINE = InnoDB DEFAULT CHARSET=utf8 DEFAULT COLLATE utf8_unicode_ci;"; | |
echo $query."<br/>"; | |
mysql_select_db($db,$connect); | |
$result = mysql_query($query,$connect); | |
if ($result) echo "process : completely<br/>"; else { echo "error to create table<br/>"; exit; } | |
echo "<meta http-equiv='refresh' content=\"3;URL='mysqlworking.php'\" />"; | |
} | |
########################### | |
# 2 # create table MyISAM | |
########################### | |
if ($_POST{'action'} == "Create table MyISAM") { | |
$query = "CREATE TABLE $tb ("; | |
for ($i=1;$i<=26;$i++) $query = $query . "f" . $i . " CHAR(100),"; | |
$query .= "f27 CHAR(100)"; | |
$query .= ") ENGINE = MyISAM DEFAULT CHARSET=utf8 DEFAULT COLLATE utf8_unicode_ci;"; | |
echo $query."<br/>"; | |
mysql_select_db($db,$connect); | |
$result = mysql_query($query,$connect); | |
if ($result) echo "process : completely<br/>"; else { echo "error to create table<br/>"; exit; } | |
echo "<meta http-equiv='refresh' content=\"3;URL='mysqlworking.php'\" />"; | |
} | |
########################### | |
# 3 # delete table | |
########################### | |
if ($_POST{'action'} == "deletetable") { | |
$query = "drop table $tb;"; | |
mysql_select_db($db,$connect); | |
$result = mysql_query($query,$connect); | |
if ($result) echo "process : completely<br/>"; else { echo "table remove : error<br/>$query"; exit; } | |
echo "<meta http-equiv='refresh' content=\"3;URL='mysqlworking.php'\" />"; | |
} | |
########################### | |
# 4 # search from keyword | |
########################### | |
if ($_POST{'action'} == "findname") { | |
if(strlen($_POST{'name'}) > 1) { | |
# SQL Injection Protection | |
$unsafe = $_POST['name']; | |
$safe = mysql_real_escape_string($unsafe); // for ' or 1=1 or ' | |
$unwanted = array("'", "or", ";","=","_"); | |
$remove = ''; | |
$newsafe = str_replace($unwanted, $remove, $safe); | |
# ส่วนนี้มีความอ่อนแอ (vulnerability) ที่ยังไม่ได้รับการป้องกัน | |
# ถูกโจมตีได้ด้วย SQL Injection for test ' or 1=1 or ' หรือ ___ | |
# การค้นหานี้ใช้ % เพื่อใช้ค้นหาจากคำขึ้นต้น แล้วต่อท้ายด้วยอะไรก็ได้ คล้ายกับ * ใน DOS เช่น dir AN*.lnk จะพบ ANT.lnk และ AND.lnk | |
# การค้นด้วย _ ใน like หมายถึงตัวอักษรอะไรก็ได้ คล้ายกับ ? ใน DOS เช่น dir AN?.lnk จะพบ ANT.lnk | |
if(!$protect_sql_injection) { | |
$query = "select * from $tb where f4 like '". $_POST{'name'} ."%'"; | |
} else { | |
$query = "select * from $tb where f4 like '". $newsafe ."%'"; | |
} | |
if(!$protect_sql_injection || $safe == $newsafe) { | |
mysql_select_db($db,$connect); | |
$result = mysql_query($query,$connect); | |
if (!$result) { echo "finding : error<br/>$query"; exit;} | |
while ($object = mysql_fetch_object($result)) { | |
foreach ($object as $o) echo $o . " "; | |
# sample : echo $object->f26 . " " . $object->f27; | |
echo '<hr color=gray />'; | |
} | |
} else { | |
echo '<b>Error</b> : found unwanted character'; | |
} | |
} else { | |
echo '<b>Error</b> : Keyword required > 1 character'; | |
} | |
} | |
########################### | |
# 5 # delete record | |
########################### | |
if ($_POST{'action'} == "deleterecord") { | |
$query = "delete from $tb where f1 = '". $_POST{'did'}."' and f2 = '". $_POST{'dyear'}."'"; | |
mysql_select_db($db,$connect); | |
$result = mysql_query($query,$connect); | |
$count_del = mysql_affected_rows(); | |
if ($result) echo "delete : $count_del records<br/>"; else { echo "delete : error<br/>$query"; exit; } | |
} | |
########################### | |
# 6 # list all records | |
########################### | |
if ($_POST{'action'} == "listall") { | |
$query = "select * from $tb limit " . $_POST{'begin'} . "," . $_POST{'total'} ; | |
mysql_select_db($db,$connect); | |
$result = mysql_query($query,$connect); | |
if (!$result) { echo "listing : error<br/>$query"; exit;} | |
echo "<ol start=" . ($_POST{'begin'} + 1) . ">"; | |
while ($object = mysql_fetch_object($result)) { | |
echo "<li>"; | |
foreach ($object as $o) echo "$o "; | |
} | |
echo "</ol>"; | |
} | |
########################### | |
# 7 # post records | |
########################### | |
if ($_POST{'action'} == "postmany") { | |
$getline = explode("\r\n",$_POST{'manyrecord'}); | |
for ($j=0;$j<count($getline);$j++) { | |
$l = $j + 1; | |
$getfield = explode("\t",$getline[$j]); | |
# echo "$l $getfield[0] - $getfield[26]<br/>"; | |
} | |
if ($connect) { | |
echo "post from textarea : completely<br/>"; | |
for ($j=0;$j<count($getline);$j++) { | |
if (strlen($getline[$j]) > 1) { | |
$l = $j + 1; | |
$getfield = explode("\t",$getline[$j]); | |
$query = "insert into $tb values("; | |
for ($i=0;$i<=25;$i++) $query = $query . "'$getfield[$i]',"; | |
$query = $query . "'$getfield[26]'"; | |
$query = $query . ");"; | |
echo $query."<br/>"; | |
mysql_select_db($db,$connect); | |
$result = mysql_query($query,$connect); | |
} | |
} | |
} else { | |
echo "connect : fail"; | |
} | |
} | |
########################### | |
# 8 # post 1000 | |
########################### | |
if ($_POST{'action'} == "post 1000") { | |
if ($connect) { | |
echo "Post 1000 : completely"; | |
mysql_select_db($db,$connect); | |
for ($j=0;$j<1000;$j++) { | |
$c1 = iconv("TIS-620","UTF-8",chr(rand(161,206))); // 196 = ฤ ทำให้มี 45 ตัว | |
$c2 = iconv("TIS-620","UTF-8",chr(rand(161,206))); | |
$c3 = iconv("TIS-620","UTF-8",chr(rand(161,206))); | |
// https://www.ireallyhost.com/kb/other/173 | |
$query = "insert into $tb (f1,f2,f4) values( $j , $j, '" . $c1.$c2.$c3 . "');"; | |
// insert into $tb (f4) values('" . chr(161) . "') ภาษาไทยมีปัญหา แบบนี้ใช้ไม่ได้ใน MySQL เพราะไม่เป็น UTF8 | |
$result = mysql_query($query,$connect); | |
} | |
} else { | |
echo "connect : fail"; | |
} | |
} | |
// echo iconv("TIS-620","UTF-8",chr(161)); // output = ก | |
// echo ord(iconv("UTF-8","TIS-620","ก")); // output = 161 | |
########################### | |
# 9 # post_recs | |
########################### | |
if ($_POST{'action'} == "post_recs") { | |
if ($connect) { | |
echo "Post " . $_POST{'recs'} ." : completely"; | |
mysql_select_db($db,$connect); | |
for ($j=0;$j<$_POST{'recs'};$j++) { | |
$c1 = iconv("TIS-620","UTF-8",chr(rand(65,91))); | |
$c2 = iconv("TIS-620","UTF-8",chr(rand(65,91))); | |
$c3 = iconv("TIS-620","UTF-8",chr(rand(65,91))); | |
$query = "insert into $tb (f1,f2, f4) values( $j , $j, '" . $c1.$c2.$c3 . "');"; | |
$result = mysql_query($query,$connect); | |
} | |
} else { | |
echo "connect : fail"; | |
} | |
} | |
########################### | |
# 10 # Total records | |
########################### | |
if ($_POST{'action'} != "deletetable") { | |
$query = "select * from $tb"; | |
mysql_select_db($db,$connect); | |
$result = mysql_query($query,$connect); | |
echo "<hr color=gray>Total records : ".mysql_num_rows($result); | |
mysql_free_result($result); | |
mysql_close($connect); | |
} | |
########################### | |
} // isset : action | |
?> | |
</td></tr></table> | |
<!-- Section 4 : Introduction --> | |
<table bgcolor="#ddffdd" cellspacing="1" align="center" width="760"><tr><td> | |
<fieldset><legend><b>คำแนะนำในการใช้งานโปรแกรม</b></legend> | |
<ol> | |
<li>กำหนดชื่อฐานข้อมูลให้กับตัวแปร <font color="red">$db</font> ให้ตรงกับที่มีในระบบฐานข้อมูล MySQL | |
<br/>ที่กำหนดไว้คือ [mysql] เพราะเป็น default database ถ้าใช้งานจริงก็ต้องสร้าง database ของตนเอง</li> | |
<li>เปลี่ยนค่าของตัวแปร <font color="red">$user และ $password</font> ให้ตรงกับรหัสผู้ใช้ที่เข้าใช้งาน MySQL ได้</li> | |
<li>กดปุ่ม Create table เพื่อสร้างตารางชื่อ car ในฐานข้อมูล [mysql]</li> | |
<li>หลังสร้างตารางแล้ว ก็กดปุ่ม postmany เพื่อสร้างข้อมูล จะได้มีข้อมูลไว้ใช้ทดสอบ</li> | |
<li>ถ้าทดสอบการใช้งานด้วยค่า default ได้แล้ว ก็ควรสร้าง database, table ขึ้นมาใช้งานเอง</li> | |
<li>ปกติจะกำหนด max time ที่ 30 seconds ใน code จะขยายเวลาเป็น 24 ชั่วโมง รองรับ insert 1000</li> | |
<li>ถ้ามีปัญหาภาษาไทยต้องใช้ Editor ปรับ file encoding = UTF-8</li> | |
<li>ถ้าไม่กำหนด Engine ให้ DB จะสร้างเป็น InnoDB ซึ่ง insert record จะตอบสนองช้าเมื่อเทียบกับ MyISAM</li> | |
</ol> | |
</fieldset> | |
</td></tr></table> | |
<center> | |
Demo site : <a href="http://thaiabc.ueuo.com/">http://thaiabc.ueuo.com/</a><br/> | |
<?php | |
list($u_start,$s_start) = explode(" ",$start); | |
list($u_stop,$s_stop) = explode(" ",microtime()); | |
$tstart = $u_start + $s_start; | |
$tstop = $u_stop + $s_stop; | |
echo "ใช้เวลาทั้งสิ้น : " . ($tstop - $tstart) . " วินาที"; | |
?> | |
</body></html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment