I am creating a ecommerce site for my final year project.while I am creating a project I ran in to the problem with product shall be able add the card but when I view the card product shown which I added into the card.my problem is if the give qty it will auto calculation and display result on the total textbox.and final totel show display below. I attached image below what i tried so far. But couldn’t calculate the total and final total.
Display the Products
<script>
getProducts();
function getProducts() {
$.ajax({
type: 'GET',
url: 'all_cart.php',
dataType: 'JSON',
success: function(data) {
data.forEach(function(element) {
var id = element.id;
var product_name = element.product_name;
var price = element.price;
$('#mytable tbody').after
(
'<tr> ' +
'<td>' + id + '</td>' +
'<td>' + product_name + '</td>' +
'<td>' + price + '</td>' +
"<input type='hidden' name='price' value='" + price + "'>" +
'<td>' + "<input type = 'text' id='qty' name='qty'/>" + '</td>' +
'<td>' + "<input type = 'text' id='amount'/>" + '</td>' +
'</tr>');
});
},
error: function(xhr, status, error) {
alert(xhr.responseText);
}
});
}
Auto calcaltion the price * qty
$(function() {
$("#price, #qty").on("keydown keyup click", qty);
function qty() {
var sum = (
Number($("#price").val()) * Number($("#qty").val())
);
$('#amount').val(sum);
console.log(sum);
}
});
You dont should append multiple elements with same ID in a page
Can you try
function getProducts() {
$.ajax({
...
$('#mytable tbody').after
(
'<tr> ' +
'<td>' + id + '</td>' +
'<td>' + product_name + '</td>' +
'<td>' + price + '</td>' +
"<input type='hidden' name='price' class='price' value='" + price + "'>" +
'<td>' + "<input type = 'text' class='qty' name='qty'/>" + '</td>' +
'<td>' + "<input type = 'text' class='amount'/>" + '</td>' +
'</tr>');
});
},
error: function(xhr, status, error) {
alert(xhr.responseText);
}
});
}
$(function() {
$(".price, .qty").on("keydown keyup click", function () {
var price = $(this).parents('tr').find('.price');
var qty= $(this).parents('tr').find('.qty');
var sum = (
Number($(price).val()) * Number($(qty).val())
);
$(this).parents('tr').find('.amount').val(sum);
calculateAmount();
});
function calculateAmount() {
var total = 0;
$('.amount').each(function(e){
total += Number($(this).val());
});
$('#total-amount').text(total);
}
});
This is a demo: https://codepen.io/phuongnm153/pen/bymYOQ
When you get $("#price").val() and $("#qty").val() in jQuery but you have many $("#price") & $("#qty") duplicate. You should be run this in console.
I hope it's helpful for you
Related
I am trying to generate dynamically form in table and submit but there is problem in my code which is difficult for me solve,
$(document).ready(function() {
$('#btnsummary').on('click', function() {
var date = $('#dddeliverydate').val();
var soid = $('#sssoid option:selected').val();
$.ajax({
url: "tblsum.php",
method: "POST",
dataType: 'JSON',
data:
"&date=" +
date +
"&soid=" +
soid,
success: function(response) {
if ( response.length == 0 ) {
alert("NO DATA FOUND!");
}
else{
$("#tblsum tbody").empty();
var len = response.length;
for(var i=0; i<len; i++){
var invoiceno = response[i].invoiceno;
var shopname = response[i].shopname;
var paymentmode = response[i].paymentmode;
var finalamount = response[i].finalamount;
if (finalamount==0){
return false
}
else if (paymentmode=="Credit"){
var tr_str = "<tr>" +
"<td align='center'>" + invoiceno + "<input type='hidden' name='invoiceno[]' value='"+invoiceno+"'></td>" +
"<td align='center'>" + shopname + "</td>" +
"<td align='center'>" + paymentmode + "</td>" +
"<td align='center'>" + finalamount + "</td>" +
"<td align='center'><input type='number' id='finalamount' name='finalamount[]' value='0'></td>" +
"</tr>";
$("#tblsum tbody").append(tr_str);
}
else{
var tr_str = "<tr>" +
"<td align='center'>" + invoiceno + "<input type='hidden' name='invoiceno[]' value='"+invoiceno+"'></td>" +
"<td align='center'>" + shopname + "</td>" +
"<td align='center'>" + paymentmode + "</td>" +
"<td align='center'>" + finalamount + "</td>" +
"<td align='center'><input type='number' id='finalamount' name='finalamount[]' value='" + finalamount + "'></td>" +
"</tr>";
$("#tblsum tbody").append(tr_str);
}
}
$("#tblsum tbody").append("<tr><td colspan='5'><button class='btn btn-success' type='button' id='btnsum'onclick='summary()'>Save</button></td></tr>");
}
}
})
});
})
There is two problem if final amount is 0 then save button did not appear, when I submit form first field which is invoiceno don't submit on next page,
below is submit function
function summary(){
$(document).ready(function(e) {
var date = $('#dddeliverydate').val();
var soid = $('#sssoid option:selected').val();
var form = $('#formsum').serialize();
$.ajax({
url: "test.php",
method: "POST",
data:
"&date=" +
date +
"&soid=" +
soid+
"&form=" +
form,
success: function(data) {
var w = window.open('about:blank', 'windowname');
w.document.write(data);
}
})
})
}
Below is my PHP code.
for($count = 0; $count<count($_POST['invoiceno']); $count++){
$data = array(
$invoiceno = $_POST['invoiceno'][$count],
$amount = $_POST['finalamount'][$count],
);
echo "Invoice NO ".$invoiceno." Amount ".$amount.'<br>';
}
sorry for bad english.
I told you before return STOPS executing a function, so all code after it is obsolete. In this case, when finalamount == 0 you stop executing the function and return to the place where it started. So the code to create the submit button never will be reached. With some proper indentation, you could see that:
$(document).ready(function() {
//<< ===== START START START of onclick function
$('#btnsummary').on('click', function() {
....
$.ajax({
url: "tblsum.php",
....
success: function(response) {
if ( response.length == 0 ) { .... }
else{
$("#tblsum tbody").empty();
....
for(var i=0; i<len; i++){
var invoiceno = response[i].invoiceno;
var finalamount = response[i].finalamount;
....
if (finalamount==0){
return false
// STOP EXECUTING THIS FUNCTION
// AND GO DIRECTLY TO END OF FUNCTION ================= >>
// code after this will NOT be executed
}
else if (paymentmode=="Credit"){....}
else{....}
}
// if finalamount == 0, this will never be executed
$("#tblsum tbody").append("<tr><td colspan='5'><button class='btn btn-success' type='button' id='btnsum'onclick='summary()'>Save</button></td></tr>");
}
}
})
});
// ===== END END END of onclick function << ===============
// continue executing script from here
})
So you could use continue instead of return to skip only one itteration in the for loop.
object(stdClass)#1 (1) {
["return"]=>
string(43362) "[{"Searchstring":"?showitemlist=1&Keyword=blue&acctwebguid=12bad325-a118-4778-825a-cc7d5308e24f&orderby=ItemName%20DESC&requestguid=29E60B17-8601-4839-AD00-00DB0D45A2CB","Recordcount":15446},{"Maxretail":7.42000000,"Displayname":"","Suplitemno":"COA09B/K","Supplieritemid":"D7784D83-F63D-4219-BDB1-F7AE76F74CC8","Minretail":5.99000000,"Minqty":25,"Rushavailable":0,"Imagepath":"images/products/EA8E5917-F1D9-4089-BC09-DDE2FF03452F/medium/D7784D83-F63D-4219-BDB1-F7AE76F74CC8.jpg?_=1423597800","Imagepathsm":"images/products/EA8E5917-F1D9-4089-BC09-DDE2FF03452F/small/D7784D83-F63D-4219-BDB1-F7AE76F74CC8.jpg?_=1423597799","Prodtime":10,"Imagepathlg":"images/products/EA8E5917-F1D9-4089-BC09-DDE2FF03452F/large/D7784D83-F63D-4219-BDB1-F7AE76F74CC8.jpg?_=1423597800","Companyname":"Graphik Business Accessories","Displayno":"","Imagepathmd":"images/products/EA8E5917-F1D9-4089-BC09-DDE2FF03452F/medium/D7784D83-F63D-4219-BDB1-F7AE76F74CC8.jpg?_=1423597800","Shownopricing":0,"Itemname":"Zume Coaster Set"},{"Maxretail":50.38000000,"Displayname":"","Suplitemno":"7003-47","Supplieritemid":"F7374437-2DF5-4D4B-B654-32F7C7B8971E","Minretail":39.98000000,"Minqty":10,"Rushavailable":0,"Imagepath":"images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/medium/F7374437-2DF5-4D4B-B654-32F7C7B8971E.jpg?_=1438623367","addlImagesLarge":["images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/large/7003_47-7003_47bk_b_1.jpg?_=1438623368","images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/large/7003_47-7003_47bk_b_3.jpg?_=1438623368","images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/large/7003_47-7003_47bk_d.jpg?_=1438623369","images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/large/7003_47-7003_47bk_d_2.jpg?_=1438623369","images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/large/7003_47-7003_47bk_d_3.jpg?_=1438623370"],"Imagepathsm":"images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/small/F7374437-2DF5-4D4B-B654-32F7C7B8971E.jpg?_=1438623367","Prodtime":5,"Imagepathlg":"images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/large/F7374437-2DF5-4D4B-B654-32F7C7B8971E.jpg?_=1438623367","addlImagesSmall":["images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/small/7003_47-7003_47bk_b_1.jpg?_=1438623368","images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/small/7003_47-7003_47bk_b_3.jpg?_=1438623369","images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/small/7003_47-7003_47bk_d.jpg?_=1438623369","images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/small/7003_47-7003_47bk_d_2.jpg?_=1438623370","images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/small/7003_47-7003_47bk_d_3.jpg?_=1438623371"],"Companyname":"Leed's / Leeds","Displayno":"","Imagepathmd":"images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/medium/F7374437-2DF5-4D4B-B654-32F7C7B8971E.jpg?_=1438623367","addlImagesMed":["images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/medium/7003_47-7003_47bk_b_1.jpg?_=1438623368","images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/medium/7003_47-7003_47bk_b_3.jpg?_=1438623368","images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/medium/7003_47-7003_47bk_d.jpg?_=1438623369","images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/medium/7003_47-7003_47bk_d_2.jpg?_=1438623369","images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/medium/7003_47-7003_47bk_d_3.jpg?_=1438623370"],"Shownopricing":0,"Itemname":"Zoom® Audio Decibel Bluetooth Speaker"},.......
<script>
$(document).ready(function() {
var data = '[{"Maxretail":...,"Itemname":"Youth Chameleon T-Shirt"]';
var table = '<table><thead><th>First Name</th><th>Last Name</th><th>Image</th><th>More</th></thead><tbody>';
var obj = $.parseJSON(data);
$.each(obj, function() {
table += '<tr><td>' + this['Itemname'] + '</td><td>' + this['Supplieritemid'] + '</td><td><img src="https://cdn.distributorcentral.com/' + this['Imagepath'] + ' alt="' + this['Itemname'] + '" /></td><td><img src="https://cdn.distributorcentral.com/' + this['addlImagesSmall'] + ' alt="' + this['Itemname'] + '" />' + this['addlImagesSmall'] + '</td></tr>';
});
table += '</tbody></table>';
document.getElementById("datalist").innerHTML = table;
});
I have a function that displays a countup timer but I've only been able to make it work for a single row. I'd like to make a timer appear on each row where the end time of the action has not yet been set.
This is the full code.
<script>
$('document').ready(function()
{
var uni_id = //value of id needed to query the database table;
$.ajax({
type : 'POST',
url : 'get_time.php',
dataType: 'json',
data : {uni_id: uni_id},
cache: false,
success : function(result)
{
for (var i = 0; i < result.length; i++){
var startDateTime = new Date(result[i].uni_start_time); //Not sure if it's wrong to add all returning values here but so far it works but only for a single row on the table.
var startStamp = startDateTime.getTime();
var newDate = new Date();
var newStamp = newDate.getTime();
var timer;
var rec_id = result[i].rec_id;
function updateTimer() {
newDate = new Date();
newStamp = newDate.getTime();
var diff = Math.round((newStamp-startStamp)/1000);
var days = Math.floor(diff/(24*60*60));
diff = diff-(days*24*60*60);
var hours = Math.floor(diff/(60*60));
diff = diff-(hours*60*60);
var minutes = Math.floor(diff/(60));
diff = diff-(minutes*60);
var seconds = diff;
days = (String(days).length >= 2) ? days : '0' + days;
hours = (String(hours).length >= 2) ? hours : '0' + hours;
minutes = (String(minutes).length >= 2) ? minutes : '0' + minutes;
seconds = (String(seconds).length >= 2) ? seconds : '0' + seconds;
$("#on_going_"+rec_id).html(hours+':'+minutes+':'+seconds);
}
setInterval(updateTimer, 1000);
$('#uni_time_table tbody').append(
'<tr>'
+'<td class="center hidden" id="'+result[i].rec_id+'">' + result[i].rec_id + '</td>'
+'<td class="center">' + result[i].uni_id + '</td>'
+'<td>' + result[i].uni_name + '</td>'
+'<td>' + result[i].uni_loc + '</td>'
+'<td class="center">' + result[i].uni_date + '</span></td>'
+'<td class="center">' + result[i].uni_start_time + '</td>'
+(result[i].uni_end_time == null ?
'<td class="center"></td>' //this will always be empty if the uni_end_time is not set.
:
'<td class="center">' + result[i].uni_end_time + '</td>'
)
+(result[i].uni_end_time == null ?
'<td class="center" id="on_going_'+result[i].rec_id+'"></td>' //the timer will only be triggered here if the uni_end_time is not set.
:
'<td class="center">' + result[i].uni_total_time + '</td>' //this will display the total time as long as the uni_end_time is set.
)
+'</tr>');
}
}
});
});
</script>
So far, only the first entry in the table displays the timer. Every time I add another entry, that second entry just remains blank while the timer still works with the first entry.
How can I make the timer work for each row on the table?
EDIT: Sample Data from json
rec_id "1"
uni_date "2016-10-28"
uni_loc "Custom Location"
uni_id "2356"
uni_name "Custom Name"
uni_start_time "10/28/2016 09:04:28"
uni_end_time null
uni_total_time null // this shows null because end_time is empty which is when the timer should kick in.
Here is a solution for you with little modifications of your code:
var startStamp = [];
function updateTimer(result) {
var newDate = new Date();
var newStamp = newDate.getTime();
for (var j = 0; j < result.length; j++) {
newDate = new Date();
newStamp = newDate.getTime();
var diff = Math.round((newStamp-startStamp[j])/1000);
var days = Math.floor(diff/(24*60*60));
diff = diff-(days*24*60*60);
var hours = Math.floor(diff/(60*60));
diff = diff-(hours*60*60);
var minutes = Math.floor(diff/(60));
diff = diff-(minutes*60);
var seconds = diff;
days = (String(days).length >= 2) ? days : '0' + days;
hours = (String(hours).length >= 2) ? hours : '0' + hours;
minutes = (String(minutes).length >= 2) ? minutes : '0' + minutes;
seconds = (String(seconds).length >= 2) ? seconds : '0' + seconds;
$("#on_going_"+result[j].rec_id).html(hours+':'+minutes+':'+seconds);
}
}
$('document').ready(function()
{
var uni_id = 1;//
$.ajax({
type : 'POST',
url : 'get_time.php',
dataType: 'json',
data : {uni_id: uni_id},
cache: false,
success : function(result) {
for (var i = 0; i < result.length; i++) {
var startDateTime = new Date(result[i].uni_start_time);
startStamp[i] = startDateTime.getTime();
$('#uni_time_table tbody').append(
'<tr>'
+ '<td class="center hidden" id="' + result[i].rec_id + '">' + result[i].rec_id + '</td>'
+ '<td class="center">' + result[i].uni_id + '</td>'
+ '<td>' + result[i].uni_name + '</td>'
+ '<td>' + result[i].uni_loc + '</td>'
+ '<td class="center">' + result[i].uni_date + '</span></td>'
+ '<td class="center">' + result[i].uni_start_time + '</td>'
+ (result[i].uni_end_time == null ?
'<td class="center"></td>' //this will always be empty if the uni_end_time is not set.
:
'<td class="center">' + result[i].uni_end_time + '</td>'
)
+ (result[i].uni_end_time == null ?
'<td class="center" id="on_going_' + result[i].rec_id + '"></td>' //the timer will only be triggered here if the uni_end_time is not set.
:
'<td class="center">' + result[i].uni_total_time + '</td>' //this will display the total time as long as the uni_end_time is set.
)
+ '</tr>');
}
setInterval((function () {
updateTimer(result);
}), 1000);
}
});
});
I'd like to insert the Json data into my file.php. And so each group of them are insert into group of divs. (with the same style etc.)
I have a feeling the way I am using is not smart... better solutions are very welcome. Thanks guys.
$.ajax({
url: feedURL,
jsonpCallback: 'jsonpCallback',
contentType:"application/json",
dataType: 'jsonp',
success: function(json) {
for (var i=0; i < 15; i++) {
var date = new Date(json.posts.data[i].created_time);
var months = ["/01/", "/02/", "/03/", "/04/", "/05/", "/06/", "/07/",
"/08/", "/09/", "/10/", "/11/", "/12/"];
$("#description").html(json.posts.data[i].message);
$("#caption").html(json.posts.data[i].caption);
$("#expire_date").html(date.getDate() + months[date.getMonth()] + date.getFullYear());
$("#fb_link").html(
'<a href="' + json.posts.data[i].link + '">'
+ 'Total Like: ' + json.posts.data[i].likes.summary.total_count
+ ' Total Share: ' + json.posts.data[i].shares.count
+ ' View on Facebook' + '</a>'
);
$("#profile_img").html('<img src="' + json.picture.data.url + '">');
$("#profile_name").html(json.name);
$("#full_fb_photo").html('<img src="' + json.posts.data[i].full_picture + '">');
}
},
error: function(e) {
console.log(e.message);
}
});
You can write your code in flowing way. Uncountable date print in your loop. If I know your data format, I will give you exact way.
Try this code.
for (var prop in json.posts.data) {
$("#description").html(json.posts.data[prop].message);
// other same as
}
Thanks guys, i have figured out in this way.
$.ajax({
url: feedURL,
jsonpCallback: 'jsonpCallback',
contentType:"application/json",
dataType: 'jsonp',
success: function(json) {
var social_list = "";
for (i=0; i < 15; i++) {
var date = new Date(json.posts.data[i].created_time);
var months = ["/01/", "/02/", "/03/", "/04/", "/05/", "/06/", "/07/",
"/08/", "/09/", "/10/", "/11/", "/12/"];
social_list += "<div class='social_item'><div class='item'><div class='heading'>";
social_list += "<img src='" + json.picture.data.url + "'/><span>" + json.name + "</span><i class='fa fa-facebook'></i></div>";
social_list += "<div class='content'><p>Created on" + date.getDate() + months[date.getMonth()] + date.getFullYear() + "</p>";
social_list += "<div><img src='" + json.posts.data[i].full_picture + "' /></div>";
social_list += "<p name=" + i + ">" + json.posts.data[i].message + "</p>";
social_list += "<div><a href='" + json.posts.data[i].link + "'> Total Likes: " + json.posts.data[i].likes.summary.total_count + "Total Share: " + json.posts.data[i].shares.count + " View on Facebook </a></div>";
social_list += "</div></div></div>"
}
$('#social_list').html(social_list);
In this case, I made a row with jquery additional mechanism to obtain the parameters that I will use in data search.
$(document).ready(function() {
DataProvide();
ManipulationHere();
$('table').delegate('input[type=text].onlyDate', 'focusin', function(event) {
$(this).datepicker({
dateFormat: "yy-mm-dd",
changeMonth: true,
changeYear: true,
yearRange: '1972:2020',
});
});
$('table').delegate('input[type=text].onlyMonth', 'focusin', function(event) {
$(this).monthpicker();
});
}); //Tutup Document Ready
function ManipulationHere(){
var count = 1;
$(".button").click(function(){
count += 1;
var $row = $('<tr>'
+ '<td>' + '</td>'
+ '<td>' + '<input id="data2_' + count + '" type="text" name="data2_' + count + '" class="data2" />' + '</td>'
+ '<td>' + '<input id="rows_' + count + '" name="rows[]" value="'+ count +'" type="hidden">'
+ 'Remove' + '</td>'
+ '</tr>').appendTo("#customFields");
var copyData = $("#data1_1").clone();
var repID = copyData.attr('id', 'data1_' + count + '');
var repName = copyData.attr('name', 'data1_' + count + '');
$row.find('td:first').append(repID)
var check = $row.find('td:first').html();
var get = $(check).attr('id')
});
$("#customFields").on('click','.remCF',function(){
$(this).parent().parent().remove();
count -= 1;
});
$("#customFields").on('change', '.tabelBaru', function() {
var validator = $("#signupForm").validate();
validator.resetForm();
var $this = $(this),
nilai = $this.val();
console.log(nilai);
if(nilai=='gender'){
$this.closest("tr").find(".data2").replaceWith(
'<select name="data2_' + count + '" class="data2">'
+ '<option value="man" selected >Man</option>'
+ '<option value="woman">Woman</option>'
+ '</select>'
)
}
else if(nilai=='religion'){
$this.closest("tr").find(".data2").replaceWith(
'<select name="data2[]" class="data2">'
+ '<option value="protestan" selected >Protestan</option>'
+ '<option value="khatolik">Khatolik</option>'
+ '<option value="islam">Islam</option>'
+ '<option value="budha">Budha</option>'
+ '<option value="hindu">Hindu</option>'
+ '</select>'
)
}
else if(nilai=='blood'){
$this.closest("tr").find(".data2").replaceWith(
'<select name="data2_' + count + '" class="data2">'
+ '<option value="gol_a" selected >A</option>'
+ '<option value="gol_b">B</option>'
+ '<option value="gol_ab">AB</option>'
+ '<option value="gol_o">O</option>'
+ '</select>'
)
}
else if(nilai=='birth_date'){
$this.closest("tr").find(".data2").replaceWith(
'<input type="text" id="data2_' + count + '" name="data2_' + count + '" value="" placeholder="Date Format" class="onlyDate"/>'
)
}
else if(nilai=='start_date'){
$this.closest("tr").find(".data2").replaceWith(
'<input type="text" id="data2_' + count + '" name="data2_' + count + '" value="" placeholder="Date Format" class="onlyDate"/>'
)
}
else if(nilai=='end_date'){
$this.closest("tr").find(".data2").replaceWith(
'<input type="text" id="data2_' + count + '" name="data2_' + count + '" value="" placeholder="Date Format" class="onlyDate"/>'
)
}
else if(nilai=='join_date'){
$this.closest("tr").find(".data2").replaceWith(
'<input type="text" id="data2_' + count + '" name="data2_' + count + '" value="" placeholder="Date Format" class="onlyDate"/>'
)
}
else if(nilai=='los_month'){
$this.closest("tr").find(".data2").replaceWith(
'<input type="text" id="data2_' + count + '" name="data2_' + count + '" value="" placeholder="Month Format" class="onlyMonth"/>'
)
}
else{
$this.closest("tr").find(".onlyDate").replaceWith(
'<input type="text" id="data2_' + count + '" name="data2_' + count + '" value="" class="data2"/>'
)
}
});
}
function DataProvide(){
selectValues = {
"pilih" : "-Pilih-",
"id" : "ID",
"emp_name" : "Employee Name",
"photo_path" : "Photo Path",
"emp_id" : "Employee ID",
"birth_place" : "Birth Place",
"birth_date" : "Birth Date",
"age" : "Age",
"gender" : "Gender",
"religion" : "Religion",
};
$.each(selectValues, function(key, value) {
$('#data1_1')
.append($("<option></option>")
.attr("value",key)
.text(value));
});
}
The results of the above process, I have a line that will be used as a parameter.
For example, when a row is added :
I want to create query generated after the SAVE process is :
SELECT * from my_table_name WHERE id='123'
If I add one more line parameters with example :
I want to create query generated after the SAVE process is :
SELECT * from my_table_name WHERE id='123' and employee_name='Testing'
And if I want to add another parameter search by adding a third line :
I want to query is generated after clicking the button in the process is :
SELECT * from my_table_name WHERE id='123' and employee_name='Testing' and employee_id='111'
I have made a function to try to read the data from the form POST results like this :
$Query = "SELECT * from my_table_name WHERE ....... << from looping"
foreach ($_POST['rows'] as $key => $count ){
$Data1 = $_POST['data1_'.$count];
$Data2 = $_POST['data2_'.$count];
echo $Data1." >> ".$Data2;
echo "<br>";
}
How do I get the data key and value from the POST results for later input into my query?
You are almost there, you just need to change your loop a little bit.
$query = "SELECT * from my_table_name WHERE ";
$first = true;
foreach ($_POST['rows'] as $key => $count ) {
$field = $_POST['data1_' . $count];
$value = $_POST['data2_' . $count];
if ($first) {
$query .= $field . " = '" . $value . "'";
$first = false;
} else {
$query .= " AND " . $field . " = '" . $value . "'";
}
}
Keep in mind, this will only work if you submit at least one item to be queried against.
This also assumes that what you get back from $field is the name of the field in the database.
As an additional exercise, I strongly suggest that you look to see if you database implementation can use prepared statements. They are significantly more secure.