0

I connect my db and get some information and this part is correct. But i want to JSON encode for my data.

This is my code

<?php

    include("ayar.php");
    header('Content-Type: application/json');   
    //$ad = $_POST["ad"];
    $ad = "USER89623476571";
    $bilgial    =   @mysql_query("SELECT * FROM KULLANICI WHERE ID_NUMARASI='$ad' ORDER BY ID ASC LIMIT 1");

    $oku=mysql_fetch_assoc($bilgial);
    $metin= $oku['BAGLI_CIHAZ_ID'];
    $yenimetin = explode(',',$metin); 

   foreach($yenimetin as $yazdir){ 
   bilgial($yazdir);
    }  

function bilgial($kullanicisi)
{

    $TERMINAL_BILGI_AL  =   @mysql_query("SELECT * FROM TERMINAL WHERE ID='$kullanicisi' ORDER BY ID ASC LIMIT 1");
    while($TERMINAL_KAYITLAR=@mysql_fetch_assoc($TERMINAL_BILGI_AL)){
        $GELEN_SERIAL               =   $TERMINAL_KAYITLAR["SERIALNUMBER"];
        $GELEN_TERMINAL_ADI         =   $TERMINAL_KAYITLAR["TERMINAL_ADI"];
        $GELEN_SICAKLIK_T1_ALT      =   $TERMINAL_KAYITLAR["SICAKLIK_T1_ALT"];
        $GELEN_SICAKLIK_T1_UST      =   $TERMINAL_KAYITLAR["SICAKLIK_T1_UST"];
        $GELEN_SICAKLIK_T2_ALT      =   $TERMINAL_KAYITLAR["SICAKLIK_T2_ALT"];
        $GELEN_SICAKLIK_T2_UST      =   $TERMINAL_KAYITLAR["SICAKLIK_T2_UST"];
        $GELEN_SICAKLIK_T3_ALT      =   $TERMINAL_KAYITLAR["SICAKLIK_T3_ALT"];
        $GELEN_SICAKLIK_T3_UST      =   $TERMINAL_KAYITLAR["SICAKLIK_T3_UST"];
        $GELEN_SICAKLIK_T1          =   $TERMINAL_KAYITLAR["SICAKLIK_T1_SON_DATA"];
        $GELEN_SICAKLIK_T2          =   $TERMINAL_KAYITLAR["SICAKLIK_T2_SON_DATA"];
        $GELEN_SICAKLIK_T3          =   $TERMINAL_KAYITLAR["SICAKLIK_T3_SON_DATA"];
        $GELEN_NEM_H1_ALT           =   $TERMINAL_KAYITLAR["NEM_H1_ALT"];
        $GELEN_NEM_H1_UST           =   $TERMINAL_KAYITLAR["NEM_H1_UST"];
        $GELEN_NEM_H2_ALT           =   $TERMINAL_KAYITLAR["NEM_H2_ALT"];
        $GELEN_NEM_H2_UST           =   $TERMINAL_KAYITLAR["NEM_H2_UST"];
        $GELEN_NEM_H3_ALT           =   $TERMINAL_KAYITLAR["NEM_H3_ALT"];
        $GELEN_NEM_H3_UST           =   $TERMINAL_KAYITLAR["NEM_H3_UST"];
        $GELEN_NEM_H1               =   $TERMINAL_KAYITLAR["NEM_H1_SON_DATA"];
        $GELEN_NEM_H2               =   $TERMINAL_KAYITLAR["NEM_H2_SON_DATA"];
        $GELEN_NEM_H3               =   $TERMINAL_KAYITLAR["NEM_H3_SON_DATA"];
        $GELEN_SICAKLIK_T1_AD       =   $TERMINAL_KAYITLAR["SICAKLIK_T1_AD"];
        $GELEN_SICAKLIK_T2_AD       =   $TERMINAL_KAYITLAR["SICAKLIK_T2_AD"];
        $GELEN_SICAKLIK_T3_AD       =   $TERMINAL_KAYITLAR["SICAKLIK_T3_AD"];
        $GELEN_NEM_H1_AD            =   $TERMINAL_KAYITLAR["NEM_H1_AD"];
        $GELEN_NEM_H2_AD            =   $TERMINAL_KAYITLAR["NEM_H2_AD"];
        $GELEN_NEM_H3_AD            =   $TERMINAL_KAYITLAR["NEM_H3_AD"];
        $GELEN_SON_DATA             =   $TERMINAL_KAYITLAR["GELEN_SON_DATA"];
        }


// Json datasına çevrilecek diziyi yaratalım.
$json = array(); 

$json["Bilgiler"][] = array( 
    'GELEN_SERIAL'=> $GELEN_SERIAL, 
    'TERMINAL_ADI'=> $GELEN_TERMINAL_ADI, 
    'SICAKLIK_T1'=> $GELEN_SICAKLIK_T1,
    'SICAKLIK_T2'=> $GELEN_SICAKLIK_T2,
    'SICAKLIK_T3'=> $GELEN_SICAKLIK_T3,
    'NEM_H1'=> $GELEN_NEM_H1,
    'NEM_H2'=> $GELEN_NEM_H2,
    'NEM_H3'=> $GELEN_NEM_H3,
    'SON_DATA'=> $GELEN_SON_DATA,

    );  

echo json_encode($json);    

}

?>

And this is result;

{"Bilgiler":
 [
   {"GELEN_SERIAL":"AGE6000010",
   "TERMINAL_ADI":"DENEME TERM",
   "SICAKLIK_T1":"23,8",
   "SICAKLIK_T2":"23,9",
   "SICAKLIK_T3":"23,8",
   "NEM_H1":"30",
   "NEM_H2":"29",
   "NEM_H3":"31",
   "SON_DATA":"2016-10-31 20:54:00"}
   ]
}{"Bilgiler":
  [
    {"GELEN_SERIAL":"AGE6000022",
    "TERMINAL_ADI":"Eczane",
    "SICAKLIK_T1":"23,0",
    "SICAKLIK_T2":"23,0",
    "SICAKLIK_T3":"22,9",
    "NEM_H1":"21",
    "NEM_H2":"21",
    "NEM_H3":"30",
    "SON_DATA":"2016-12-10 16:58:00"}
  ]
}

But, I want it to be this;

{"Bilgiler": 
  [
    {"GELEN_SERIAL":"AGE6000010",
    "TERMINAL_ADI":"DENEME TERM",
    "SICAKLIK_T1":"23,8",
    "SICAKLIK_T2":"23,9",
    "SICAKLIK_T3":"23,8",
    "NEM_H1":"30",
    "NEM_H2":"29",
    "NEM_H3":"31",
    "SON_DATA":"2016-10-31 20:54:00"

    },
    {"GELEN_SERIAL":"AGE6000010",
    "TERMINAL_ADI":"DENEME TERM",
    "SICAKLIK_T1":"23,8",
    "SICAKLIK_T2":"23,9",
    "SICAKLIK_T3":"23,8",
    "NEM_H1":"30",
    "NEM_H2":"29",
    "NEM_H3":"31",
    "SON_DATA":"2016-10-31 20:54:00"}
  ]
}

How can i do this, What am i change in php code ?

2
  • 1
    echo json_encode($json); should be run once on array which contains all your results Commented Dec 10, 2016 at 19:35
  • 2
    And stop using mysql_ extension. It is deprecated and in php7 it is removed. Commented Dec 10, 2016 at 19:36

2 Answers 2

1

Here what should be changed:

// previous code here

$json = array();    
foreach($yenimetin as $yazdir) { 
    // see - each result of `bilgial` function you add to an array
    $json['Bilgiler'][] = bilgial($yazdir);
} 
echo json_encode($json); 

Changes in bilgial function:

function bilgial($kullanicisi)
{

    $TERMINAL_BILGI_AL  =   @mysql_query("SELECT * FROM TERMINAL WHERE ID='$kullanicisi' ORDER BY ID ASC LIMIT 1");

    // codes here.
    // instead of encoding every array - return it:

    // $json = array(); // this line is useles

    return array( 
        'GELEN_SERIAL'=> $GELEN_SERIAL, 
        'TERMINAL_ADI'=> $GELEN_TERMINAL_ADI, 
        'SICAKLIK_T1'=> $GELEN_SICAKLIK_T1,
        'SICAKLIK_T2'=> $GELEN_SICAKLIK_T2,
        'SICAKLIK_T3'=> $GELEN_SICAKLIK_T3,
        'NEM_H1'=> $GELEN_NEM_H1,
        'NEM_H2'=> $GELEN_NEM_H2,
        'NEM_H3'=> $GELEN_NEM_H3,
        'SON_DATA'=> $GELEN_SON_DATA,
    );  
}

Going further - you can use WHERE IN sql clause and call your function only once.

And as I already mentioned - stop using deprecated mysql extension asap.

Sign up to request clarification or add additional context in comments.

Comments

1

You can adopt the MVC style coding. Create your code, and separate the different part.

Here, you have the following logic:

Call SQL1
While on SQL1 results {
  call function
    Call SQL2
    While on SQL2 results {
      get values
    }
    Write json values
 }

As you can see, you will have several json call. So, you should have:

Create finalVariable
Call SQL1
While on SQL1 results {
  call function
    Call SQL2
    While on SQL2 results {
      get values
    }
    set final values on finalVariable (return values of function ?)
 }
 Call json encode on finalVariable

Example:

<?php 
function bilgial($param) {
  // ...
  return [
    'GELEN_SERIAL' => $GELEN_SERIAL,
    // ...
  ]
}

$finalValues = [];
foreach($yenimetin as $yazdir){ 
    $finalValues['Bilgiler'][] = bilgial($yazdir);
}

echo json_encode($finalValues);

1 Comment

Thanks for answer. I will probably try this method

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.