 |
มีปัญหาในการ Insert ข้อมูลไม่ต้องเงื่อนไขของ if-else ครับ |
|
 |
|
|
 |
 |
|
มีปัญหาในการ Insert ข้อมูลไม่ตรงเงื่อนไขของ if-else ครับ คือเงื่อนไขของผมคือถ้ามีข้อมูลที่ว่าง หรือ ข้อมูลที่มีซ้ำในฐานข้อมูลจะให้ออกมาเป็น 'F' ผมลอง echo Statment มาแล้วนะครับผลที่ได้ตรงตามที่ต้องการ แต่มันไม่เก็บในฐานข้อมูลตรงตามที่ต้องการ
echo $select_another." ".$sum." ".$objResult1['another_name']."<br>";
SELECT * FROM another
INSERT INTO another (another_name,busi_no,bg_no,ser_no,Created,CreatedBy,CreatedTime,Enable)VALUES
SELECT * FROM another
dpu F dpu // dpu มีซ้ำในฐานข้อมูลคำว่า dpu ผลจึงออกเป็น F
dpu T spu
dpu T sss
dpu T ppp
dpu T ooo // มันเอาตัวนี้ไปเก็บ
SELECT * FROM another
ooo T dpu
ooo T spu
ooo T sss
ooo T ppp
ooo F ooo // dpu มีซ้ำในฐานข้อมูลคำว่า dpu ผลจึงออกเป็น F และมันเอาตัวนี้ไปเก็บ
SELECT * FROM another
spu T dpu
spu F spu // spu มีซ้ำในฐานข้อมูลคำว่า spu ผลจึงออกเป็น F
spu T sss
spu T ppp
spu T ooo
SELECT * FROM another
sss T dpu
sss T spu
sss F sss // sss มีซ้ำในฐานข้อมูลคำว่า sss ผลจึงออกเป็น F
sss T ppp
sss T ooo // มันเอาตัวนี้ไปเก็บ
SELECT * FROM another
bu T dpu
bu T spu
bu T sss
bu T ppp
bu T ooo // มันเอาตัวนี้ไปเก็บ
สรุปคือ มันเก็บข้อมูลตัวหลังสุดไปใส่ครับ ซึ่งไม่ถูกต้อง มันต้องนำสิ่งที่เป็นเงื่อนไขไปเก็บครับ
Code (PHP)
$strSQL = "SELECT * FROM another";
$objQuery = mssql_query($strSQL) or die ("Error Query [".$strSQL."]");
$objResult = mssql_fetch_array($objQuery);
echo $strSQL."<br>";
$count1=count($_POST[select_another]);
if(is_array($_POST[select_another]) and ($count1)>0)
{
$strSQL ="INSERT INTO another ";
$strSQL .="(another_name,busi_no,bg_no,ser_no,Created,CreatedBy,CreatedTime,Enable)";
$strSQL .="VALUES ";
echo $strSQL."<br>";
$values = array();
foreach($_POST['select_another'] as $select_another)
{
$strSQL1 = "SELECT * FROM another";
$objQuery1 = mssql_query($strSQL1) or die ("Error Query [".$strSQL1."]");
echo $strSQL1."<br>";
while($objResult1 = mssql_fetch_array($objQuery1))
{
$select_another = trim($select_another);
$another_name = trim($objResult1[another_name]);
if (empty($select_another) or $select_another==$another_name)
{
$sum = "F";
}
else
{
$sum = "T";
}
echo $select_another." ".$sum." ".$objResult1['another_name']."<br>";
}
array_push($values, "('".$select_another."','".$_POST["select_busi"]."','".$_POST["select_bg"]."','".$_POST["select_service"]."',
'".$_POST["text_user_create"]."','".$_POST["text_date_create"]."','".$_POST["text_time_create"]."','".$sum."')");
}
$strSQL .= implode(", ", $values);
}
$objQuery = mssql_query($strSQL);
***ขอร้องผู้รู้ทุกท่านช่วยผมที่ครับ ส่งพรุ่งนี้เช้าแล้ว(7 ก.ย. 54)
Tag : PHP, Ms SQL Server 2008
|
ประวัติการแก้ไข 2011-09-06 16:33:50 2011-09-06 16:34:52 2011-09-06 16:38:55 2011-09-06 16:39:16
|
 |
 |
 |
 |
Date :
2011-09-06 16:33:30 |
By :
Nos1001 |
View :
984 |
Reply :
8 |
|
 |
 |
 |
 |
|
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เอางี้ดีกว่า ขอเริ่มจาก form ก่อนเลยแล้วกัน เอาฟอร์ม มา ผมจะได้ดูว่าจะเขียน php รับยังไงให้เหมาะ
|
 |
 |
 |
 |
Date :
2011-09-06 16:37:55 |
By :
mr.v |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
นี่ครับ อธิบายคร่าวๆ ก่อนนะครับ ถ้าเราเลือก Listmenu มาเสร็จ ข้อมูลที่เป็น sub ย่อยก็จะมาแสดงที่ Listmenu แบบ multiple เมื่อกด submit ข้อมูลก็จะไปเข้าที่ตาง another ตรงนี้ละครับ มัน insert เข้าไป มันก็เลยซ้ำกัน ผมก็เลยถ้าข้อมูลซ้ำกับ db อยู่แล้วก็ให้เป็น F เพราะผมจะ Where Enable =T เอาครับ จะได้ไม่ขึ้นซ้ำกัน ผมใช้ Distinct ไม่ได้นะครับ พอใส่แล้ว javascript แบบ Dependent ไม่ขึ้นเลยครับ
Code (PHP)
<select id="select_another" name="select_another[]" multiple size="5">
<?PHP
$another=$_POST['select_another'];
if($another){
foreach ($another as $n){echo 'You selected ',$n,'<br />';}
}
?>
</select>
<input type="text" name="text_etc" id="etc"> <input type="button" onClick="addOptionAllAnother();" value='เพิ่ม'>
|
 |
 |
 |
 |
Date :
2011-09-06 16:46:34 |
By :
Nos1001 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ผมก็ดูแล้วงงๆ ขอไปทีละขั้นแล้วกัน form จะได้แบบนี้ถูกมั้ย?
Code (PHP)
<select id="select_another" name="select_another[]" multiple size="5">
<option value="dpu">dpu</option>
<option value="spu">spu</option>
<option value="sss">sss</option>
<option value="ppp">ppp</option>
<option value="ooo">ooo</option>
</select>
<input type="text" name="text_etc" id="etc"> <input type="button" value='เพิ่ม'>
|
 |
 |
 |
 |
Date :
2011-09-06 16:54:07 |
By :
mr.v |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ถ้าจะเช็คการซ้ำกับในฐานข้อมูล ต้องเช็คก่อน แล้วค่อย insert ไม่ใช่เหรอครับ
Code (PHP)
<?php
$strSQL = "SELECT * FROM another";
$objQuery = mssql_query($strSQL) or die("Error Query [" . $strSQL . "]");
$objResult = mssql_fetch_array($objQuery);
echo $strSQL . "<br>";
$count1 = count($_POST[select_another]);
if (is_array($_POST[select_another]) and ($count1) > 0) {
$strSQL = "INSERT INTO another ";
$strSQL .="(another_name,busi_no,bg_no,ser_no,Created,CreatedBy,CreatedTime,Enable)";
$strSQL .="VALUES ";
echo $strSQL . "<br>";
$values = array();
foreach ($_POST['select_another'] as $select_another) {
$strSQL1 = "SELECT * FROM another";
$objQuery1 = mssql_query($strSQL1) or die("Error Query [" . $strSQL1 . "]");
echo $strSQL1 . "<br>";
while ($objResult1 = mssql_fetch_array($objQuery1)) {
$select_another = trim($select_another);
$another_name = trim($objResult1[another_name]);
if (empty($select_another) or $select_another == $another_name) {
$sum = "F";
} else {
$sum = "T";
}
echo $select_another . " " . $sum . " " . $objResult1['another_name'] . "<br>";
}
array_push($values, "('" . $select_another . "','" . $_POST["select_busi"] . "','" . $_POST["select_bg"] . "','" . $_POST["select_service"] . "',
'" . $_POST["text_user_create"] . "','" . $_POST["text_date_create"] . "','" . $_POST["text_time_create"] . "','" . $sum . "')");
}
$strSQL .= implode(", ", $values);
}
$objQuery = mssql_query($strSQL);
?>
โค้ดนี้ก๊อปจากข้างบน
ดูจากโค้ดแล้วก็ไม่ค่อยเข้าใจหรอกว่า form มันมายังไง แต่ $strSQL1 = "SELECT * FROM another"; ข้างใน foreach มันเป็นการ while เหมือนกับวนแสดงผลข้อมูลเลย
ทั้งที่จริงๆใน select ควรจะมี where หาตามเงื่อนไขไปเลย
แต่เอามา while loop แบบนี้ แล้วไม่มีการ break เมื่อตรงเงื่อนไขแบบนี้ มันก็วนไปจนจบฐานข้อมูล ซึ่งถ้าข้อมูลสุดท้ายในฐานเป็น T มันก็ T หมด ถ้าเป็น F มันก็ F หมดน่ะสิครับ
|
 |
 |
 |
 |
Date :
2011-09-06 17:14:57 |
By :
mr.v |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
แล้วแก้ยังไงดีครับ ช่วยหน่อยครับ พรุ่งนี้แล้ว เขาต้องเทสระบบ
|
 |
 |
 |
 |
Date :
2011-09-06 19:53:13 |
By :
Nos1001 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
แนะนำว่าต้องหาทางออกจากเงื่อนไข while ครับ ลองเอา break ไปใส่ดูในส่วนใดส่วนหนึ่งของ if ภายใน while ลองดู
|
 |
 |
 |
 |
Date :
2011-09-06 20:17:20 |
By :
mr.v |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณหลายๆเด้ออ ได้ละครับ แต่ม่ายรู้ถ้าเจอข้อมูลมากๆ จะติดอีกไหมเนี่ย ตะงิดๆไงไม่รู้
Code (PHP)
if (empty($select_another) or $select_another==$another_name)
{
$sum = "F";
break;
}
else
{
$sum = "T";
}
|
 |
 |
 |
 |
Date :
2011-09-06 20:29:31 |
By :
Nos1001 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ควรใส่ทั้งสองเงื่อนไขนะครับ
คืออย่างที่ผมบอกจริงๆนั่นแหละ เวลาจะ select หาเงื่อนไขเพื่อนำมา insert มันควรจะเป็น select * from table WHERE ควรจะมีตรงนี้ด้วย
แต่คุณทำแล้วไม่มีเลย
สภาพมันเลยออกมาเหมือนกับ select ทั้ง table แล้วมา while loop เอาจนหมดตาราง ค่าสุดท้ายในตารางเป็นยังไงก็ได้ค่า $sum เป็นอย่างนั้น แบบนี้มันผิดครับ แต่ถ้า break ช่วยได้ก็ ok.
|
 |
 |
 |
 |
Date :
2011-09-06 20:59:33 |
By :
mr.v |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|