Gambar database lalu perbarui = error, perbarui lalu gambar = sukses! Mengapa?

Jadi saya mengalami bug yang membingungkan (disebabkan oleh programmer), sayalah programmernya.

Saya telah membuat situs web dengan profil pengguna. Profil pengguna memiliki banyak bidang dan gambar. Gambar diunggah dengan baik. Pertama diubah agar sesuai dengan area tertentu.

...
//Saya mengunggah gambar ke database.
imageConverter->loadImage($_FILE... bla balh).
...

Ketika pengguna memutuskan untuk mengubah informasinya, dia juga mempunyai kesempatan untuk mengubah fotonya. Proses edit profil sama persis dengan proses MULAI PROFIL. Satu-satunya perbedaan adalah saya memeriksa bidang yang dia perbarui satu per satu, dan mengubah baris tertentu ke dalam database (tentu saja ini dapat dilakukan secara optimal, tetapi pertama-tama saya ingin ini berfungsi :))

Bagian yang membingungkan adalah ini. Ketika saya EDIT informasi profil, urutannya menjadi seperti ini. saya menggunakan MYSQLI ($ini->mysqli->query($query)).

ini diedit dalam database JIKA BERUBAH

  • 1 nama depan
  • 2 nama belakang
  • 3 kata sandi
  • 4 preferensi berbeda (kotak centang / tombol radio).
  • 5 email
  • 6 gambar profil.
  • 7 perbarui informasi sesi dengan permintaan ke database untuk informasi terkini paling banyak.

Sekarang #7 mengembalikan false (SELECT * FROM USERSINFO)

Sekarang jika saya mengganti urutan tindakan.

  • 1 nama depan
  • 2 nama belakang
  • 3 kata sandi
  • 4 preferensi berbeda (kotak centang / tombol radio).
  • 5 email
  • 6 perbarui informasi sesi dengan permintaan ke database untuk informasi terkini paling banyak.
  • 7 gambar profil.

Ini berfungsi dengan baik.

ada jawaban? Apakah ini berarti jika 1000 orang mencoba menggunakan database saya sekaligus, semua yang ada di sana akan rusak?

Beberapa kode:

Memasukkan gambar (langkah #6 pada contoh tidak berfungsi, #7 pada contoh berfungsi)
$this->mysqli->query("DELETE FROM ".DB_REVIEW_IMAGE_TABLE." WHERE email='$email'");
if ($this->mysqli->query("INSERT INTO ".DB_REVIEW_IMAGE_TABLE." VALUES('$email', '$content', '$imageType')"))

Memperbarui informasi pengguna menjadi informasi sesi. (langkah #7 dalam contoh buruk, #6 dalam contoh kerja)
$this->userInfo = $_SESSION[SESSION_USER_INFO] = $database->getUserInfo($this->email);

yang $ database->getUserInfo($ini->email) == "PILIH ".DB_USERS_ALL_MOUNTAIN.", ".DB_USERS_BACK_COUNTRY.", ".DB_USERS_GROOMERS.", ".DB_USERS_PARK.", ".DB_USERS_SEASON_DAYS.", ".DB_USERS_SEX." , ".DB_USERS_YEARS.", ".DB_USERS_FIRST_NAME.", ".DB_USERS_LAST_NAME.", ".DB_USERS_CITY.", ".DB_USERS_STATE." FROM ".DB_USER_INFO_TABLE.SQL_WHERE_EMAIL

Saya suka menggunakan konstanta :). Dan DB_USERS_SEX = pria atau wanita (untuk berjaga-jaga)

Michael


person ThePrimeagen    schedule 08.11.2010    source sumber
comment
Harap format pertanyaan Anda agar lebih mudah dibaca. Gunakan tombol di atas formulir.   -  person bcosca    schedule 08.11.2010
comment
Dugaan saya adalah database sedang sibuk saat memasukkan gambar, jadi jika saya melakukan pernyataan sebelumnya, itu berfungsi dengan baik. Sangat membingungkan!   -  person ThePrimeagen    schedule 08.11.2010
comment
Bisakah kami mendapatkan kode sebenarnya? Bagaimana tepatnya Anda memperbarui gambar, pertanyaan apa yang dijalankan, dll.?   -  person deceze♦    schedule 08.11.2010
comment
Oke ada beberapa kode :!   -  person ThePrimeagen    schedule 08.11.2010
comment
Masih ada kode yang hilang - kode PHP sebenarnya yang menghasilkan dan menjalankan kueri Anda akan sangat membantu. Apakah Anda menggunakan pernyataan UPDATE individual pada setiap langkah, atau membuat kueri UPDATE variabel seiring berjalannya waktu? Hal besar yang menonjol bagi saya adalah Anda tidak menentukan nama bidang di INSERT Anda, yang berarti Anda mengandalkan posisi bidang yang akurat (yang rentan terhadap kerusakan saat Anda memodifikasi skema - Anda AKAN melewatkan beberapa pertanyaan dalam kode Anda jika Anda mengubah skema, dan akan sulit menemukannya).   -  person gregmac    schedule 08.11.2010


Jawaban (1)


Oke jawabannya sederhana.

Kelas database saya memiliki var level modular yang disebut $mysqli. $mysqli ini entah bagaimana mulai digunakan pada saat yang sama.

Saya melakukan 2 panggilan berurutan.

  • perbaruiPic
  • perbaruiSessionInfo

Masing-masing menggunakan database. Tetapi dengan memiliki level modular var $mysqli entah bagaimana akan menyebabkan konflik. Terutama karena info sesi dan informasi gambar berada di dua database yang berbeda. Saya tidak tahu banyak tentang php, tapi ini harus dijalankan sebelum yang lain selesai. KARENA ITU, untuk memecahnya, setiap metode dalam database

  • membuat koneksi ke database
  • mengatur database yang akan digunakan.
  • mengeksekusi kueri
  • menutup koneksi / kumpulan hasil.

Sekarang berhasil!

person ThePrimeagen    schedule 08.11.2010