Skip to content
Advertisement

PHP query response to populate HTML dropdown (loop thru 2D array)

I am getting exactly what I need from my PHP code and query; except I am having a really difficult time brining that data up to the front-end in order to populate an HTML dropdown.

Here is what I have on the PHP side; all working fine

$app->get('/dlteopt', function ($request, $response, $args) {   
        
    $which = $_GET['id'];


    if ($which) {

        if ($which == 'table_1'){
            $sql = "SELECT item1 FROM daya.blahblah";
        } else if ($which == 'table_2'){
            $sql = "SELECT item2 FROM daya.blahblah2";
        } else if ($which == 'table_3'){
            $sql = "SELECT item3 FROM daya.blahblah3"; 
        }

        $stid = oci_parse($this->db, $sql);        

        $list = array();

        while ($list = oci_fetch_array($stid, OCI_ASSOC)) {
            $list[] = $list;
            var_dump($list); // this outputs the correct array I need, but cant bring it to front correctly into dropdown
        }


        if (!@oci_execute($stid)) {
            $error = oci_error($stid);

            throw new Exception($error['message']);
        } 

        oci_execute($stid);

    }

Here is the jQuery; the response console log is only the flag (which) variable I am sending with the get request which determines which table to query via a user scenerio. the array I need is ommitted…

 let which = $(frm).attr("id");

    $.get('dlteopt', {id: which }, function (response) { 

       console.log(response); // this just consoles as the $which var no array

       $.each(response, function(index, value) {
         // started logic to append values in option; but no array or obj found/brought in to iterate through, can handle this part if can get array
       });

    });

html drop down; just standard HTML select with a placeholder until populated:

<select name='agent' id='agent'><option>Loading...</option></select>

what am I doing wrong here? or missing/forgetting?


Update: I am stuck on an error on the front-end, below is what console.log(response) outputs executed within my $.get. The data within the error log is correct; I just can’t seem to access it properly… 2D array issue?


jquery.js:502 Uncaught TypeError: Cannot use 'in' operator to search for 

'length' in ......
    array(2) {
  ["OSF_ID"]=>
  string(8) "FAI-FSDO"
  [0]=>
  array(1) {
    ["OSF_ID"]=>
    string(8) "FAI-FSDO"
  }
}
array(2) {
  ["OSF_ID"]=>
  string(8) "SAC-FSDO"
  [0]=>
  array(1) {
    ["OSF_ID"]=>
    string(8) "SAC-FSDO"
  }
} ..... etc

Advertisement

Answer

Consider the following PHP.

public function process($which) {
  if(isset($which)){
    if ($which == 'a_table1'){
      $sql = "SELECT a_table1 FROM data.blah1";
    } else if ($which == 'a_table2'){
      $sql = "SELECT a_table2 FROM data.blah2";
    } else if ($which == 'a_table3'){
      $sql = "SELECT a_table3 FROM data.blah3"; 
    }
 
    $stid = oci_parse($this->db, $sql);
    oci_execute($stid); 
        
    if (!@oci_execute($stid)) {
      $error = oci_error($stid);
      throw new Exception($error['message']);
    }
 
    $myData = array();
    while ($list = oci_fetch_array($stid, OCI_ASSOC)) {
      array_push($myData, $list);
    }
 
    header('Content-Type: application/json');
    echo json_encode($myData);
 
  } else {
    header('Content-Type: application/json');
    echo json_encode(array("error" => "WHICH not assigned"));
  }
}

This should then send back JSON Data of the Array.

Example

[{
  "A_ID":"OJC-FCT"
},{
  "A_ID":"DAL-ATCT"
},{
  "A_ID":"AFF-MIL-TWR"
},{
  "A_ID":"CNO-ATCT"
},{
  "A_ID":"GSN-FCT"
},{
  "A_ID":"CGI-NFCT"
},{
  "A_ID":"NDZ-MIL-TWR"
},{
  "A_ID":"FCS-MIL-TWR"
},{ 
  "A_ID":"LAL-FCT"
},{
  "A_ID":"LNK-ATCT"
},{
  "A_ID":"CHD-FCT"
},{
  "A_ID":"FLG-FCT"
},{
  "A_ID":"MCN-FCT"
},{
  "A_ID":"SKA-MIL-TWR"
}];

You can then use this in your Each Loop to build the Options.

var which = $(frm).attr("id");
$.get('dlteopt', {id: which }, function (response) { 
  console.log(response);
  $("#agent").html("");
  $.each(response, function(index, value) {
    $("<option>").html(value['A_ID']).appendTo($("#agent"));
  });
});

You can also simplify your PHP Output so it’s just the result array of items.

$myData = array();
while ($list = oci_fetch_array($stid, OCI_ASSOC)) {
  array_push($myData, $list['A_ID']);
}

Then you loop will also be simplified.

$("#agent").html("");
$.each(response, function(index, value) {
  $("<option>").html(value).appendTo($("#agent"));
});
User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement