ต้องการ insert ข้อมูลเข้า phpmyadmin ที่มี foreign key จะทำยังไงคะ
มี table unit กับ project โดยที่ unitID เป็น FK ของ project
โดยที่ projectUnit` เป็น drop down list ดึง unitName มาจาก unit
อยากจะถามว่า เราจะเพิ่ม FK ให้เข้า table project ยังไงคะ เพราะตอนสร้างฟอร์มให้กรอกข้อมูลโปรเจค ไม่มี unitID
Code (SQL)
CREATE TABLE `project` (
`projectID` int(3) NOT NULL,
`projectName` varchar(50) NOT NULL,
`projectUnit` varchar(50) NOT NULL,
`projectYear` int(4) NOT NULL,
`startDate` date NOT NULL,
`endDate` date NOT NULL,
`projectDescription` varchar(100) NOT NULL,
`projectStatus` varchar(50) NOT NULL,
`unitID` int(3) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `unit` (
`unitID` int(3) NOT NULL,
`unitName` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Tag : PHP, MySQL, JavaScript
Date :
2016-02-09 11:41:57
By :
um0000um
View :
4842
Reply :
15
ก็ส่งค่า value ของ unitID ที่เอามาทำเมนู ผ่าน get post ajax ตามถนัดครับ
Date :
2016-02-09 11:54:02
By :
apisitp
ถ้า Query ใน Process เดียวกัน และ PK มันเป็น Auto Increment ให้มช้
Code (PHP)
$unitID = mysql_insert_id();
Date :
2016-02-09 13:16:00
By :
mr.win
ตอบความคิดเห็นที่ : 2 เขียนโดย : mr.win เมื่อวันที่ 2016-02-09 13:16:00
รายละเอียดของการตอบ ::
คือใช้ dreamweaver ช่วยrecord ค่าน่ะค่ะ ต้องแก้ตรงไหนคะ
Code (PHP)
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
if (PHP_VERSION < 6) {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
}
$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
$insertSQL = sprintf("INSERT INTO project (projectName, projectUnit, projectYear, startDate, endDate, projectDescription, projectStatus) VALUES (%s, %s, %s, %s, %s, %s, %s)",
GetSQLValueString($_POST['projectName'], "text"),
GetSQLValueString($_POST['projectUnit'], "text"),
GetSQLValueString($_POST['projectYear'], "int"),
GetSQLValueString($_POST['startDate'], "date"),
GetSQLValueString($_POST['endDate'], "date"),
GetSQLValueString($_POST['ProjectDescription'], "text"),
GetSQLValueString($_POST['projectStatus'], "text"));
Date :
2016-02-09 23:02:24
By :
um0000um
หลังจาก mysql_query(); ครับ
Date :
2016-02-10 09:14:56
By :
mr.win
ตอบความคิดเห็นที่ : 4 เขียนโดย : mr.win เมื่อวันที่ 2016-02-10 09:14:56
รายละเอียดของการตอบ ::
ใส่ตามนี้รึเปล่าคะ T_T
แต่มันยังerror
Code
Cannot add or update a child row: a foreign key constraint fails (`edpex_db`.`project`, CONSTRAINT `project_ibfk_1` FOREIGN KEY (`unitID`) REFERENCES `unit` (`unitID`))
อยู่เลยค่ะ
Code (PHP)
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
if (PHP_VERSION < 6) {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
}
$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
$insertSQL = sprintf("INSERT INTO project (projectName, projectUnit, projectYear, startDate, endDate, projectDescription, projectStatus) VALUES (%s, %s, %s, %s, %s, %s, %s)",
GetSQLValueString($_POST['projectName'], "text"),
GetSQLValueString($_POST['projectUnit'], "text"),
GetSQLValueString($_POST['projectYear'], "int"),
GetSQLValueString($_POST['startDate'], "date"),
GetSQLValueString($_POST['endDate'], "date"),
GetSQLValueString($_POST['ProjectDescription'], "text"),
GetSQLValueString($_POST['projectStatus'], "text"));
mysql_select_db($database_Myconnect, $Myconnect);
$Result1 = mysql_query($insertSQL, $Myconnect) or die(mysql_error());
$unitID = mysql_insert_id();
$insertGoTo = "manage_project.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));
}
Date :
2016-02-10 15:22:39
By :
um0000um
Code (PHP)
$insertSQL = sprintf("INSERT INTO project (projectName, projectUnit, projectYear, startDate, endDate, projectDescription, projectStatus) VALUES (%s, %s, %s, %s, %s, %s, %s)",
ข้างบน field ไหน ที่เป็น unitID ครับ ตาราง project ฟีลด์ unitID ต้องใส่เข้าไปด้วย สำคัญมากๆ
ตาราง unit ต้องเป็น primary table
ส่วนตาราง project ต้องเป็น secondary table มี field unitID เป็น foriegn key ชี้ไปที่ ตาราง unit ฟีลด์ unitID ครับ
Date :
2016-02-10 16:04:58
By :
Chaidhanan
ตอบความคิดเห็นที่ : 6 เขียนโดย : Chaidhanan เมื่อวันที่ 2016-02-10 16:04:58
รายละเอียดของการตอบ ::
ใส่แล้วค่ะ แต่ว่าใน Dreamweaver มันจะให้เราเลือกตัวแปรข้อมูลจากฟอร์ม ที่จะเอาค่าไปใส่ใน field unitID ก็เลยเลือกจาก projectUnit ไปค่ะ แต่ว่าในโค้ด drop down list
Code (PHP)
<select name="projectUnit" id="unit">
<?php
$q="select * from unit";
$qr=mysql_query($q);
while($rs=mysql_fetch_array($qr)){
?>
<option value="<?=$rs['unitID']?>">
<?=$rs['unitName']?>
</option>
<?php } ?>
</select>
ตามด้านบน ในfieldของ projectUnit มันก็จะเก็บเป็นค่าตัวเลขไปอะคะ ใน DB เก็บค่าได้แบบนี้
ตอนโชวค่า projectUnit มันเลยออกมาเป็นตัวเลขอ่าค่ะ
Code (PHP)
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
if (PHP_VERSION < 6) {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
}
$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
$insertSQL = sprintf("INSERT INTO project (projectName, projectUnit, projectYear, startDate, endDate, projectDescription, projectStatus, unitID) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)",
GetSQLValueString($_POST['projectName'], "text"),
GetSQLValueString($_POST['projectUnit'], "text"),
GetSQLValueString($_POST['projectYear'], "int"),
GetSQLValueString($_POST['startDate'], "date"),
GetSQLValueString($_POST['endDate'], "date"),
GetSQLValueString($_POST['ProjectDescription'], "text"),
GetSQLValueString($_POST['projectStatus'], "text"),
GetSQLValueString($_POST['projectUnit'], "int"));
mysql_select_db($database_Myconnect, $Myconnect);
$Result1 = mysql_query($insertSQL, $Myconnect) or die(mysql_error());
//$unitID = mysql_insert_id();
$insertGoTo = "manage_project.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));
}
Date :
2016-02-10 16:38:55
By :
um0000um
ที่คุณต้องการต้องการให้ ฟีลด์ projectUnit เป็นชื่อใช่ไหมครับ
แต่โค๊ดที่ทำตอนนี้ เข้าได้ไม่เออเร่อร์ แล้วใช่ไหมครับ
Date :
2016-02-10 17:10:27
By :
Chaidhanan
คำถามแรก ว่าไงครับถูกต้องไหมต้องการเป็น อักษร ถ้าใช้ก็ลองดูโค๊ดข้างล่างครับ
Code (PHP)
$preSQL="INSERT INTO project
(projectName, projectUnit, projectYear, startDate, endDate, projectDescription, projectStatus, unitID)
select %s, unitName, %s, %s, %s, %s, %s, unitID from unit where unitID=%s";
$insertSQL = sprintf( $preSQL,
GetSQLValueString($_POST['projectName'], "text"),
GetSQLValueString($_POST['projectYear'], "int"),
GetSQLValueString($_POST['startDate'], "date"),
GetSQLValueString($_POST['endDate'], "date"),
GetSQLValueString($_POST['ProjectDescription'], "text"),
GetSQLValueString($_POST['projectStatus'], "text"),
GetSQLValueString($_POST['projectUnit'], "int")
);
ปล. สำหรับผม จะไม่ใช้ฟีลด์ projectUnit ครับซ้ำซ้อน กับ ฟีลด์ unitName ในตาราง unit จะใข้ join กัน เวลาแสดงผลครับ
ประวัติการแก้ไข 2016-02-10 17:29:53
Date :
2016-02-10 17:26:01
By :
Chaidhanan
Code (SQL)
select tb1.*, u.unitname from table tb1 left join unit u on u.unitID = tb1.unitID
ส่วน fk ยังไงก็ต้องกรอกครับ ถ้าไม่กรอกก็ต้องทำให้เลือกได้(มันก็คือกรอกโดยการเลือก)
fk เป็นแค่ permission กำหนดให้กรอกโดยต้องมีในอีกตารางนึง จะมากรอกมั่วๆ ไม่ได้เท่านั้นครับ
Date :
2016-02-11 02:33:36
By :
Chaidhanan
ทำได้ครับ
เมื่อ insert project แล้ว เราสามารถ ดึงค่า project_id ที่เป็น auto increment ได้
ด้วยคำสั่ง mysql_insert_id(); ครับ
Code (PHP)
$project_id = mysql_insert_id();
$sql='insert into team set project_id = '.$project_id;
Date :
2016-02-12 19:38:06
By :
Chaidhanan
ตอบความคิดเห็นที่ : 14 เขียนโดย : Chaidhanan เมื่อวันที่ 2016-02-12 19:38:06
รายละเอียดของการตอบ ::
พอจะเข้าใจแล้วค่ะ ก็คือ mysql_insert_id(); เป็นการ get auto increment id อันล่าสุดใช่ไหมคะ แล้วตอนที่เรากรอกค่าของอีกตารางนึง ก็นำค่า auto increment id อันนั้นมาใส่ใน fk ของtable ที่เรากำลังทำอยู่
มีอีกคำถามค่ะ
<script language="javascript">
function CreateSelectOption(ele)
{
var objSelect = document.getElementById(ele);
var Item = new Option("", "");
objSelect.options[objSelect.length] = Item;
<?php
$objQuery = mysql_query($strSQL);
while($objResult = mysql_fetch_array($objQuery))
{
?>
var Item = new Option("<?php echo $objResult["Firstname"];?>",
"<?php echo $objResult["UserID"];?>");
objSelect.options[objSelect.length] = Item;
<?php
}
?>
}
function CreateNewRow()
{
var intLine = parseInt(document.frmMain.hdnMaxLine.value);
intLine++;
var theTable = document.getElementById("tbExp");
var newRow = theTable.insertRow(theTable.rows.length)
newRow.id = newRow.uniqueID
var newCell
//*** Column 1 ***//
newCell = newRow.insertCell(0);
newCell.id = newCell.uniqueID;
newCell.setAttribute("className", "css-name");
newCell.innerHTML = "<center><INPUT TYPE=\"TEXT\" SIZE=\"5\" NAME=\"Column1_"+intLine+"\" ID=\"Column1_"+intLine+"\" VALUE=\"\"></center>";
//*** Column 5 ***//
newCell = newRow.insertCell(1);
newCell.id = newCell.uniqueID;
newCell.setAttribute("className", "css-name");
newCell.innerHTML = "<center><SELECT NAME=\"Column5_"+intLine+"\" ID=\"Column5_"+intLine+"\"></SELECT></center>";
//*** Create Option ***//
CreateSelectOption("Column5_"+intLine)
//dropdown( $name, array $options, $selected=null )
document.frmMain.hdnMaxLine.value = intLine;
}
</script>
โค้ดด้านบน ตรง option มันจะดึงมาจาก db เลย แต่ถ้าเราต้องการกำหนด option เอง ต้องทำฟังชั่นยังไงคะ
**นำโค้ดมาจาก https://www.thaicreate.com/community/javascript-create-dynamic-element-html-form.html ค่ะ
ขอบคุณค่ะ
ประวัติการแก้ไข 2016-02-12 22:36:52 2016-02-12 23:03:44 2016-02-12 23:03:48
Date :
2016-02-12 22:36:14
By :
um0000um
Load balance : Server 02