|
|
|
php กับ ajax insert database แบบหลายๆค่า มันมาแต่ค่าสุดท้ายค่าเดียวค่ะ |
|
|
|
|
|
|
|
รบกวนดูให้หน่อยค่ะ มัน insert แต่ค่าสุดท้ายค่าเดียว ติดมาหลายวันแล้วไม่ได้เลยค่ะ
โค้ดจาวาที่ใช้ค่ะ เป็น ajax aucompleas
Code (Java)
<script type="text/javascript">
$(document).ready(function(){
$(document).on('keydown', '.pdname', function() {
var id = this.id;
var splitid = id.split('_');
var index = splitid[1];
$( '#'+id ).autocomplete({
source: function( request, response ) {
$.ajax({
url: "getproducts.php",
type: 'post',
dataType: "json",
data: {
search: request.term,request:1
},
success: function( data ) {
response( data );
}
});
},
select: function (event, ui) {
$(this).val(ui.item.label); // display the selected text
var userid = ui.item.value; // selected id to input
// AJAX
$.ajax({
url: 'getproducts.php',
type: 'post',
data: {userid:userid,request:2},
dataType: 'json',
success:function(response){
var len = response.length;
if(len > 0){
var id = response[0]['id'];
var pdid = response[0]['pdid'];
document.getElementById('pdid_'+index).value = pdid;
}
}
});
return false;
}
});
});
// Add more
$('#addmore').click(function(){
// Get last id
var lastname_id = $('.tr_input input[type=text]:nth-child(1)').last().attr('id');
var split_id = lastname_id.split('_');
// New index
var index = Number(split_id[1]) + 1;
// Create row with input elements
var html = "<tr class='tr_input'><td><input type='text' name='pdname' class='pdname form-control' id='pdname_"+index+"' placeholder='Enter Products'><input type='hidden' name='pdid' class='pdid' id='pdid_"+index+"' ></td><td><input type='text' name='quantity' class='quantity text ui-widget-content ui-corner-all' id='qtd_"+index+"' ></td><td><input type='text' name='price' class='price text ui-widget-content ui-corner-all' id='price_"+index+"' ></td><td><input type='text' name='subtotal' class='subtotal text ui-widget-content ui-corner-all' id='subtotal_"+index+"' ></td><td><button type='button' class='removebutton btn btn-outline btn-default' id='removebutton_"+index+"'title='Remove this row'>X</button></td></tr>";
// Append data
$('tbody').append(html);
$('#hdnCount').val(index);
});
});
</script>
อันนี้ html
Code
<form action="" method="post" class="form-horizontal" enctype="multipart/form-data" >
<table class="table">
<thead>
<tr>
<th width="50%">รายการสินค้า</th>
<th width="12%">จำนวน</th>
<th width="12%">ราคา</th>
<th width="12%">จำนวนเงิน(บาท)</th>
<th width="14%"> </th>
</tr>
</thead>
<tbody>
<tr class='tr_input'>
<td><input type='text' class='pdname form-control' name='pdname' id='pdname_1' placeholder='Enter Products'><input type='hidden' name='pdid' id='pdid_1' class='pdid' /></td>
<td><input type='text' name='qtd' id='qtd_1' class='quantity text ui-widget-content ui-corner-all'></td>
<td><input type='text' name='price' id='price_1' class='price text ui-widget-content ui-corner-all'></td>
<td><input type='text' name='subtotal' id='subtotal_1' class='subtotal text ui-widget-content ui-corner-all' ></td>
<td><input type='button' value='เพิ่มรายการสินค้า' id='addmore' class="btn btn-w-m btn-success"></td>
</tr>
</tbody>
</table>
</form>
php ค่ะ มันมาค่าสุดท้ายค่าเดียวค่ะ
Code (PHP)
for($i=0;$i<count($_POST["hdnCount"]);$i++)
{
$pdid = $_POST["pdid"][$i];
$pdname = $_POST["pdname"][$i];
$quantity = $_POST["quantity"][$i];
$price = $_POST["price"][$i];
if($_POST["pdid"][$i] != '' && $_POST["pdname"][$i] != '' && $_POST["quantity"][$i] != '' && $_POST["subtotal"][$i] != '')
{
$sql ="insert into buy_product(id_product , name_product, qty_product, price) values ('$pdid', '$pdname', '$quantity', '$price')";
$re = mysql_query($dbname,$sql) or die (mysql_error());
{
}
}
}
Tag : PHP, MySQL, JavaScript, Ajax, jQuery, Appserv
|
|
|
|
|
|
Date :
2019-01-30 21:20:01 |
By :
aobjung |
View :
2490 |
Reply :
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตรง name ของ input ลองใส่ [] ต่อท้ายดูครับ
eg. qtd => qtd[] ครับ
|
|
|
|
|
Date :
2019-01-30 22:30:36 |
By :
Jatmentz |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ลอง เทส print_r($_POST) ว่ามีค่าจริงไหม
ดูลำดับของชั้นว่ากำหนด id ให้แต่ละอันถูกตามที่เราต้องการไหม
ถ้ามองจาก code รับค่าวนลูป น่าจะต้องส่งค่าแบบ array ตามที่ คห.1 บอก...
แต่ถ้าจะ fix id ก็ต้องรับแบบ fix id
$pdid = $_POST['pdid_'.$i]
ถ้า fix ก็ต่อ string ให้ถูก
แล้วเวลา count มันจะเริ่มจาก 0 ถ้าเป็น fix id มันจะเป็น pdid_0 pdid_1 pdid_2
ถ้าเริ่มจาก 0 ก็ไม่มีปัญหา แต่ถ้าเริ่มจาก 1 ก็ต้อง +1 ก่อนเอาค่ามาวนลูป
ถ้าจะ array ก็ดูลำดับให้ถูก...
น่าจะทางใดทางนึง เอาที่เราถนัดครับ
|
ประวัติการแก้ไข 2019-01-31 08:40:18
|
|
|
|
Date :
2019-01-31 08:37:36 |
By :
apisitp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (PHP)
มันนับได้ 2 row แต่ ข้อมูลมาแต่บรรทัดแรกค่ะ แต่บรรทัดที่ใช้ ajax เพิ่มมันไม่มาค่ะ
if(isset($_POST['btnSubmit'])){
for($i=0;$i<count($_POST["hdnCount"]);$i++){
echo $_POST["hdnCount"]."<br>";
echo $_POST['pdid'][$i]."<br>";
echo $_POST['pdname'][$i]."<br>";
echo $_POST['quantity'][$i]."<br>";
echo $_POST['price'][$i]."<br>";
echo "<hr>";
}
}
Code
<form action="" method="post" class="form-horizontal" enctype="multipart/form-data" >
<div class="col-md-10">
<table class="table">
<thead>
<tr>
<th width="50%">รายการสินค้า</th>
<th width="12%">จำนวน</th>
<th width="12%">ราคา</th>
<th width="12%">จำนวนเงิน(บาท)</th>
<th width="14%"> </th>
</tr>
</thead>
<tbody>
<tr class='tr_input'>
<td><input type='text' class='pdname form-control' name='pdname[]' id='pdname_1' placeholder='Enter Products'><input type='hidden' name='pdid[]' id='pdid_1' class='pdid' /></td>
<td><input type='text' name='qtd[]' id='qtd_1' class='quantity text ui-widget-content ui-corner-all'></td>
<td><input type='text' name='price[]' id='price_1' class='price text ui-widget-content ui-corner-all'></td>
<td><input type='text' name='subtotal[]' id='subtotal_1' class='subtotal text ui-widget-content ui-corner-all' ></td>
<td><input type='button' value='เพิ่มรายการสินค้า' id='addmore' class="btn btn-w-m btn-success"></td>
</tr>
</tbody>
</table>
</div>
<input type="hidden" id="hdnCount" name="hdnCount">
<button class="btn btn-primary" type="submit" name="btnSubmit" id="btnSubmit">Submit</button>
</form>
Code (Java)
<script type="text/javascript">
$(document).ready(function(){
$(document).on('keydown', '.pdname', function() {
var id = this.id;
var splitid = id.split('_');
var index = splitid[1];
$( '#'+id ).autocomplete({
source: function( request, response ) {
$.ajax({
url: "getproducts.php",
type: 'post',
dataType: "json",
data: {
search: request.term,request:1
},
success: function( data ) {
response( data );
}
});
},
select: function (event, ui) {
$(this).val(ui.item.label); // display the selected text
var userid = ui.item.value; // selected id to input
// AJAX
$.ajax({
url: 'getproducts.php',
type: 'post',
data: {userid:userid,request:2},
dataType: 'json',
success:function(response){
var len = response.length;
if(len > 0){
var id = response[0]['id'];
var pdid = response[0]['pdid'];
document.getElementById('pdid_'+index).value = pdid;
}
}
});
return false;
}
});
});
// Add more
$('#addmore').click(function(){
// Get last id
var lastname_id = $('.tr_input input[type=text]:nth-child(1)').last().attr('id');
var split_id = lastname_id.split('_');
// New index
var index = Number(split_id[1]) + 1;
// Create row with input elements
var html = "<tr class='tr_input'><td><input type='text' name='pdname[]' class='pdname form-control' id='pdname_"+index+"' placeholder='Enter Products'><input type='hidden' name='pdid[]' class='pdid' id='pdid_"+index+"' ></td><td><input type='text' name='quantity[]' class='quantity text ui-widget-content ui-corner-all' id='quantity_"+index+"' ></td><td><input type='text' name='price[]' class='price text ui-widget-content ui-corner-all' id='price_"+index+"' ></td><td><input type='text' name='subtotal[]' class='subtotal text ui-widget-content ui-corner-all' id='subtotal_"+index+"' ></td><td><button type='button' class='removebutton btn btn-outline btn-default' id='removebutton_"+index+"'title='Remove this row'>X</button></td></tr>";
// Append data
$('tbody').append(html);
$('#hdnCount').val(index);
});
});
</script>
|
ประวัติการแก้ไข 2019-01-31 14:09:47
|
|
|
|
Date :
2019-01-31 14:07:13 |
By :
aobjung |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
สรุปคือ ต้องการให้ Insert หลายๆ Row และ ค่าที่ได้คือได้ค่าสุดท้าย ของค่าที่ส่งมาใช่ไหม
Multiple Insert
|
ประวัติการแก้ไข 2019-01-31 14:25:36
|
|
|
|
Date :
2019-01-31 14:23:55 |
By :
Hararock |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ข้อแรก
คุณรับค่าด้วย $_POST['quantity'][$i] แต่ บรรทัดแรกใช้ name = qtd // ไม่ตรงกัน
ข้อสอง
คุณใช้ count($_POST["hdnCount"]) ซึ่งค่าที่ count มาจะเท่ากับ 1 // คุณต้องการ value ไม่จำเป็นต้อง count
บางปัญหา ก็เส้นผมบังภูเขาครับ แต่ทุกปัญหาจะสอนให้คุณระวัง
สู้ๆครับผม
|
|
|
|
|
Date :
2019-01-31 14:35:56 |
By :
Jatmentz |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ได้แล้วค่ะ เขียนแบบนี้ ค่าออกมาหมดที่ใส่ไปค่ะ
Code (PHP)
if(isset($_POST['btnSubmit'])){
for ($i = 0; $i< (int)$_POST["hdnCount"]; $i++){
echo $_POST["hdnCount"]."<br>";
echo $_POST['pdid'][$i]."<br>";
echo $_POST['pdname'][$i]."<br>";
echo $_POST['quantity'][$i]."<br>";
echo $_POST['price'][$i]."<br>";
echo "<hr>";
}
}
|
|
|
|
|
Date :
2019-01-31 20:43:57 |
By :
aobjung |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 01
|