2016-04-09 41 views
0

Dizisel verileri PHP ile bir .json dosyasına kaydediyorum. .json dosyası daha sonra bazı JS tarafından çağrılır ve bir değişkene konur. İşte Dosyaya JSON kaydediliyor, varsa çıktı değiştiriliyor

PHP kod: Dosya & varsa

$fetch = mysqli_query($connection, "SELECT * FROM mrb_prprty WHERE `nationalid` = '". $nationalid ."' AND `author` = '" .$username. "'"); 
$return_arr = array(); 

while ($row = mysqli_fetch_array($fetch)) { 
    $row_array['firstName'] = $row['fname']; 
    $row_array['lastName'] = $row['lname']; 
    $row_array['nationality'] = $row['nationality']; 
    $row_array['phone'] = $row['mobile']; 
    $row_array['email'] = $row['email']; 
    $row_array['street'] = $row['street']; 
    $row_array['towncity'] = $row['towncity']; 
    $row_array['postcode']= $row['postcode']; 
    $row_array['county'] = $row['county']; 
    $row_array['country'] = $row['country']; 
    $row_array['rentpw'] = $row['rentpw']; 
    $row_array['nationalid'] = $row['nationalid']; 
    $row_array['passport'] = $row['passport']; 
    $row_array['isFavorite'] = $row['favourite']; 

    array_push($return_arr,$row_array); 
} 

$json_mrb = json_encode($return_arr); 

$myFile = "userdata/". $username .".json"; 

$method = (file_exists($myFile)) ? 'a' : 'w'; 
$fh = fopen($myFile,$method); 
fwrite($fh, $json_mrb."\n"); 

bu ilk kez çalıştırıldığında, yeni bir dosya oluşturmak veya sonucuna göre mevcut bir eklenecek ya algılar . İşte

ilk kez yukarıdaki PHP kodu çalıştırdıktan sonra '.json' dosyanın önizlemesini var:

[{"firstName":"Ryan","lastName":"Butterworth","nationality":"rKqF01JNdAB1\/EjPW1sulcHzA+Lqp3y\/aaNtpixFphA=","phone":"6jAbOoIal2Eh73neklZgXcA2jJ3831uRiJWE74fADD8=","email":"gpLkiFg4ju4jv4QK6nftnPCqmzdENbsDt4ayI4L1rrkXvg0VJkxmP9Ac57fs4Ar\/","street":"22 Newton Drive","towncity":"Blackpool","postcode":"FY38BS","county":"England","country":"England","rentpw":"VCXaMj\/V6YNExbREuI08eOuINutZRxcx4vv5s2C2FR4=","nationalid":"dNDgHnJJg4rFgbb6qOEC\/dVlnJUNWLCZASo9X8GP5EE=","passport":"123456","isFavorite":""}] 

Ben sorun olduğunu size ikinci kez PHP kodu çalıştırdığınızda, JavaScript gibi bir değişken olarak '.json' dosyasını yükleyen

[{"firstName":"Ryan","lastName":"Butterworth","nationality":"rKqF01JNdAB1\/EjPW1sulcHzA+Lqp3y\/aaNtpixFphA=","phone":"6jAbOoIal2Eh73neklZgXcA2jJ3831uRiJWE74fADD8=","email":"gpLkiFg4ju4jv4QK6nftnPCqmzdENbsDt4ayI4L1rrkXvg0VJkxmP9Ac57fs4Ar\/","street":"22 Newton Drive","towncity":"Blackpool","postcode":"FY38BS","county":"England","country":"England","rentpw":"VCXaMj\/V6YNExbREuI08eOuINutZRxcx4vv5s2C2FR4=","nationalid":"dNDgHnJJg4rFgbb6qOEC\/dVlnJUNWLCZASo9X8GP5EE=","passport":"123456","isFavorite":""}] 
[{"firstName":"Ryan","lastName":"Butterworth","nationality":"rKqF01JNdAB1\/EjPW1sulcHzA+Lqp3y\/aaNtpixFphA=","phone":"6jAbOoIal2Eh73neklZgXcA2jJ3831uRiJWE74fADD8=","email":"gpLkiFg4ju4jv4QK6nftnPCqmzdENbsDt4ayI4L1rrkXvg0VJkxmP9Ac57fs4Ar\/","street":"22 Newton Drive","towncity":"Blackpool","postcode":"FY38BS","county":"England","country":"England","rentpw":"VCXaMj\/V6YNExbREuI08eOuINutZRxcx4vv5s2C2FR4=","nationalid":"dNDgHnJJg4rFgbb6qOEC\/dVlnJUNWLCZASo9X8GP5EE=","passport":"123456","isFavorite":""}] 

: .json dosya daha sonra aşağıdaki gibi görünecektir var contacts = //fileoutputhere ancak .json dosyasını görebileceğiniz gibi bu çalıştırır böylece artık iki dizi listeleri vardır bir hataya. [{ ...info... },{ ...info... }]

ben bir şekilde PHP esneteceksiniz biliyorum

, ama emin değilim: [{ ...info... }] [{ ...info... }]

bunun böyle kaydetmek istiyorum: Bunun yerine böyle dosyaya kaydetme

bunu nasıl yapabilirim. Baska öneri?

+1

JSON'nuzu varolan dosyaya ekleyemezsiniz. Dosya içeriğini yüklemeniz, bir değişkende şifresini çözmeniz, yeni verileri eklemeniz, kodlamak ve eski dosyanın üzerine kaydetmeniz gerekiyor. – fusion3k

+0

Üzgünüm JSON biçimleriyle çalışmak konusunda yeniyim, bunu nasıl başarabileceğime dair temel bir örnek verebilir misiniz?not: burada her şey beklendiği gibi mükemmel çalışıyor (tabii ki JS değişkeni dışında, dosyada iki diziye ayrılmıştır). Sadece köşeli ayraçları kaldırmanın ve dosyayı algılarsa virgül eklemenin bir yolu olduğunu umuyorum var, yani hepsi bir dizide var –

+0

Dosyayı önce bir değişkene okumalısınız, daha sonra yeni verileri bu değişkendeki diziye ekleyiniz ve sonra dosyayı şifreleyip kaydedeceksiniz (bir önceki dosyanın üzerine yazarak) –

cevap

1

Kendi yönteminizle, benzersiz bir JSON'a sahip olmak yerine, hedef dosyada birden çok JSON dizginiz olacak.

bu şekilde kodunuzu başlatın

:

$myFile = "userdata/". $username .".json"; 

if(file_exists($myFile)) 
{ 
    $data = file_get_contents($myFile); 
    $return_arr = json_decode($data, TRUE); 
} 
else 
{ 
    $return_arr = array(); 
} 

Bu noktada, dosya varsa, $return_arr içinde daha önce değerleri kaydettiniz. Yeni eklenen değerler ile tutarlılık için bir ilişkisel dizi döndürmek için json_encode ikinci parametresini kullanıyorum, ancak sizin durumda tamamen isteğe bağlıdır. Dosya yoksa, $return_arr boş bir dizidir. (Yeni bir tane veya oluşturun)

$fetch = mysqli_query($connection, "SELECT * FROM mrb_prprty WHERE `nationalid` = '". $nationalid ."' AND `author` = '" .$username. "'"); 

while ($row = mysqli_fetch_array($fetch)) { 
    (...) 
} 
$json_mrb = json_encode($return_arr); 

Ve Varolan dosyanın üzerine yaz:

Sonra koduyla devam

$fh = fopen($myFile, 'w'); 
fwrite($fh, $json_mrb."\n"); 
+0

Bu mükemmel çalışıyor, açıklama için teşekkürler - şimdi biraz daha iyi anla! –

0

Sen json dizisine veri eklenecek gerekir böylece var önce dosyayı okumak için İşte size başlamak için bazı sözde kodları:

var myFile = "some-file.json"; 
var return_arr = array(); 
if(fileExists($myFile)){ 
    //maybe add some error handling, in case the file contents are not json? 
    $return_arr = json_decode(get_file_contents($myFile)); 
} 

while($row = getRows()){ 
    $row_array[x] = ... 
    array_push($return_arr, $row_array); 
} 

$fh = $fopen($myFile, 'wa+'); 
fwrite(json_encode($return_arr));