unserialize sorun

4 Cevap php

Ben scripy ile başka bir sorunu şimdi ben, daha ileri yaptık ilk sayım fonksiyonu kapalı düzgün çalışmıyor ve bu hatayı veriyor var.

* Uyarı: array_push () [function.array tuşla]: \ wamp \ www 42, satırında toplumsal \ add.php \ *: Birinci argüman C bir dizi olmalıdır

İşte benim senaryom:

$query = mysql_query("SELECT friends FROM users WHERE id='$myid'");
$friends = mysql_fetch_array($query);
$friends2 = unserialize($friends['friends']);

if (count($friends2) == 0) {

//option 1
$friends2 = array($id);
$friendsUpdated = serialize($friends2);
mysql_query("UPDATE users SET friends='$friendsUpdated' WHERE id='$myid'");

}else{

//option 2
array_push($friends2, $id);
$friendsUpdated = serialize($friends2);
mysql_query("UPDATE users SET friends='$friendsUpdated' WHERE id='$myid'");

4 Cevap

Eğer doğru veritabanını yarattıktan sonra ama orada herhangi bir veri koyarak önce bu kodu çalıştırırsanız, "unserialize ($ arkadaşları ['arkadaş']);" Bir dizi başka bir şey verir. Muhtemelen boş bir dize. Yani seçenek 2, sen array_push önce böyle bir şey yapmak isteyebilirsiniz:

if (!is_array($friends2)) {
  $friends2 = array();
}

Kişi bu noktada hiçbir arkadaşı yok (sad.. Ama onlara yeni bir arkadaş iterek bunu düzeltmek olacak) Bu şekilde, boş bir arkadaş listesi başlatıldı alır.

Ayrıca, "eğer" durumun farklı yerlerinde kod iki özdeş çizgiler görmek her zaman ...

$friendsUpdated = serialize($friends2);
mysql_query("UPDATE users SET friends='$friendsUpdated' WHERE id='$myid'");

Yani sadece bu satırları bir kopyasını olurdu böylece kodunuzu yeniden gereken bir sinyal.

Bu $friends2 bir dizi değil gibi görünüyor. Değerini görmek için var_dump($friends2) işlevini kullanın.

Bu yardımcı ses olmayabilir, ama veritabanı tasarımı quite stange olduğunu.

Neden $ Friends2 olmayan bir dizidir? Aslında ilk etapta veritabanından istediğiniz şeyi elde görmek için bir dizi getiriliyor sonra () $ arkadaş print_r çalışın.

Ayrıca, sayısı kontrol gereksiz olduğunu. Bir diziye eklemek için, sadece $ friens2 [] = $ id gidin; $ Friends2 boş olsaydı, sadece aksi takdirde onu katacak, 1 elemanının ($ id) yeni bir dizi yapacak.

Sizin soru cevap içerir: unserialize($friends['friends']) dizi olmayan ve sayısı ($ Friends2) sıfır değil dönmek gibi - numarası geçerse, bu, örneğin, olabilir. Eğer $ arkadaşlar ['arkadaşları'] veri incelemek için denediniz mi? Basit yolu * ek check * is_array ($ Friends2) yapmak olacaktır