สร้างตารางใหม่ เหมือนกับตารางหนึ่งๆ ในฐานข้อมูลเดียวกัน ที่เลือกมา --- PHP Mysql**ใช้ CREATE Table like .... ได้หรือไม่
Code (SQL)
CREATE TABLEnew_table LIKE original_table;
Code (SQL)
INSERT INTOnew_table SELECT * FROM original_table;
Date :
2014-01-28 12:16:32
By :
mr.win
สร้างตารางใหม่ แล้วคัดลอกตารางเดิม
Code (SQL)
CREATE TABLE new_table SELECT * FROM original_table;
คำสั่งโอเคค่ะ ได้ผล ^___^
ต่อไปคือ update ข้อมูล
เทคนิคควรอัพเดตลงฐานเดิม แต่กลายเป็นว่า เพิ่มมาอีกฟิลด์
หรือจะต้อง Drop ออกก่อน แล้วค่อย insert ใหม่
Date :
2014-01-28 14:58:16
By :
kullasom
$sqlIns = "UPDATE $tabNew($val2) VALUES $val ";
echo $sqlIns
UPDATE tabNew(id,cl1,cl2,cl3) VALUES '4403060101007',1,2,'7ห้องน้ำ ใช้งานไม่ได้หลายปีแล้ว ปัจจุบันใช้ห้องน้ำกับเพื่อนบ้าน'
ไม่อัพเดตให้ค่ะ...มีขาดตกตรงไหนรึเปล่าค่ะ...หรือยังมีการอัพเดตแบบอื่นที่หนูไม่ทราบ วานผู้รู้ค่ะ ^____^
Date :
2014-01-30 14:58:09
By :
kullasom
UPDATE tabNew set cl1=1, cl2=2, cl3='7ห้องน้ำ ใช้งานไม่ได้หลายปีแล้ว ปัจจุบันใช้ห้องน้ำกับเพื่อนบ้าน' where id = '4403060101007'
Date :
2014-01-30 15:01:32
By :
sakuraei
แล้วหากเป็นเช่นนั้น แสดงว่า ตารางที่มี PK 2-3 ตัว ก็ต้อง Where ทั้งหมด รึเปล่าค่ะ
$sqlIns = "UPDATE $tabNew($val2) VALUES $val ";
ก็ต้องเป็น $sqlIns = "UPDATE $tabNew SET ($val2) = $val WHERE .... "; //แบบนี้รึเปล่าค่ะ ลองเปลี่ยนแบบนี้มาแล้วค่ะ ไม่ออกแท้เหลา
หลัง where เนียะ จะเรียกทีละตัวมาอย่างไรจากอีกหน้านึง ฮึบฮึบ ...
ประวัติการแก้ไข 2014-01-30 15:09:57
Date :
2014-01-30 15:09:56
By :
kullasom
หรือต้องอัพเดตใน loop หรือยังไง
หรือไม่มีแน่นอน วิธีดังกล่าวว ฮ่าๆ เริ่มสนุก ><
ประวัติการแก้ไข 2014-01-30 15:20:05
Date :
2014-01-30 15:14:25
By :
kullasom
$sqlIns = "UPDATE $tabNew SET ( $val2 ) = $val WHERE ....
เอาวงเล็บออกครับ
$val2 ต้องเป็นชื่อฟิลด์ในเทเบิ้ลครับ
วนลูปตัวแปรที่เป็น อาร์เรย์ด้วย foreach และเอาคำสั่งอัพเดตข้อมูลใส่ในลูปครับ
Date :
2014-01-30 15:21:04
By :
sakuraei
ประเด็นคือ ไม่ได้เก็บเป็นอารเรย์ อ่ะค่ะ
Date :
2014-01-30 17:01:45
By :
kullasom
แสดงว่าข้อมูลอยู่ในตัวแปรที่ดึงมาจากฐานข้อมูลโดยการวนลูป while ใช่ป่ะ
Date :
2014-01-30 17:04:53
By :
sakuraei
ถูกต้อง อย่างแน่แท้
Date :
2014-01-31 08:04:30
By :
kullasom
ประมาณนี้มั้งครับ
while($data = mysql_query($rs)){
$sql2 = "UPDATE $tabNew SET $field = $val WHERE id = '{$data["p_id"]}'";
$rs2 = mysql_query($sql2) or die(mysql_error());
}
Date :
2014-01-31 10:29:40
By :
sakuraei
Date :
2014-01-31 10:48:57
By :
kullasom
อยากรู้วิธี submit หรือ insert ข้อมูล (ที่คิวรี่จากDB มาเก็บในตัวแปร) แล้วกดแค่ปุ่มเดียว เพื่อบันทึกข้อมูลทั้งหมด ลงฐานข้อมูลพร้อมกัน
**มิใช่ อาร์เรย์
จากภาพต้องกดที่ละ rows ถึงจะบันทึกให้
พอจะมีscripts ช่วยไม๊ค่ะ แฮะๆ
ทั้งหมดทั้งมวล อยู่ในความดูแลของ loop for
และภายใน ก็มีloop while เพื่อดึงค่ามาอีกสองสาม loop
><"
//กำลังคิดว่า ควรแยกloop whileนี้ ออกจาก for นี้รึเปล่า แต่มันก็ต้องพึ่งพาซึ่งกันและกัน ><
Date :
2014-02-03 18:04:51
By :
kullasom
สวัสดีตอนสายค่ะ guru Unidentifier Eiei
เป็นเช่นนี้ จะแยกลูปอย่างไรดี
แสดงข้อมูลที่ไม่ตรงกัน เพื่อแก้ไขให้ถูก
จะจัดการยังไงกับส่วนที่ข้อมูลตรงกันแล้ว โดยให้มีปุ่ม save หนึ่งเดียวเท่านั้น
//ถ้าเลือก checkbox บันทึกพร้อมกัน คงดี
แต่นั้น ไม่ได้เก็บเป็นอาร์เรย์ด้วยซิ
#ประเด็นเอาหัวตารางออกในส่วนที่ข้อมูลตรงกันแล้ว ออกไป...
ประวัติการแก้ไข 2014-02-04 10:47:07
Date :
2014-02-04 10:46:25
By :
kullasom
เป็นเพราะหนูเองค่ะ
Date :
2014-02-04 12:37:47
By :
kullasom
พี่ Unidentifier เคยใช้ $log ... on off เพื่อจำผู้เข้าใช้งาน ทุกเพจ
คือตอนนี้ จะเปลี่ยนจาก ตัวนี้ ไปเป็น SESSION --- user psw แบบปกติ
#แก้โค้ดของผู้อื่นอยู่ค่ะ
ประเด็นคือ เมื่อเปลี่ยนรูปแบบแล้ว ...ปัญหาที่พบคือ method=Post action=ไปยังที่ ทำหน้าที่insert
กดsubmit แล้ว ไม่ทำงานค่ะ ไม่มีผลลัพธ์ใดๆเกิดขึ้น อยากรู้ว่าความเป็นไปได้ที่ไม่insertให้เป็นเพราะอะไร อ่ค่ะ
//ตอนนี้มึนจนมองไม่ออกว่า เออรัก เออเร่อ ตรงไหนกัน ><
Date :
2014-02-05 15:10:57
By :
kullasom
เดายากครับต้องเอาโค้ดมาไล่ดูถึงจะหาจุดบกพร่องได้
Date :
2014-02-05 15:31:15
By :
sakuraei
จะพยายามนำเสนอให้เห็นภาพน่ะค่ะ
Date :
2014-02-05 15:46:32
By :
kullasom
ที่พี่พูดไปเพื่อต้องการให้เอาโค้ดมาลงให้ดู.....
Date :
2014-02-05 15:52:47
By :
sakuraei
Code (PHP)
<?
session_start();
?>
....
<?php
include("connectDB.php");
$link = mysql_connect($DB_HOST,$DB_USERNAME,$DB_PASSWORD);
mysql_select_db($DB_DATABASE,$link);
mysql_query("SET NAMES 'UTF8' ");
if ($_SESSION["username"] == NULL) {
echo "<meta http-equiv='Refresh' content='0; URL=index.php'>";
}else{
?>
<table border="1">
<tr><td>Row No.</td><td>Primary Key(s)</td><td>Results<br> ถ้าไม่ปรากฎข้อมูล แสดงว่าข้อมูลทั้งสองรอบตรงกันแล้ว ให้กดปุ่ม Save เพื่อบันทึกข้อมูล</td></tr>
<form id="form1" name="form1" method="post" action="insertrows.php">
..... .... //ส่วนนี้ ดึงข้อมูลแสดงแต่ละ column
<tr><td>field_name</td><td>ROUND 1</td><td>ROUND 2</td><td>Corrected Value</td></tr>
<?
$k = 0;
$count =0 ;
while ($k < mysql_num_fields($rst11)) {
$name = mysql_field_name($rst11, $k);
$value1 = mysql_result($rst11, 0,$name);
$value2 = mysql_result($rst22, 0,$name);
// echo $value2."<br>";
if($name!=$pk0 && $name!=$pk1){
if($value1 != $value2){$count=$count+1;
?>
<tr>
<td><?=mysql_field_name($rst11, $k)?></td>
<td onClick="copymessage(this,<?=$i?>,<?=$count?>)"><? echo $value1?></td>
<td onClick="copymessage(this,<?=$i?>,<?=$count?>)"><? echo $value2?></td>
<td bgcolor="#0099FF">
<input type="text" name="<?=$name?>" id="ln1<?=$i?><?=$count?>" value="" size="40" onClick="this.value='';"/></td>
</tr>
<?
}else{
?>
<input type="hidden" name="<?=$name?>" id="<?=$name?>" value="<?=$value1?>"/>
<?
}
}
$k++;
?>
<?
}//end while
?>
</table>
<input type="hidden" name="tabN" id="tabN" value="<?=$tabN?>">
<input type="hidden" name="DB_DATABASE2" id="DB_DATABASE2" value="<?=$DB_DATABASE2?>">
<!-- <input type=hidden name="log"> เดิมมี ...เอาออกไป ไม่มีผลบน localhost
-->
<input type="hidden" name="numPK" id="numPK" value="<?=$numPK?>">
<div align="center">
<input type="submit" name="Submit" value="Save" />
<input type="reset" name="Reset" value="Reset"></div>
</form>
</td>
<? }else{ ?>
<td bgcolor="#CCCCCC">ตรวจสอบแล้ว</td>
<?
}
?>
</tr>
<? }//end for?>
</table>
<?
} //end if user
?>
[color=maroon]-------------------------------------------------------------------
Code Insert
Code (PHP)
<?
session_start();
?>
...
<?php
include("connectDB.php");
$link = mysql_connect($DB_HOST,$DB_USERNAME,$DB_PASSWORD);
mysql_select_db($DB_DATABASE,$link);
mysql_query("SET NAMES 'UTF8' ");
$tab1 = $_SESSION['tab1'];
$tabN = $_SESSION['tabN'];
$numPK = $_POST['numPK'];
//echo $tabN."<br>";
//echo $tab1."<br>";
$DB_DATABASE2 = $_SESSION['DB_DATABASE2'];
//echo $DB_DATABASE2;
$sql = "CREATE TABLE $DB_DATABASE2.$tabN LIKE $tab1";
$rst = mysql_query($sql);
[color=green]..... // ส่วนนี้คิวร่จากฐานข้อมูล ปกติ
// $val มาจาก while ($k < mysql_num_fields($rst11)) {
$name = mysql_field_name($rst11, $k);
$type = mysql_field_type($rst11, $k);
//echo $name.":".$type."<br>";
$value = $_POST[$name];
//if($value==""){$value="NULL";}
if($type=="string"){
$val = $val.",'".$value."'";
}else {
$val = $val.",".$value;
}
$k++;
}//end while
เหมือนเป็นการต่อค่าเข้าด้วยกัน เมื่อมี pk ตัวเดียวกัน เก็บไว้ใน $val
$sqlIns = "INSERT INTO $DB_DATABASE2.$tabN VALUES (".$val.")";
$rstIns = mysql_query($sqlIns);
if($rstIns){
echo '<script>alert("บันทึกข้อมูลเรียบร้อยแล้ว");</script>';
echo "<meta http-equiv='Refresh' content='0; URL=selectrows.php'>";
}
?>
Date :
2014-02-05 16:11:37
By :
kullasom
โค้ดตัวเดียวกันเลยค่ะ
บน localhost เหมือนกันทั้งสองค่ะ แฮะๆ
ต่างกันที่ใช้ log on off กับ session
log on off
.
session
ทดสอบก่อนอัพขึ้น server ค่ะ
ประวัติการแก้ไข 2014-02-05 16:21:49
Date :
2014-02-05 16:14:04
By :
kullasom
อันดับแกให้เพิ่ม or die(mysql_error())
mysql_query($sql) or die(mysql_error()) ;
เพื่อต้องการให้โค้ดแสดง error messages เมื่อมีปัญหา เราจะได้แก้ไขให้ตรงจุด
เพิ่มในโค้ดทุกบรรทัดที่มีการคิวรี่น่ะครับ
Date :
2014-02-05 16:26:22
By :
sakuraei
insert.php
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\AppServ\www\test\insertrows.php:1) in C:\AppServ\www\test\insertrows.php on line 3
'4403060901007','P1','H1',1,,ม.6,-8,8,-7,-7,-7,-7,,3,,-7,,,-7,-7,A,,-7,-7,-7,-7,-7,-7,-7,D,,'',3
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ม.6,-8,8,-7,-7,-7,-7,,3,,-7,,,-7,-7,A,,-7,-7,-7,-7,-7,-7,-7,D,,'',3)' at line 1
Date :
2014-02-05 16:36:38
By :
kullasom
ในไฟล์ insert.php
session_start(); ต้องอยู่เป็นคำสั่งแรกสุดครับ และต้องเปลี่ยนไฟล์ให้เป็น utf8 without BOM
<?php
session_start();
?>
Date :
2014-02-05 17:36:44
By :
sakuraei
$value=$_POST["name"];
$fields=$_POST["filedsname"];
ข้อมูลที่รับมาจาก method post เป็นการเก็บข้อมูลแบบ array ทั้งชื่อฟิลด์ และข้อมูลค่ะ
foreach($value as $key => $val){
$sqlIns = "update TABLE SET {$fields[$key]}= $val where $pk0='$pki0' and $pk1='$pki1'";
$rstIns= mysql_query($sqlIns);
}
วันนี้หนูลองใช้ อย่างที่พี่แนะนำมา .... สิ่งที่พบคือ update ให้แค่ฟิลด์เดียวค่ะ
ลองเปลี่ยน ให้เป็น loop for ก็เหมือนกันค่ะ update ให้แค่ฟิลด์เดียวค่ะ
sql นี้ต้องเพืิ่มเติมอะไรตรงไหน ที่หนูไม่ทราบรึเปล่าค่ะ ^^
Date :
2014-02-28 11:57:52
By :
kullasom
แน่นอนครับ อัพเดทแค่ฟิลด์เดียว เพราะเงื่อนไขมันมีแค่ค่าเดียว
foreach($_POST["name"] as $key => $name){
$sqlIns = "update TABLE SET {$_POST["filedsname"][$key]}= '$name' where $pk0='$pki0 ' and $pk1='$pki1 '";
$rstIns= mysql_query($sqlIns) or die(mysql_error());
}
เมื่อใช้ and เชื่อม มันก็จะเหลือแค่ค่าเดียว ประกอบกับ primary ที่รับมาใช้ในเงื่อนไขมันไม่ได้เปลี่ยนตามการวนลูปนี่ครับ
มันยังเป็นค่าเดิมเสมอ เพราะฉะนั้นก็ไม่แปลกถ้าจะอัพเดทได้แค่เรคคอร์ดเดียว
Date :
2014-02-28 15:29:04
By :
sakuraei
$fields=$_POST["filedsname"];
for($i=0;$i<count($_POST["filedsname"]);$i++) {
$value=$_POST["name"];
foreach($value as $key => $val){
$sqlIns = "update $DB_DATABASE2.$tabN SET {$fields[$key]} = '$val' WHERE $pk0='$pki0' and $pk1='$pki1'";
}
}
}
นำมาใช้ประโยชน์ซะเบย
ประวัติการแก้ไข 2014-03-01 08:50:26
Date :
2014-03-01 08:49:14
By :
kullasom
Load balance : Server 01