|
|
|
ติดปัญหาการเพิ่มข้อมูลหลายๆแถวมันบันทึกข้อมูลซ้ำค่ะ |
|
|
|
|
|
|
|
ติดปัญหาในการเพิ่มข้อมูลหลายๆแถวพร้อมกันค่ะ ต้องการให้เพิ่มข้อมูลได้ทุกแถวพร้อมกันค่ะ โดย ข้อมูล univer_ID ไม่ซ้ำกันค่ะ แต่ที่ทำได้ตอนนี้คือ
รูป ฟอร์มแถวสำหรับเพิ่มข้อมูลโดยดึงข้อมูลมาจากตาราง university โดยให้แสดงจำนวนแถวที่มีทั้งหมดในตาราง university ค่ะ
รูป ฐานข้อมูลค่ะ จะสังเกตเห็นว่า ค่าข้อมูลเข้าตามจำนวนฟิลด์ที่กรอกเข้าไปค่ะ แต่ ตรง Univer_ID นั้น ID จะซ้ำเป็นของตัวที่ 10 ค่ะ
รูป echo ค่าออกมา ดูค่ะ
โค้ดที่เขียนไปประมาณนี้ค่ะ
ไฟล์ฟอร์มเพิ่มข้อมูล
Code (PHP)
<form action="2.php" method="post" name="form1" target="_blank" id="form1">
<?
$link = mysql_connect("localhost", "root", "password");
mysql_select_db("reference_database", $link);
$result = mysql_query("SELECT * FROM university", $link);
$num_rows = mysql_num_rows($result);
//echo "$num_rows Rows\n";
$Line=$num_rows;
?>
<form id="formRegister" name="formRegister" method="post" action="Company_add_save.php" enctype="multipart/form-data">
<p>บริษัท ||
<select name="Com_ID" id="Com_ID">
<option value="">เลือกบริษัท</option>
<?php
$sql="select * from company ";
$a=mysql_query($sql);
while($objResult=mysql_fetch_array($a)){
?>
<option value="<?=$objResult['Com_ID']?>"><?= $objResult['Com_name']?></option>
<?php } ?>
</select></p>
<br/>
<p>ฐานข้อมูล Reference Database ||
<select name="Rf_ID" id="Rf_ID">
<option value="">เลือกฐานข้อมูล Reference Database ที่ต้องการ</option>
<?php
$sql="select * from reference_data ";
$a=mysql_query($sql);
while($objResult=mysql_fetch_array($a)){
?>
<option value="<?=$objResult['Rf_ID']?>"><?=$objResult['Rf_name']?></option>
<?php } ?>
</select></p>
<br/>
แนบไฟล์เอกสาร ||
<input name="file_name" type="file" id="file_name" />
<br/><br/><br/>
<?
$strSQL = "SELECT * FROM university";
$objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");
?>
<table bgcolor="#EDEDED" border="1" cellspacing="0" cellpadding="2" style="border-collapse:collapse; font-weight: bold;">
<tr>
<td rowspan="3" bgcolor="#f79e45" style="text-align: center">ชื่อมหาวิทยาลัย</td>
<tr>
<td colspan="5" bgcolor="#f79e45" style="text-align: center">เดือน :
<label for="Month"></label>
<select name="Month" id="Month">
<option value="">เลือกเดือนที่ต้องการ</option>
<option value="January">January</option>
<option value="February">February</option>
<option value="March">March</option>
<option value="April">April</option>
<option value="May">May</option>
<option value="June">June</option>
<option value="July">July</option>
<option value="August">August</option>
<option value="September">September</option>
<option value="October">October</option>
<option value="November">November</option>
<option value="December">December</option>
</select>
ปี :
<label for="Years"></label>
<select name="Years" id="Years">
<option value="">เลือกเดือนที่ต้องการ</option>
<option value="2015">2015</option>
<option value="2016">2016</option>
<option value="2017">2017</option>
<option value="2018">2018</option>
<option value="2019">2019</option>
<option value="2020">2020</option>
</select>
</tr>
<tr>
<td bgcolor="#f79e45" style="text-align: center">Searches</td>
<td bgcolor="#f79e45" style="text-align: center"><p>Full_Text</p>
<p>Requests</p></td>
<td bgcolor="#f79e45" style="text-align: center"><p>Sub</p>
<p>sessions</p></td>
<td bgcolor="#f79e45" style="text-align: center">Queries</td>
<td bgcolor="#f79e45" style="text-align: center"><p>Citation</p>
<p>Events</p></td>
</tr>
<?php
while($objResult = mysql_fetch_array($objQuery))
{
?>
<tr>
<td><input type="text" name="Univer_name" readonly="1" value="<?=$objResult['Univer_name']?>" size="60"><input name="Univer_ID" type="hidden" value="<?=$objResult['Univer_ID']?>" /></td>
<td><input type="text" name="Searches[]" id="Searches" size="10"></td>
<td><input type="text" name="Full_Text_Requests[]" id="Full_Text_Requests" size="10"></td>
<td><input type="text" name="Sub_sessions[]" id="Sub_sessions" size="10"></div></td>
<td><input type="text" name="Queries[]" id="Queries" size="10"></td>
<td><input type="text" name="Citation_Events[]" id="Citation_Events" size="10"></td>
</tr>
<?php
}
?>
</table>
<? echo $msg ;?>
<br/>
<div align="center"><input type="submit" name="submit" value="บันทึก">
</div>
</form>
ไฟล์สำหรับบันทึก
Code (PHP)
<?php
include('connect.php');
// print array ออกมาดู
print_r($_POST);
$Last_update = date("Y-m-d H:i");
$file_ID = $_REQUEST["file_ID"];
$file_name = '".$_FILES["file_name"]["name"]."';
if (isset($_POST['submit'])) {
$i = 0;
foreach ($_POST['Searches'] as $val) {
$Searches = $val;
$Full_Text_Requests = $_POST['Full_Text_Requests'][$i];
$Sub_sessions = $_POST['Sub_sessions'][$i];
$Queries = $_POST['Queries'][$i];
$Citation_Events = $_POST['Citation_Events'][$i];
mysql_query("INSERT INTO stat(Univer_ID,Rf_ID,
Com_ID,Searches,Full_Text_Requests,Sub_sessions,Queries,
Citation_Events,Month,Years,Last_update,file_name)
VALUES('$Univer_ID','$Rf_ID','$Com_ID',
'$Searches','$Full_Text_Requests','$Sub_sessions',
'$Queries','$Citation_Events','$Month','$Years',
'$Last_update','".$_FILES["file_name"]["name"]."')");
$i++;
}
}
echo mysql_query;
?>
Tag : PHP, HTML/CSS, JavaScript, CakePHP
|
|
|
|
|
|
Date :
2017-03-07 17:13:49 |
By :
viewsmith |
View :
2634 |
Reply :
9 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ถ้ากระบวนการ insert ทำงานได้ไม่มีปัญหาอะไร แสดงว่าคุณมาถูกทางแล้วครับ ทีนี้ลองเปลี่ยน คำสั่ง mysql จาก insert into เป็น replace into ดูครับ หรืออีกวิธี ให้ทำการ select ตารางที่ insert ดูก่อนว่ามีข้อมูล univer_ID ที่เราจะเพิ่มเข้าไปแล้วหรือไม่ ถ้าไม่มีก็ให้ insert โดยสร้างเงื่อนไข if else ในการตรวจสอบก็ได้ครับ
|
|
|
|
|
Date :
2017-03-07 21:08:22 |
By :
Manussawin |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตอบความคิดเห็นที่ : 1 เขียนโดย : Manussawin เมื่อวันที่ 2017-03-07 21:08:22
รายละเอียดของการตอบ ::
เปลี่ยนเป็น replace into ก็ยังเพิ่ม ID เดิมซ้ำกันอยู่ค่ะ
แต่ยังไม่ค่อยเข้าใจคำแนะนำ ที่บอกว่า
"ให้ทำการ select ตารางที่ insert ดูก่อนว่ามีข้อมูล univer_ID ที่เราจะเพิ่มเข้าไปแล้วหรือไม่ ถ้าไม่มีก็ให้ insert โดยสร้างเงื่อนไข if else ในการตรวจสอบ"
หมายถึง ให้ทำการ select ตาราง stat ดู หรอคะ ว่ามีค่า univer_ID ตัวที่เราจะเพิ่มเข้าไปใหม่ มีอยู่ก่อนแล้วรึป่าว แบบนั้นหรอคะ
ถ้าถามว่ามี univer_ID อยุ่ก่อนมั้ย ต้องบอกว่ามีค่ะ แต่ข้อมูลในฟิล์ดอื่นๆจะไม่ซ้ำกันค่ะ ข้อมุลในตารางจะประมาณว่า
stat_ID || รหัสสถิติ
Univer_ID || รหัสมหาลัย
Rf_ID || รหัสฐานข้อมูลที่มหาวิทยาลัยใช้ใช้
Com_ID || รหัสบริษัทเจ้าของฐานข้อมูล
Searches || สถิติฐานข้อมูลที่กรอก
Full_Text_Requests || "
Sub_sessions || "
Queries || "
Citation_Events || สถิติฐานข้อมลุที่กรอก
Month || ข้อมูลเดือน
Years || ข้อมุลปี
Last_update || บันทึกวันและเวลา อัตโนมัติ
file_name || สำหรับเก็บชื่อไฟล์เอกสารที่แนบไฟล์ไปค่ะ
เช่น มหาลัยที่ 1 และ 2 มีการใช้ ฐานข้อมุล ที่ 3,4,5 ของบริษัทที่ 2 ในเดือนมกราคม ปี 2016 ข้อมูลที่จะเพิ่มเข้าตาราง ก็จะประมาณนี้
stat_ID | Univer_ID | Rf_ID | Com_ID | Searches | Full_Text_Requests | Sub_sessions | Queries
01 1 3 2 150 50
02 2 3 2 300 60
03 1 4 2 55
04 2 4 2 890
05 1 5 2 900 700
06 2 5 2 400 120
ข้อมูลที่กรอกเข้าก็จะประมาณนี้ค่ะ แต่ปัญหาที่ติดคือ กรอกค่าเข้ามันเก็บแค่แถวสุดท้ายอย่างเดียวเลยค่ะ
ถ้าต้องเขียน if else จะต้องเขียนประมาณไหนค่ะ รบกวนช่วยหน่อยนะคะ มือใหม่จริงๆค่ะ
|
|
|
|
|
Date :
2017-03-08 10:12:25 |
By :
viewsmith |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
สังเกตุดีๆครับ
<input name="Univer_ID" type="hidden" value="<?=$objResult['Univer_ID']?>" />
ตัวนี้น่าจะเป็นอาเรย์รึเปล่า ?
|
|
|
|
|
Date :
2017-03-08 10:25:06 |
By :
Luz |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตอบความคิดเห็นที่ : 5 เขียนโดย : mr.win เมื่อวันที่ 2017-03-08 11:06:12
รายละเอียดของการตอบ ::
ตัวอย่างตามลิ้งค์นี้ เคยดูและลองมาปรับใช้แล้วค่ะ แต่ก็ยังไม่สามารถทำได้ ไม่เข้าใจ โค้ดอยู่ 3 ส่วนนี้ค่ะ
Code (PHP)
<?php
for($i=1;$i<=50;$i++)
{
if($_GET["Line"] == $i)
{
$sel = "selected";
}
else
{
$sel = "";
}
?>
<option value="<?php echo $_SERVER["PHP_SELF"];?>?Line=<?php echo $i;?>" <?php echo $sel;?>><?php echo $i;?></option>
<?php
}
?>
จากโค้ดด้านบนนี้เข้าใจว่า เป็นส่วน list ที่ให้เลือกจำนวนแถว ได้ไม่เกิน 50 แถว พอเลือกกี่แถวก็ให้แสดงตามจำนวนที่เลือกออกมา
แต่ในระบบที่ต้องการคือ ให้แสดง จำนวนแถวที่มีใน ตาราง university ออกมาทั้งหมด เพื่อเพิ่มค่าเข้าไปใส่ในตาราง stat ค่ะ เลยคิดว่าส่วนนี้ไม่น่าจะเกียวกัน
.....................................................................................................
<?php
$line = $_GET["Line"];
if($line == 0){$line=1;}
for($i=1;$i<=$line;$i++)
{
?>
ส่วนนี้ก็จะต่อเนื่องมาจากโค้ดด้านบน ว่ามีการรับค่ามาว่าเลือกไปกี่แถวก็ให้แสดงตามจำนวนใช่มั้ยคะ
......................................................................................................
แต่โค้ดด้านบนที่กล่าวมาทั้งหมด น่าจะมีส่วน ในไฟล์ บันทึกในส่วนนี้
Code (PHP)
for($i=1;$i<=$_POST["hdnLine"];$i++)
{
if($_POST["txtCustomerID$i"] != "")
{
$strSQL = "INSERT INTO customer ";
$strSQL .="(CustomerID,Name,Email,CountryCode,Budget,Used) ";
$strSQL .="VALUES ";
$strSQL .="('".$_POST["txtCustomerID$i"]."','".$_POST["txtName$i"]."', ";
$strSQL .="'".$_POST["txtEmail$i"]."' ";
$strSQL .=",'".$_POST["txtCountryCode$i"]."','".$_POST["txtBudget$i"]."', ";
$strSQL .="'".$_POST["txtUsed$i"]."') ";
$objQuery = mysql_query($strSQL);
}
}
.......................................................................................................
เมือดูจากโค้ดที่แอดมินแนะนำมา ยังไม่ค่อยตรงกับส่งที่ต้องการเท่าไหร่ค่ะ
ที่ต้องการคือ ไม่ต้อง list เลือกจำนวนแถวที่ต้องการเพิ่มค่ะ แต่ให้แสดงแถวตามตาราง university และ เพื่อเข้าไปใหม่ที่ตาราง stat ค่ะ
|
|
|
|
|
Date :
2017-03-08 11:22:57 |
By :
viewsmith |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
รบกวนช่วยแนะนำวิธีด้วยนะคะ พยายามมปรับใช้แล้วแต่ก็ยังไม่สามารถทำได้ค่ะ
|
|
|
|
|
Date :
2017-03-08 15:56:16 |
By :
viewsmith |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
น่าจะเป็นตรง
Code (PHP)
<input name="Univer_ID" type="hidden" value="<?=$objResult['Univer_ID']?>" />
ลองเปลี่ยน
<input name="Univer_ID[]" type="hidden" value="<?=$objResult['Univer_ID']?>" />
จากนั้นลอง foreach ค่าใน input Univer_ID ดูครับ
|
|
|
|
|
Date :
2017-03-09 05:18:41 |
By :
sensugaz |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตอบความคิดเห็นที่ : 8 เขียนโดย : sensugaz เมื่อวันที่ 2017-03-09 05:18:41
รายละเอียดของการตอบ ::
ลองทำตามวิธีคุณ sensugaz ทำได้แล้วค่ะ ได้ข้อมูลตามที่ต้องการเลย ขอบคุณนะคะ แต่ก็ยังติดปัญหา เวลาเพิ่มไฟล์อยู่ดีค่ะ มันไม่เก็บ ชื่อไฟล์ไปด้วย
ลองเพิ่มโค้ดนี้เข้าไปก็ไม่บันทึกชื่อค่ะ แต่โค้ดนี้ใช้เพิ่มไฟล์ได้นะคะ ลองเอาออกมาทำแยกดูแล้ว เก็บข้อมูลได้แค่แถวสุดท้ายอย่างเดียวและเพิ่มไฟล์ได้ปกติค่ะ พอนำมาใส่กับโค้ดที่เพิ่มหลายๆแถวได้นั้น echo ดู ค่าก็มาหมดนะคะ แต่พอดูในฐานข้อมูล ค่าไม่เข้าเลยค่ะ
Code (PHP)
$file_name = '".$_FILES["file_name"]["name"]."';
//เพิ่มไฟล์
$file_name='".$_FILES["file_name"]["name"]."';
$fileName_tis620=iconv("utf-8","tis620",$_FILES["file_name"]["name"]);
$fileName_utf8=iconv("tis620","utf8",$fileName_tis620);
if(move_uploaded_file($_FILES["file_name"]["tmp_name"],"file/".$fileName_tis620))
{
$sql ="INSERT INTO stat(stat_ID,Univer_ID,Rf_ID,
Com_ID,Searches,Full_Text_Requests,Sub_sessions,Queries,
Citation_Events,Month,Years,Last_update,file_name)
VALUES('$stat_ID','$Univer_ID','$Rf_ID','$Com_ID',
'$Searches','$Full_Text_Requests','$Sub_sessions',
'$Queries','$Citation_Events','$Month','$Years',
'$Last_update','".$_FILES["file_name"]["name"]."')";
$result = mysql_query($sql) or die ("Error in query: $sql " . mysql_error());
$Univer_ID = mysql_insert_id();
echo $sql;
}
|
|
|
|
|
Date :
2017-03-09 10:59:37 |
By :
viewsmith |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 03
|