เอาโค้ดค้นหาไปใช้งานร่วมกับโค้ดอัพเดทยังไงคะ คือหนูอยากจะค้นหาข้อมูลก่อน แล้วก็อัพเดทข้อมูลคะ ตอนี้ยังทำไม่ได้รบกวนพี่ไช่วยหน่อยค่ะ
จะเพิ่มเอาโค้ดค้นหาไปใช้งานร่วมกับโค้ดอัพเดทยังไงคะ คือหนูอยากจะค้นหาข้อมูลก่อน แล้วก็อัพเดทข้อมูลคะ ตอนี้ยังทำไม่ได้รบกวนพี่ไช่วยหน่อยค่ะ
อันนี้ส่วนของโค้ดค้นหาค่ะ
Code (PHP)
<form name="frmSearch" method="get" action="<?php echo $_SERVER['SCRIPT_NAME'];?>">
<table width="1000" border="1" color="#">
<tr>
<th>From Date
<input name="txtKeyword" type="text" id="txtKeyword" value="<?php echo $_GET["txtKeyword"];?>">To Date
<input name="txtKeyword2" type="text" id="txtKeyword2" value="<?php echo $_GET["txtKeyword2"];?>">Company
<input name="txtKeyword3" type="text" id="txtKeyword3" value="<?php echo $_GET["txtKeyword3"];?>">
<input type="submit" value="Search"></th>
</tr>
</table>
</form>
<?php
if($_GET["txtKeyword"] != "" or $_GET["txtKeyword2"] != "" or $_GET["txtKeyword3"] != "")
{
$objConnect = mysql_connect("localhost","root","03112530") or die("Error Connect to Database");
$objDB = mysql_select_db("customer");
// Search By Name or Email
$strSQL = "SELECT * FROM cus WHERE (Date between '".$_GET["txtKeyword"]."' and '".$_GET["txtKeyword2"]."' and Company LIKE '%".$_GET["txtKeyword3"]."%')";
$objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");
?>
อันนี้โค้ดอัพเดทค่ะ
Code (PHP)
<html>
<head>
<title>ThaiCreate.Com PHP & MySQL Tutorial</title>
</head>
<body>
<?php
$objConnect = mysql_connect("localhost","root","03112530") or die("Error Connect to Database");
$objDB = mysql_select_db("customer");
mysql_query("SET character_set_results=utf8");
mysql_query("SET character_set_client=utf8");
mysql_query("SET character_set_connection=utf8");
//*** Update Condition ***//
if($_GET["Action"] == "Save")
{
for($i=1;$i<=$_POST["hdnLine"];$i++)
{
$strSQL = "UPDATE cus SET ";
$strSQL .="Id = '".$_POST["txtId$i"]."' ";
$strSQL .=",Company = '".$_POST["txtCompany$i"]."' ";
$strSQL .=",Code = '".$_POST["txtCode$i"]."' ";
$strSQL .=",Name_save = '".$_POST["txtName_save$i"]."' ";
$strSQL .=",Name_pro = '".$_POST["txtName_pro$i"]."' ";
$strSQL .=",Piece = '".$_POST["txtPiece$i"]."' ";
$strSQL .=",Status = '".$_POST["txtStatus$i"]."' ";
$strSQL .=",Date = '".$_POST["txtDate$i"]."' ";
$strSQL .="WHERE Id = '".$_POST["hdnId$i"]."' ";
$objQuery = mysql_query($strSQL);
}
//header("location:$_SERVER[PHP_SELF]");
//exit();
}
$strSQL = "SELECT * FROM cus ORDER BY Id ASC";
$objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");
?>
<form name="frmMain" method="post" action="multi.php?Action=Save">
<table width="900" border="1">
<tr>
<th width="91" align="center">Id </th>
<th width="91" align="center">Company </th>
<th width="91" align="center">Code </th>
<th width="91" align="center">Name_save </th>
<th width="91" align="center">Name_pro </th>
<th width="91" align="center">Piece </th>
<th width="91" align="center">Status </th>
<th width="91" align="center">Date </th>
</tr>
<?php
$i =0;
while($objResult = mysql_fetch_array($objQuery))
{
$i = $i + 1;
?>
<tr>
<td><div align="center">
<input type="hidden" name="hdnId<?php echo $i;?>" size="5" value="<?php echo $objResult["Id"];?>">
<input type="text" name="txtId<?php echo $i;?>" size="5" value="<?php echo $objResult["Id"];?>">
</div></td>
<td><input type="text" name="txtCompany<?php echo $i;?>" size="20" value="<?php echo $objResult["Company"];?>"></td>
<td><input type="text" name="txtCode<?php echo $i;?>" size="20" value="<?php echo $objResult["Code"];?>"></td>
<td><input type="text" name="txtName_save<?php echo $i;?>" size="20" value="<?php echo $objResult["Name_save"];?>"></td>
<td><input type="text" name="txtName_pro<?php echo $i;?>" size="20" value="<?php echo $objResult["Name_pro"];?>"></td>
<td><input type="text" name="txtPiece<?php echo $i;?>" size="20" value="<?php echo $objResult["Piece"];?>"></td>
<td><div align="center">
<select name="txtStatus<?php echo $i;?>">
<?php
$strSQL2 = "SELECT * FROM country ORDER BY Status ASC";
$objQuery2 = mysql_query($strSQL2) or die ("Error Query [".$strSQL2."]");
while($objResult2 = mysql_fetch_array($objQuery2))
{
if($objResult["Status"] == $objResult2["Status"])
{
$sel = "selected";
}
else
{
$sel = "";
}
?>
<option value="<?php echo $objResult2["Status"];?>" <?php echo $sel;?>><?php echo $objResult2["CountryName"];?></option>
<?php
}
?>
</select>
</div></td>
<td align="right">
<input type="text" name="txtDate<?php echo $i;?>" size="5" value="<?php echo $objResult["Date"];?>">
</td>
</tr>
<?php
}
?>
</table>
<input type="submit" name="submit" value="submit">
<input type="hidden" name="hdnLine" value="<?php echo $i;?>">
</form>
<?php
mysql_close($objConnect);
?>
</body>
</html>
ฐานข้อมูลค่ะ
Code (SQL)
CREATE TABLE `company` (
`Id_Cus` int(11) NOT NULL,
`Name_Cum` varchar(50) NOT NULL,
`Code_Cum` varchar(6) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
--
-- dump ตาราง `company`
--
INSERT INTO `company` VALUES (1, 'A', '600001');
INSERT INTO `company` VALUES (2, 'B', '600002');
INSERT INTO `company` VALUES (3, 'C', '600003');
INSERT INTO `company` VALUES (4, 'D', '600004');
INSERT INTO `company` VALUES (5, 'E', '600005');
INSERT INTO `company` VALUES (6, 'F', '600006');
-- --------------------------------------------------------
--
-- โครงสร้างตาราง `country`
--
CREATE TABLE `country` (
`Status` int(11) NOT NULL auto_increment,
`CountryName` varchar(50) NOT NULL,
PRIMARY KEY (`Status`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
--
-- dump ตาราง `country`
--
INSERT INTO `country` VALUES (1, 'THAILAND');
INSERT INTO `country` VALUES (2, 'LAOS');
INSERT INTO `country` VALUES (3, 'MALAYSIA');
INSERT INTO `country` VALUES (4, 'USA');
-- --------------------------------------------------------
--
-- โครงสร้างตาราง `cus`
--
CREATE TABLE `cus` (
`Id` int(11) NOT NULL auto_increment,
`Company` varchar(50) NOT NULL,
`Code` varchar(6) NOT NULL,
`Name_save` varchar(50) NOT NULL,
`Name_pro` varchar(50) NOT NULL,
`Piece` int(11) NOT NULL,
`Status` varchar(10) NOT NULL,
`Date` date NOT NULL,
PRIMARY KEY (`Id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=14 ;
--
-- dump ตาราง `cus`
--
INSERT INTO `cus` VALUES (1, 'A', '600001', 'MMM', 'box 30*30', 20, '2', '2018-01-01');
INSERT INTO `cus` VALUES (2, 'B', '600002', 'MMM', 'box 30*30', 10, '3', '2018-01-01');
INSERT INTO `cus` VALUES (3, 'C', '600003', 'PPP', 'box 60*60', 30, '3', '2018-01-01');
INSERT INTO `cus` VALUES (4, 'D', '600004', 'PPP', 'box 60*60', 20, '4', '2018-01-02');
INSERT INTO `cus` VALUES (5, 'E', '600005', 'WWW', 'box 20*20', 15, '4', '2018-01-02');
INSERT INTO `cus` VALUES (6, 'F', '600006', 'ZZZ', 'box 20*20', 25, '2', '2018-01-02');
INSERT INTO `cus` VALUES (7, 'A', '600001', 'MMM', 'box 30*30', 40, '2', '2018-01-03');
INSERT INTO `cus` VALUES (13, 'A', '600001', 'MMM', 'box 30*30', 20, '3', '2018-01-03');
INSERT INTO `cus` VALUES (8, 'B', '600002', 'MMM', 'box 15*15', 30, '1', '2018-01-03');
INSERT INTO `cus` VALUES (9, 'C', '600003', 'PPP', 'box 25*25', 35, '1', '2018-01-04');
INSERT INTO `cus` VALUES (10, 'D', '600004', 'PPP', 'box 25*25', 15, '4', '2018-01-04');
INSERT INTO `cus` VALUES (11, 'E', '600005', 'WWW', 'box 35*35', 40, '4', '2018-01-04');
INSERT INTO `cus` VALUES (12, 'F', '600006', 'ZZZ', 'box 35*35', 20, '3', '2018-01-05');
Tag : PHP, MySQL
Date :
2018-01-08 22:01:29
By :
panthipa
View :
867
Reply :
11
ตัวอย่างโค๊ด
หลักการ
--- ใช้ฟังก์ชั่น mysqli แทน mysql ได้แล้วครับ หัดเขียนเป็น oop ทั้งง่ายและสั้นกว่า
--- ใช้ฟังก์ชั่น mysqli_prepare เพื่อป้องกัน sql injection
--- กรณีหลาย record ให้ทำ tag input กำหนด name เป็น ตัวแปร array แทน ตัวแปรเดี่ยว
--- ลดการคิวรี่ซ้ำซ้อนลง
--- พยายามใช้ method post แทน get
ค้นหา แก้ไข update ทั้งหมด อยู่ในไฟล์เดียว
ศึกษาและประยุกต์เอาเองนะครับ
Code (PHP)
<?php
if( !($con = new mysqli("localhost","root","03112530", 'customer')){ die("Error Connect to Database");}
$con->set_charset('utf-8');
$date_st=isset($_POST['date_st'])? $_POST['date_st'] : '';
$date_en=isset($_POST['date_en'])? $_POST['date_en'] : '';
$srn_txt=isset($_POST['srh_txt'])? $_POST['srh_txt'] : '';
if(isset($_GET["Action"]) && $_GET['Action') == "Save"){
$udSQL = 'UPDATE cus
SET Id=? , Company = ? ,Code = ? , Name_save = ? , Name_pro = ? , Piece = ? , Status = ? , `Date` = ?
WHERE Id = ? ';
if($stmt = $con->prepare($udSQL)){
$stmt->close;
$affected_rows=0;
foreach( $_POST["hdnId"] as $k=>$id){
stmt = $con->prepare($udSQL);
$stmt->bind_param('issssissi' // i=number d=double s=string b=blob
, $_POST["txtId"][$k]
, $_POST["txtCompany"][$k]
, $_POST["txtCode"][$k]
, $_POST["txtName_save"][$k]
, $_POST["txtName_pro"][$k]
, $_POST["txtPiece"][$k]
, $_POST["txtStatus"][$k]
, $_POST["txtDate"][$k]
, $id);
if(!$stmt->execute()) die("เกิดข้อผิดพลาด 1 <br>" . print_r($stmt->error_list,true));
$affected_rows+=$stmt->affected_rows;
$stmt->close();
}
$msg = 'Update Complete. Affected rows = '.$affected_rows . '<br>';
}
}else if( $date_st>'' && $date_en>'' && $srh_txt>''){
// query status เก็บไว้เป็น array จะได้ไม่ต้องคิวรี่บ่อยๆ
$stat_SQL = "SELECT * FROM country ORDER BY Status";
$rs = $con->query($strSQL2) or die ("Error Query [$stat_SQL]");
$stats=array(); while($ro = $rs->fetch_object()){ $stats[]=$ro;}
// Search
$pp = "SELECT * FROM cus WHERE (Date between ? and ? and Company ? ";
if( $stmt = $conn->prepare($pp)){
$stmt->bind_param('sss', $date_st, $date_en, "%$srh_txt%");
if(!$stmt->execute()) die("เกิดข้อผิดพลาด 1 <br>" . print_r($stmt->error_list,true));
$search_rs = $stmt->get_result();
}
}
?><!doctype html>
<html>
<head>
<title>ThaiCreate.Com PHP & MySQL Tutorial</title>
<meta charset="utf-8">
</head>
<body>
<?=(isset($affected_rows)? $msg : '')?>
<form name="frmSearch" method="post" >
<table width="1000" border="1" color="#">
<tr>
<th>From Date
<input name="date_st" type="date" value="<?=$date_st?>" > To Date
<input name="date_en" type="date" value="<?=$date_en?>" > Company
<input name="srh_txt" type="text" value="<?=$srh_txt?>" >
<input type="submit" value="Search"></th>
</tr>
</table>
</form>
<?php
if(isset($search_rs)){
?>
<form name="frmMain" method="post" action="?Action=Save">
<table width="900" border="1">
<tr>
<th width="91" align="center">Id </th>
<th width="91" align="center">Company </th>
<th width="91" align="center">Code </th>
<th width="91" align="center">Name_save </th>
<th width="91" align="center">Name_pro </th>
<th width="91" align="center">Piece </th>
<th width="91" align="center">Status </th>
<th width="91" align="center">Date </th>
</tr>
<?php
while($ro = $search_rs->fetch_object()){
?>
<tr>
<td align="center">
<input type="hidden" name="hdnId[]" size="5" value="<?=$ro->Id?>">
<input type="text" name="txtId[]" size="5" value="<?=$ro->Id?>">
</td>
<td><input type="text" name="txtCompany[]" size="20" value="<?=$ro->Company?>"></td>
<td><input type="text" name="txtCode[]" size="20" value="<?=$ro->Code?>"></td>
<td><input type="text" name="txtName_save[]" size="20" value="<?=$ro->Name_save?>"></td>
<td><input type="text" name="txtName_pro[]" size="20" value="<?=$ro->Name_pro?>"></td>
<td><input type="text" name="txtPiece[]" size="20" value="<?=$ro->Piece?>"></td>
<td align="center">
<select name="txtStatus[]">
<?php
foreach($stats as $ro2){
$stat=$ro2->Status; $nm=$ro2->CountryName;
?> <option value="<?=$stat?>" <?=($ro->Status == $stat ? 'selected' : '')?> ><?=$nm?></option>
<?php } ?>
</select>
</td>
<td align="right">
<input type="text" name="txtDate[]" size="5" value="<?=$ro->Date?>" >
</td>
</tr>
<?php
}
?>
</table>
<input type="submit" name="submit" value="submit">
<input type="hidden" name="hdnLine" value="<?php echo $i;?>">
</form>
<?php
}
?>
</body>
</html>
Date :
2018-01-09 08:23:01
By :
Chaidhanan
ขอโทษคะพี่แล้วอย่างนี้จะใช้งานร่วมกับส่วนอื่นได้ไหมคะ หนูต้องแก้ทุกหน้าหรือเปล่าคะเพราะหนูทำจบที่หน้าอัพเดทข้อมูล กะว่าทำรีพอร์ตเสร็จว่าจะส่ง อ.ที่ปรึกษา เลยจะได้ทำส่วนของเอกสารต่อ หนูก็อ่านตามบทความเก่าๆในกระทู้และทำตามเรื่อยๆ เลยไม่รู้เลยอันไหนเก่าใหม่
Date :
2018-01-09 14:42:39
By :
panthipa
ปกติ โค๊ดมันแยกส่วนกันอยู่แล้วครับ แต่ละหน้าไม่เกี่ยวข้องกัน
จะเกี่ยวข้องกันก็บางส่วน เช่น session ซึ่งก็ใช้งานร่วมกันได้
แต่จะทำงานได้หรือไม่ก็ขึ้นอยู่กับสภาพแวดล้อม php version ไหน
ก็ต้องลองศึกษาโค๊ด และประยุกต์ใช้ครับ
Date :
2018-01-09 15:01:13
By :
Chaidhanan
ในเครื่องรุ่นนี้ยุค่ะ
Date :
2018-01-09 15:11:59
By :
panthipa
สร้างไฟล์ ใหม่ ใส่โค๊ดด้านล่าง แล้วลองรันดู จะแสดง environment ของ php server
Code (PHP)
<?php
phpinfo();
Date :
2018-01-09 15:20:35
By :
Chaidhanan
เป็น PHP Version 5.2.6 ค่ะ
Date :
2018-01-09 15:38:01
By :
panthipa
mysqli ทำงานได้อยู่แล้วครับ
ก็อยู่ที่ จขกท เอง ว่าจะใช้ ผสมกันหรือเปล่า หรือจะแก้ให้เป็น ของเก่าทั้งหมด หรือจะเขียนใหม่ทั้งหมด
ฟังก์ชั่น mysql ธรรมดา ไม่มี prepare statement ต้องใช้ mysqli หรือ pdo
ถ้าใช้ mysql ธรรมดา ก็ต้องเขียน escape เอาเอง โดยใช้คำสั่ง mysql_escape_string
ก็ลองศึกษาดูครับ
Date :
2018-01-09 16:28:30
By :
Chaidhanan
ตามตัวอย่างหนูยังทำไม่ได้ค่ะ ตอนนี้แก้ไขโดยการใช้วิธีค้นหาข้อมูล จากวันที่ถึงวันที่ แต่สร้างหน้า Update ขึ้นมาอีกหนึ่งหน้าแล้วสั่ง action ค่ะ
Date :
2018-01-11 16:25:27
By :
panthipa
พี่ค่ะรบกวนอีกรอบตอนนี้คือกด อัพเดท และ status เป็น OK หมดเลย อยากเอาแค่แถวที่ค้นหานะค่ะ
Code (PHP)
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Update</title>
</head>
<body>
<?php
$objConnect = mysql_connect("localhost","root","03112530") or die("Error Connect to Database");
$objDB = mysql_select_db("customer");
$strSQL = "UPDATE cus SET status='OK' ";
$objQuery = mysql_query($strSQL);
if($objQuery)
{
echo "บันทึกเรียบร้อย";
}
else
{
echo "Error Save [".$strSQL."]";
}
mysql_close($objConnect);
?>
</body>
</html>
Date :
2018-01-11 17:31:02
By :
panthipa
$strSQL = "UPDATE cus SET status='OK' where id in (".implode(',', $id).') ';
เพิ่มสีแดง แต่ $id มาจากไหนส่งมา id เดียว หรือ หลาย id
อันบน สำหรับ หลาย id อันล่างสำหรับ id เดียว
$strSQL = "UPDATE cus SET status='OK' where id =". $id ;
ประวัติการแก้ไข 2018-01-11 18:16:14
Date :
2018-01-11 18:14:21
By :
Chaidhanan
Load balance : Server 04