Comparison of two String is not working in script - javascript

Actually in my function I have to compare two strings, the one string I fetch through the db and compare to the null string but it's not working..
Here is my Code:
order.items.forEach(function(entry) {
result += '<tr>'
+ '<td>'+'<font size=2>'+ a++ + '</font>'+ '</td>'
+ '<td>' +'<font size=2>'+ entry.title + '</font>'+ '</td>'
+ '<td>' +'<font size=2>'+ entry.quantity + '</font>'+'</td>'
if(entry.personalization == 'null') //here is the problem
+ '<td>' +'<font size=2>'+ 'No Personalization' + '</font>'+'</td>'
else
+ '<td>' +'<font size=2>'+ entry.personalization + '</font>'+'</td>'
+ '</tr>';
})
result +='</table>';
$('.modal-body').html(result);

Use console.log(entry.personalization) to check value.
Dhara's answer should work...
I also use it for null check.
(!entry.personalization)
or try
(entry.personalization != "")

To check empty or null string in jquery:
if (!entry.personalization) {
// is empty
}

As mentioned in your question, if one string i fetched by you and the other string is "null", It is a clear question of string comparison and not checking null...
Javascript has localeCompare() method to compare strings..
You should use
entry.personalization.localeCompare("null");
or its inverse
var n = "null";
n.localeCompare(entry.personalization);
this function returns boolean.

You don't need to wrap null around ''.
Simply use :-
if(entry.personalization == null)

Related

JavaScript failing when parsing XML that has blanks in nodeValues?

I have an application that uses Javascript to parses a XML array that is returned from a Webservice and iterates through it and builds it into a table body. It has been working with no issues until lately.
We had some changes on the database that the Webservice is returning results from in which now there are a few columns that could potentially have blanks or null values.
The Javascript fails to run when it hits a childNode that has a blank or null value.
Below is a snapshot of the browser error:
So my question is how do I handle those blanks so that the Javascript will just build an empty string into the table body and continue iterating through the xml array?
I have tried to build an if statement into the Javascript in the for loop to replace the blank or null value with '', but I'm not sure it's going to be doable with the way my table body is being built.
for (i = 0; i < x.length; i++) {
tbody += "<tr><td class=col1>" +
x[i].getElementsByTagName("CheckInDate")[0].childNodes[0].nodeValue +
"</td><td class=col2>" +
x[i].getElementsByTagName("CheckOutDate")[0].childNodes[0].nodeValue +
"</td><td class=col3>" +
x[i].getElementsByTagName("CheckInOut")[0].childNodes[0].nodeValue +
"</td><td>" +
x[i].getElementsByTagName("address")[0].childNodes[0].nodeValue +
"</td><td>" +
x[i].getElementsByTagName("names")[0].childNodes[0].nodeValue +
"</td><td>" +
x[i].getElementsByTagName("companyName")[0].childNodes[0].nodeValue +
"</td><td>" +
x[i].getElementsByTagName("Name")[0].childNodes[0].nodeValue.substr +
"</td><td>" +
x[i].getElementsByTagName("contactPhoneNum")[0].childNodes[0].nodeValue +
"</td ></tr >";
}
Being as how this is an existing application I don't want to rebuild all the functions that build tables using this method so I hope there is an easy solution to this that I'm not seeing.
The problem is that .childNodes will be null if the XML element doesn't have any content (any text nodes). You seem to have a lot of repeating code, to fix this you can create a function to get the content of an XML node with a specific tag name if it has any content or return an empty string.
Here is an example:
function getElementContent(element, tagName) {
const e = element.getElementsByTagName(tagName);
if (e && e.childNodes && e.childNodes.length) {
return e[0].childNodes[0].nodeValue
}
return '';
}
const tbody = x.map(e => `<tr><td class=col1>${getElementContent(e, 'CheckInDate')}</td><td class=col2>${getElementContent(e, 'CheckInDate')}..... `).join('');

javascript: Does Array.sort() fail on large arrays?

Does Array.sort() fail on large arrays? Or did I miss something? I also checked that I'm not sorting strings by mistake. I can't seem to understand why this fails
Pasting directly from Chrome Debugger's Watch:
And here's something you can play with:
arr = [1.238648000000012,1.5776880000000233,1.6462280000000078,10.007896000000017,10.014455999999996,10.016970000000015,10.018888000000004,10.028069000000016,10.047926000000018,10.056818000000021,10.057980999999984,10.075353000000007,10.086242000000027,10.088684999999998,10.097217,10.102441999999996,10.104630999999983,10.107723000000021,10.108536000000015,10.115552999999977,10.137179000000003,10.171389999999974,10.203172999999992,10.208004000000017,10.217614000000026,10.231874000000005,10.241456000000028,10.243750999999975,10.252985000000024,10.255207999999982,10.27183500000001,10.30159500000002,10.342756000000008,10.35523599999999,10.364777000000004,10.391841,10.40662900000001,10.422856000000024,10.428019000000006,10.438702999999975,10.493548999999973,10.495686999999975,10.522063000000003,10.541649000000007,10.577163999999982,10.605306999999982,10.614864000000011,10.63799899999998,10.677408000000014,10.677971000000014,10.678615999999977,10.683666000000017,10.697460999999976,10.702691000000016,10.738349000000028,10.748320999999976,10.783839,10.834334000000013,10.843086000000028,10.862792000000013,10.893118000000015,10.905455000000018,10.906916000000024,10.923288000000014,10.958798999999999,10.999311999999975,11.003940999999998,11.01112999999998,11.011986999999976,11.022662000000025,11.030069000000026,11.033493000000021,11.06088699999998,11.089207999999985,11.120248000000004,11.169981000000007,11.22742599999998,11.373028999999974,11.38974300000001,11.406037000000026,11.422123,11.445996999999977,11.445996999999977,11.452351000000021,11.45395400000001,11.455066999999985,11.530115000000023,11.563641000000018,11.649070999999992,11.681149000000005,11.699284999999975,11.715215,11.786181,11.798755000000028,11.912154999999984,11.914702999999975,11.92000999999999,11.925179000000014,11.989391000000012,12.065800000000024,12.077261000000021,12.144492000000014,12.213693999999975,12.22724199999999,12.244993000000022,12.293795999999986,12.337166000000025,12.366329000000007,12.42165799999998,12.511757999999986,12.57682699999998,12.583461,12.612408000000016,12.616739999999993,12.662854999999979,12.663344999999993,12.663866999999982,12.673579000000018,12.727368000000013,12.738046999999995,12.748396000000014,12.768007000000011,12.853508999999974,12.860353999999973,12.884284999999977,12.900110999999981,12.92121800000001,12.976439000000028,12.98437100000001,13.01056299999999,13.012036000000023,13.055876000000012,13.138213000000007,13.13959699999998,13.147134999999992,13.156939000000023,13.171355000000005,13.223600999999974,13.240787000000012,13.26833499999998,13.271131999999994,13.272153000000003,13.291954999999973,13.307935999999984,13.41423500000002,13.417280000000005,13.43734999999998,13.448892,13.489640000000009,13.490972,13.491602999999998,13.502335000000016,13.532481000000018,13.55182000000002,13.555890999999974,13.578921999999977,13.580539999999985,13.652214000000015,13.662713999999994,13.674057000000005,13.722780999999998,13.781020000000012,13.790301,13.801070999999979,13.801070999999979,13.826026000000013,13.843449000000021,13.974924999999985,14.012158,14.02240599999999,14.041520999999989,14.088280999999995,14.189909,14.226448000000005,14.288890999999978,14.298192000000029,14.36671100000001,14.379841999999996,14.459216000000026,14.471633999999995,14.51484099999999,14.527475999999979,14.538589000000002,14.608111000000008,14.72200700000002,14.750081000000023,14.818646999999999,14.847937000000002,14.85942,14.874291000000028,14.987093000000016,15.072758000000022,15.126066999999978,15.220902000000024,15.24462699999998,15.323228000000029,15.434033999999997,15.44965000000002,15.45765799999998,15.519754999999975,15.53459700000002,15.599244999999996,15.611743999999987,15.636731999999995,15.672317000000021,15.752161999999998,15.753962999999999,15.835087999999985,16.102216,16.126821000000007,16.12912,16.158558000000028,16.169849999999997,16.178314,16.188782000000003,16.251914,16.32066900000001,16.33669900000001,16.339541999999994,16.38289900000001,16.408960999999977,16.430653000000007,16.437236999999982,16.44171399999999,16.506533999999988,16.60108200000002,16.630889000000025,16.63222300000001,16.64343200000002,16.661643000000026,16.66319199999998,16.71718199999998,16.729517999999985,16.786464000000024,16.796617000000026,16.80394100000001,16.80713800000001,16.811587999999972,16.82970899999998,16.83151700000002,16.854597000000012,16.913752999999986,16.96798100000001,17.025273000000027,17.02839799999998,17.03959900000001,17.19691899999998,17.388582999999983,17.426383999999985,17.633208000000025,17.72530999999998,17.7765,17.925899000000015,17.985956999999985,18.03461299999998,18.035158000000024,18.33455600000002,18.554474000000027,18.819136000000015,19.294691,19.326833000000022,19.370652000000007,19.391025000000013,19.50171900000001,19.568479000000025,19.721015000000023,19.742188999999996,2.0741820000000075,2.190782000000013,2.414432999999974,2.763974000000019,2.792461000000003,2.9027659999999855,2.9076390000000174,2.9481509999999957,2.958406000000025,20.116471999999987,20.465129999999988,21.20068900000001,21.50477699999999,21.81089800000001,22.290697000000023,22.53896800000001,22.783582000000024,23.24664999999999,23.392704999999978,23.70305000000002,24.176241000000005,24.234451999999976,24.29212100000001,25.152215000000012,25.736550000000022,25.955720999999983,26.245765000000006,26.43552199999999,26.738576000000023,26.738576000000023,263.05566699999997,27.455123000000015,27.954201000000012,28.238260000000025,28.66128900000001,3.0292380000000207,3.031385,3.031385,3.104728000000023,3.105985999999973,3.122132000000022,3.1631780000000163,3.1631780000000163,3.1825150000000235,3.1861999999999853,3.1906769999999938,3.2074680000000058,3.2309399999999755,3.2394219999999905,3.248293999999987,3.2692579999999793,3.288909999999987,3.3179549999999836,3.3348550000000046,3.3937690000000202,3.400891999999999,3.427570000000003,3.46416099999999,3.501057000000003,3.5119619999999827,3.5348280000000045,3.535535999999979,3.541954999999973,3.591132000000016,3.595874999999978,3.629410000000007,3.6372420000000147,3.651020000000017,3.674457000000018,3.6869740000000206,3.788045000000011,3.8290949999999953,3.8317579999999793,3.869131999999979,3.8867349999999874,3.8997770000000287,3.9023500000000126,3.970973000000015,4.004128999999978,4.010781000000009,4.013157999999976,4.02364399999999,4.031284000000028,4.034339999999986,4.069560000000024,4.071885000000009,4.07367099999999,4.1598299999999995,4.1598299999999995,4.168802000000028,4.186954000000014,4.259670000000028,4.301670999999999,4.30785800000001,4.326250000000016,4.32803899999999,4.336463999999978,4.396554999999978,4.39680199999998,4.466684999999984,4.5498230000000035,4.551680999999974,4.572103000000027,4.584344999999985,4.592156999999986,4.637402000000009,4.637402000000009,4.645713999999998,4.661412999999982,4.677417999999989,4.681489999999997,4.6883359999999925,4.693658000000028,4.698712999999998,4.703738999999985,4.722540999999978,4.746127999999999,4.786383999999998,4.895690000000002,4.927435000000003,4.949255999999991,4.955774000000019,4.9658640000000105,4.978013999999973,4.9782599999999775,4.982582999999977,5.010145000000023,5.010145000000023,5.027368000000024,5.050145999999984,5.085066999999981,5.089823000000024,5.127470000000017,5.127541000000008,5.157640000000015,5.197153000000014,5.208763999999974,5.216631000000007,5.220619999999997,5.220917999999983,5.241790999999978,5.243516,5.298768999999993,5.302400999999975,5.351732000000027,5.358871000000022,5.395045999999979,5.42818699999998,5.428384999999992,5.440371000000027,5.451302999999996,5.451569000000006,5.453372000000002,5.571251000000018,5.583474000000024,5.603423000000021,5.625193000000024,5.62644499999999,5.6379459999999995,5.639406000000008,5.644623000000024,5.647972999999979,5.654788999999994,5.657871,5.677160000000015,5.684604999999976,5.704746999999998,5.721533000000022,5.754840999999999,5.787960999999996,5.799408000000028,5.836040000000025,5.910754999999995,5.935788000000002,5.98094500000002,5.99198100000001,6.071149999999989,6.167112999999972,6.2217110000000275,6.242680000000007,6.247160000000008,6.299575000000004,6.318251999999973,6.3246240000000284,6.346104000000025,6.390022999999985,6.390474999999981,6.393546000000015,6.406645000000026,6.428521999999987,6.428521999999987,6.4325509999999895,6.474005999999974,6.486009000000024,6.53541899999999,6.588966000000028,6.611136999999985,6.65598,6.661902999999995,6.685046,6.870761000000016,6.897823000000017,6.946781999999985,6.962023999999985,7.0745319999999765,7.079858999999999,7.203704000000016,7.231561999999997,7.396878000000015,7.526357000000019,7.5280500000000075,7.533020000000022,7.540190999999993,7.541165999999976,7.546674999999993,7.567698000000007,7.608597999999972,7.6137899999999945,7.6496609999999805,7.695861999999977,7.754680000000008,7.761375999999984,7.802596999999992,7.803015000000016,7.852875999999981,7.85482300000001,7.881430000000023,7.897682999999972,7.9383980000000065,7.953649999999982,7.977274000000023,7.9786040000000185,8.042038999999988,8.051116999999977,8.058231999999975,8.06355000000002,8.063913000000014,8.065433999999982,8.096699000000001,8.106979000000024,8.11287900000002,8.114483000000007,8.116393000000016,8.123027999999977,8.127981999999975,8.133666000000005,8.133793000000026,8.139561000000015,8.158335000000022,8.16064,8.161336000000006,8.162181999999973,8.162982999999997,8.171137999999985,8.171824000000015,8.176378,8.180379000000016,8.188331000000005,8.19033300000001,8.199669000000029,8.202963000000011,8.205122000000017,8.209947999999997,8.212396000000012,8.214103000000023,8.225754999999992,8.228440999999975,8.236157999999989,8.236670000000004,8.237368000000004,8.246976000000018,8.248426999999992,8.253366000000028,8.257947000000001,8.26767799999999,8.268155999999976,8.272303000000022,8.27318200000002,8.273479000000009,8.275866000000008,8.282681000000025,8.28576099999998,8.287439000000006,8.295105999999976,8.300284999999974,8.301493999999991,8.309056999999996,8.312666999999976,8.313319999999976,8.316741999999977,8.316802999999993,8.319496000000015,8.319905000000006,8.32196399999998,8.33465000000001,8.33758899999998,8.339861999999982,8.343349999999987,8.345591000000013,8.34741600000001,8.351251999999988,8.353306999999973,8.355660999999998,8.35797500000001,8.359123000000011,8.359248999999977,8.361414000000025,8.362278000000003,8.365722000000005,8.367165999999997,8.369223999999974,8.37142399999999,8.372978999999987,8.377184,8.378419000000008,8.380657999999983,8.384374999999977,8.384838000000002,8.38826499999999,8.389519000000007,8.389977999999985,8.391399999999976,8.399541,8.401728999999989,8.40463699999998,8.412535999999989,8.418292000000008,8.418292000000008,8.419540999999981,8.432033999999987,8.436644000000001,8.438633999999979,8.443922999999984,8.445126000000016,8.44520399999999,8.448188000000016,8.454391999999984,8.459992,8.460725000000025,8.471234999999979,8.471527999999978,8.47944799999999,8.481763999999998,8.486855999999989,8.489449999999977,8.48962499999999,8.50250699999998,8.503026999999975,8.505698999999993,8.507151000000022,8.513235000000009,8.521359000000018,8.525622999999996,8.526872000000026,8.529190000000028,8.535190999999998,8.53812499999998,8.539010000000019,8.539371000000017,8.547703000000013,8.54963600000002,8.554725000000019,8.566249000000028,8.56833499999999,8.57478900000001,8.575331000000006,8.59310499999998,8.595698000000027,8.597024999999974,8.603522999999996,8.612051000000008,8.612723000000017,8.621368000000018,8.624873999999977,8.626608999999974,8.631421999999986,8.63256899999999,8.639211999999986,8.647650999999996,8.647655999999984,8.65259900000001,8.666755000000023,8.669451999999978,8.671897999999999,8.673334000000011,8.676539999999989,8.676541999999984,8.686063999999988,8.691044999999974,8.696206000000018,8.706594999999993,8.708612000000016,8.710546000000022,8.713917999999978,8.730766000000017,8.73489699999999,8.737711999999988,8.757464000000027,8.764999999999986,8.809542000000022,8.813491999999997,8.823485000000005,8.834194000000025,8.847305000000006,8.852978000000007,8.855246000000022,8.867098999999996,8.867160000000013,8.871987999999988,8.872235999999987,8.877161999999998,8.884758999999974,8.885359999999991,8.896462999999983,8.938504000000023,8.94348100000002,8.948960999999997,8.988140999999985,9.012393999999972,9.023325,9.029688000000021,9.036518000000001,9.042911000000004,9.042911000000004,9.05015400000002,9.053764999999999,9.077519999999993,9.078524000000016,9.123334,9.125787000000003,9.14443399999999,9.164394000000016,9.177406000000019,9.20016800000002,9.233752999999979,9.236719999999991,9.237805999999978,9.24724500000002,9.256552,9.311277000000018,9.314472000000023,9.324853000000019,9.335095000000024,9.338369,9.34037699999999,9.377050999999994,9.405439999999999,9.414457000000027,9.426608999999985,9.442176000000018,9.445582000000002,9.448505000000011,9.460384999999974,9.460384999999974,9.468001000000015,9.469430999999986,9.469588999999985,9.483652000000006,9.492338000000018,9.507689000000028,9.508412000000021,9.512595999999974,9.51297599999998,9.515115999999978,9.556629999999984,9.560936000000027,9.566130999999984,9.576274000000012,9.582446000000004,9.606822000000022,9.608585000000005,9.615522999999996,9.623440000000016,9.655497000000025,9.685047999999995,9.693380999999988,9.759818999999993,9.788680999999997,9.81468000000001,9.82288699999998,9.829159000000004,9.829363999999998,9.830933000000016,9.835459000000014,9.848674000000017,9.862322000000006,9.877218000000028,9.915767000000017,9.943819000000019,9.944711999999981,9.946091000000024,9.960337999999979,9.976361999999995,9.998279000000025];
output = document.getElementById("output");
output.innerHTML += Math.max(...arr) + '<br />';
output.innerHTML += arr.sort()[arr.length-1] + '<br />';
output.innerHTML += arr.sort()[arr.length-2] + '<br />';
output.innerHTML += arr.sort()[0] + '<br />';
output.innerHTML += '---------------------------------------' + '<br />'
a = [1,2,3,0];
output.innerHTML += Math.max(...a) + '<br />';
output.innerHTML += a.sort()[a.length-1] + '<br />';
output.innerHTML += a.sort()[a.length-2] + '<br />';
output.innerHTML += a.sort()[0] + '<br />';
<html>
<body>
<div id='output'></div>
</body>
</html>
Shouldn't the last element in the sorted array be the max?
If you want to sort numbers you should pass a call back. If you don't pass a callback it will sort() it as strings. According to MDN
The default sort order is built upon converting the elements into strings, then comparing their sequences of UTF-16 code units values.
var array = [1, 10, 100, 20];
array.sort((a, b) => a - b);
console.log(...array);
array.sort();
console.log(...array);
Note:sort() modifies the original array. You are using sort() like you assume it doesnot. In this case it works fine but maybe in other cases it can cause problems
Math.max called this way will be unreliable. From MDN:
However, both spread (...) and apply will either fail or return the wrong result if the array has too many elements, because they try to pass the array elements as function parameters. See Using apply and built-in functions for more details. The reduce solution does not have this problem.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max

why json response has square brackets [closed]

Closed. This question needs debugging details. It is not currently accepting answers.
Edit the question to include desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem. This will help others answer the question.
Closed 5 years ago.
Improve this question
For some reason I have to use JSON like this:
php code
$json = json_decode([{
"key":1812,
"ticks":0,
"events":"7F7E7F7E7F7E7F7E7F7E7F7E7F7E",
"s1a":"011A00002066C0D9",
"s1c":"011C0149040901496650002830000000000000023344000043410000000300000004C5BD",
"s46":"014600283000CA8D","s10":"011000287182943B",
"s9a":"019A0000000018000000000000000000DC69",
"version" : "18.05"
}]);
// and use $json in loop to populate the table...
that pair of square brackets does not let me do anything with it in php. My editor show an parse error. I solved this problem in js like this:
var data = json[0];
var i;
for(i=0; i<json.length; i++){
var html = '';
html += '<td>' + json[i]["key"] + '</td>'
+ '<td>' + json[i]["ticks"] + '</td>'
+ '<td>' + json[i]["events"] + '</td>'
+ '<td>' + json[i]["s1a"] + '</td>'
+ '<td>' + json[i]["s1c"] + '</td>'
+ '<td>' + json[i]["s46"] + '</td>'
+ '<td>' + json[i]["s9a"] + '</td>'
+ '<td>' + json[i]["version"] + '</td>';
}
$(html).appendTo('#bundle');
//var jsonEncoded = JSON.parse(data);
console.log(json.length);*/
But it seems bad to use it like this. How can I solve this in php?
you can simply use json_decode for this in PHP, Like:
<?php
$data = json_decode($json);
var_dump($data[0]->key);
var_dump($data[0]->events);
And you can access them simply by using the index 0. Demo
Edit: The problem with your code is that your are not enclosing the json string in quotations. You should use it like this:
$json = json_decode('[{
"key":1812,
"ticks":0,
"events":"7F7E7F7E7F7E7F7E7F7E7F7E7F7E",
"s1a":"011A00002066C0D9",
"s1c":"011C0149040901496650002830000000000000023344000043410000000300000004C5BD",
"s46":"014600283000CA8D","s10":"011000287182943B",
"s9a":"019A0000000018000000000000000000DC69",
"version" : "18.05"
}]');
Also worth mentioning that if you are using an ORM, and you are working with collections (which is a common use case with Laravel, for example, and with many other PHP frameworks), there are two ways you can return something that you are looking for in a query.
First: you query an array of elements, and in this case, only one is found. Then, if you pass that as your response, it will contain the array brackets - a valid JSON type.
But if you specifically query for a single element (like with ::first() in the case of Eloquent), if you return that, it will automatically only return the object, without any enclosing brackets.
Edit: seeing your edit, yeah, mega6382 has the answer.

Problems displaying .json values

I'm having trouble displaying two values on the screen( high-top and category):
This is my code:
$.getJSON('data.json', function(obj){
$.each(obj["best-seller"], function(key, value){
console.log(value.title);    
console.log(value.price); 
console.log(value.higth-top); 
console.log(value.category); 
$("#produto").append(" <b>"
+value.title+"<br/>"
+value.price+"<br/>",
+value.category+ "<br/>",
+value.higth-top+ "<br/>",
"</b>"
);
});
});
Note: Category is shown perfectly on the console, but in html it is returned NaN
And the higth-top is returned NaN in the console and also in the Html
Other values are normally displayed
I search the data in a .json, like this:
{
"best-sellers": [
{
"title": "Chuteira Nike HyperVenomX Proximo II Society",
"price": 499.9,
"installments": {
"number": 10,
"value": 49.9
},
"high-top": true,
"category": "society",
"image": "aaaa.jpg"
}
]
}
Just remove the commas inside the append.
Right now you've separated the variables by commas, giving append multiple arguments, and the plus signs acts as coercion to numbers instead of string concatenation, giving you NaN instead of the expected string
$("#produto").append(" <b>" + value.title +
"<br/>" + value.price +
"<br/>" + value.category +
"<br/>" + value['higth-top'] +
"<br/></b>"
);
Also note that hyphens aren't valid in dot-nation, as they also mean "subtract", you'd have to use bracket notation for the property higth-top
You cannot concatenate a string with commas so you have to remove them, moreover hyphens are not allowed in dot-notation
value.higth-top
here javascript understands "subtract top to value.high"
Write it as follows
$("#produto").append(" <b>" + value.title +
"<br/>" + value.price +
"<br/>" + value.category +
"<br/>" + value['high-top'] +
"<br/></b>"
);

Params Not being passed to AJAX correctly - Encoding issue?

Here is my code:
var params = '_SaveEditUserReq=1' ;
for(i=0; i<document.editUserForm.elements.length; i++)
{
// if(document.editUserForm.elements[i].name.substr(0, 7) == "school|") {
if (document.editUserForm.elements[i].type == 'checkbox') {
// If the id begins with 'school|', take the value if it is checked.
if (document.editUserForm.elements[i].checked) {
console.log("CHECKED!" + document.editUserForm.elements[i].value);
params += "&" + encodeURIComponent(document.editUserForm.elements[i].name) + "=" + encodeURIComponent(document.editUserForm.elements[i].value) ;
console.log(params);
}
}
else {
// Take everything else
params += "&" + document.editUserForm.elements[i].name + "=" + document.editUserForm.elements[i].value ;
}
}
Here is what is being built:
SaveEditUserReq=1&_username=jgald&_orig_username=jgald&password_error_msg=&new_password_ok=YES&new_password=&new_password_text=&new_password_too=&new_password_too_text=&_last_name=TheSirName&_first_name=TheName&_middle_initial=&_profile=Teacher&_email=email#email.com&_teacher=&school%7C=Baker%20Elementary%20School&school%7C=Brookland%20Middle%20School&school%7C=Charles%20M.%20Johnson%20Elementary%20School&=SAVE CHANGES&=CANCEL&_site=TheSite
When it's passed to PHP, the $_POST array only sees the last checkbox checked.
In this case:
[school|] => Charles M. Johnson Elementary School
Can you see what is wrong?
Given multiple key/value pairs with the same name, PHP will discard all but the last one unless the key name ends with the characters [].
If those characters exist, then it will populate $_GET (or post, etc) with an array where the name doesn't include [].
i.e.
foo.php?bar%5B%5D=1&bar%5B%5D=2
will give:
$_GET['foo'][0] == 1;
$_GET['foo'][1] == 2;
From the JavaScript portion, you have two problems
Encoding the name
You do not encode the name, just the value
params += "&" + encodeURIComponent(document.editUserForm.elements[i].name)
should be
params += "&" + document.editUserForm.elements[i].name
Not encoding the value in else
You are not encoding the value in the else!
"=" + document.editUserForm.elements[i].value ;
needs to be
"=" + encodeURIComponent(document.editUserForm.elements[i].value) ;

Categories