i continuing project. , thing not understand. key function assembling filter string used sql query. function invoke via onclick of button.
my problem value query taken $_request['filter'].
<input id="hdn_filter" name="filter" type="hidden" value="<?php echo $_request['filter']; ?>"> at first $_request['filter'] empty. upon pressing submit button assembles , return string. don't understand how assembled string. because seems function value input. it's value empty. function should received empty input. it's going in circles
example "" != means in javascipt anyway?
an example of assembled string ""deliver_store_account=all^stores_account=all^active=1^part_number=all^new_part_number=all""
and see join("^") part in function. , seems line assembles it. why inside switch parenthesis?
function submit(e, t) { array_filter = new array; (i in array_dropdown) { if (varfield = array_dropdown[i], varid = "sel_" + varfield, arytemp = new array, -1 != document.getelementbyid(varid).selectedindex) (i = 0; < document.getelementbyid(varid).options.length; i++) document.getelementbyid(varid).options[i].selected === !0 && (arytemp[arytemp.length] = document.getelementbyid(varid).options[i].value); arytemp.length > 0 && (array_filter[varfield] = arytemp) } "" != document.getelementbyid("hdn_search").value && (arytemp.search = document.getelementbyid("hdn_search").value), array_filter_temp = new array; (i in array_filter) array_filter_temp[array_filter_temp.length] = + "=" + array_filter[i].join("|"); switch (varfilter = array_filter_temp.join("^"), document.getelementbyid("hdn_filter").value = varfilter, document.getelementbyid("hdn_excel").value = 1 == e ? 1 : 0, !0) { case 1 == t: document.getelementbyid("hdn_override").value = 1; break; case 0 == t: document.getelementbyid("hdn_override").value = 0; break; case-1 == t: } vartxtbox = document.getelementbyid("txt_search").value; alert(vartxtbox); document.getelementbyid("form1").submit() }
whoever wrote code trying obfuscate it, making hard else understand does, perhaps because result sent sql query, stated. of course, if want hide users, specially sql commands, implement server-side.
1) "" != part:
"" != document.getelementbyid("hdn_search").value // left side && // logical , (arytemp.search = document.getelementbyid("hdn_search").value), // right side array_filter_temp = new array; // statement here he's taking advantage of short-circuit evaluation, if left side of expression evaluates false, right side isn't executed. next statement after , executed (read more comma operator). it's same writing:
if (document.getelementbyid("hdn_search").value != "") { arytemp.search = document.getelementbyid("hdn_search").value } array_filter_temp = new array; 2) switch part:
switch ( varfilter = array_filter_temp.join("^"), document.getelementbyid("hdn_filter").value = varfilter, document.getelementbyid("hdn_excel").value = 1 == e ? 1 : 0, !0 ) { the first 2 trivial. on third one, assigning hdn_excel based on value of e. adding parenthesis makes clearer: document.getelementbyid("hdn_excel").value = (1 == e) ? 1 : 0
the !0 there make sure rest of switch executed (it evaluates true). if 0 or false, hdn_override never assigned value.
so whole set rewritten as:
varfilter = array_filter_temp.join("^"); document.getelementbyid("hdn_filter").value = varfilter; document.getelementbyid("hdn_excel").value = (e == 1) ? 1 : 0; switch (t) { case 1: document.getelementbyid("hdn_override").value = 1; break; case 0: document.getelementbyid("hdn_override").value = 0; break; } 3) first for loop: (you haven't asked, here goes anyway)
for (i in array_dropdown) { if ( varfield = array_dropdown[i], varid = "sel_" + varfield, arytemp = new array, -1 != document.getelementbyid(varid).selectedindex ) (i = 0; < document.getelementbyid(varid).options.length; i++) document.getelementbyid(varid).options[i].selected === !0 && (arytemp[arytemp.length] = document.getelementbyid(varid).options[i].value); arytemp.length > 0 && (array_filter[varfield] = arytemp) } again use of , operator execute commands , return value of last 1 if, -1 != document.getelementbyid(varid).selectedindex, second for loop run if element in varid has selectedindex.
the === !0 same === true.
this rewritten as:
for (key in array_dropdown) { varfield = array_dropdown[key]; varid = "sel_" + varfield; arytemp = new array; if (document.getelementbyid(varid).selectedindex != -1) { (i = 0; < document.getelementbyid(varid).options.length; i++) { if (document.getelementbyid(varid).options[i].selected) { arytemp[arytemp.length] = document.getelementbyid(varid).options[i].value; } } } if (arytemp.length > 0) { array_filter[varfield] = arytemp; } } as side note, if can, suggest refactor code, send collected data server , transformation needed on server-side.
Comments
Post a Comment