PHP gizemli ekstra DB eklemeleri

5 Cevap php

Ben Kullanıcıların sitemde yapıyoruz aramaları izlemek istiyorum karar, bu yüzden kaydedilen aramalar yerleştirilmesini ve yönetimini kolaylaştırmak için bir kaç basit alanlar ile 'aramalar' adında bir MySQL tablo ve bir model (sınıf) oluşturuldu .

Aramayı kaydeder modeli işlevi:

public function create() {
    $q = $this->db->query("INSERT INTO 
                                `searches` (
                                    `section`,
                                    `keywords`,
                                    `results`,
                                    `location`,
                                    `date`
                                ) VALUES (
                                    %s, 
                                    %s,
                                    %s,
                                    %s,
                                    %s
                                )",
                                $this->section,
                                $this->keywords,
                                $this->results,
                                $this->location,
                                date('Y-m-d G:i:s'));
    $this->id = $this->db->last_insert($q);
}

... Ve benim denetleyicisi, sayfa yüklendiğinde gitmem:

    /* lets save the search if there is one */
    if(isset($_GET['q'])) {
        $search = $this->load->model('Searches_Single',null);
        $search->set('section','sale');
        $search->set('keywords',$_GET['q']);
        $search->set('results',$grand_total);
        $search->set('location',$this->location->id);
        $search->create();
        unset($search);
    }

Ne bana manidar 1-4 yinelenen satırlar yerine genellikle beklediğim sadece 1 eklenir ediliyor olmasıdır.

Hiçbir döngüler, hiçbir yönlendirme ... sadece çok basit bir pageload vardır. Açıkçası, ben bu bana ben bu girişiminde son kez oldu inanıyoruz.

UPDATE

Bu sadece üretim (korkunç) ... Benim yerel kalkınma ortamında olmaz. Her iki hisse aynı kod ... Bu bir sunucu şey olabilir mi?

UPDATE NUMBER 2 I am finding that this seems to be happening on page opening and closing. AKA - I check the time the page opens, and the script logs a search then...and then I check the time the page finishes loading, and the script seems to be logging a search there as well...

GAHHH

5 Cevap

i sorunu sayfasına bir kişiyi takip google robotları ikinci pageLoad tetikleyen ve bu nedenle bir aynalı db ekleme yaratıyor görüntülemek için hangi google reklam belirlemek olduğunu belirledi. bazen tek bir sayfa yük birden çok kez.

iç geçiriyorum. hadi google.

Sizin kod örneği gerçekten bu soruna neden olabilir ne fazla fikir vermez.

Arama sonuçları paginated mı? Eğer öyleyse, bu şartlar yerine getirildiği zaman satır ekleme emin misiniz?

  • Kullanıcı sayfa 1 de olduğunu.
  • Kullanıcı ilk kez sayfa 1. yüklendi.

Bu, ya kullanıcı ziyaret sayfa 2 ve arka sayfa 1 gelmek için karar verirse çiftleri neden sayfasında 1, her zaman eklenen her sayfa yük ekleme VEYA olması mümkündür.

Ben fazladan satır sokulmaktadır ile benzer bir sorunu vardı. Perl komut satırından bir INSERT sorgusu çalıştırırken Tamam çalıştı, ama ben yazabilirim hayır PHP komut dosyası sadece bir satır eklemek istiyorum. Hatta farklı bir fiziksel sunucu denemek için şimdiye kadar gitti ve daha sonra bir sanal makine, tüm basit olası kod çalışıyor:

<?php
mysql_connect("localhost", "USER", "PASSWORD") or die(mysql_error());
mysql_select_db("ci3") or die(mysql_error());
mysql_query("INSERT INTO trialsets (text) VALUES('values')");
header( 'Location: http://5.87.12.89/~tsbertalan/done.html' ) ;

echo "done";

Sonunda, ben sadece phpMyAdmin yeni bir giriş üretilen benim laptop, benim php komut dosyası için URL WGET-ing çalıştı. Daha sonra diğer tarayıcıların ÇALIŞILIYOR yerine dahi bir fikrim yoktu. Çıktı, Chrome uncouthly nedense sayfayı birkaç kez isabet oldu. Bir koymak

header( 'Location: http://5.87.12.89/~tsbertalan/done.html' ) ;

mysql_query satırdan sonra satır sağ sorunu çözüldü. Ben bile sonunda yapmak için tasarlandığı gibi, ben iyi uygulamaları takip olsaydı bu fark ettim ve hemen işleme POST girişinden sonra bir açılış sayfasına yönlendiriliyorsunuz olmazdı.


Bu (IMHO) teşhis etmek için çok iyi yolu sadece sorgu olur zaman içinde / tmp bir dosyaya db sorgu oturum etmektir. Sen db sınıfta bunu yapmak mümkün olmalıdır. Eğer oturum fopen / fwrite yaparsanız, emin olun bunun yerine "w" "a" ekleme modunu kullandığınızdan emin olun, ya da sayfa istekleri günlüğünü üzerine yazacaktır çoğaltmak ve sorgu birden çok kez çalıştığını söylemek mümkün olmayacaktır. Ben bir sayfa Ben dolayı ben unutmuşum bazı yönlendirme beklemeyin 2-3 kez yüklü alır birkaç kez yaşadım. Db sorgusu günlük Eğer bozuk bir ekleme deyimi varsa görmek yardımcı olmalıdır, ya da bir yinelenen ekleme deyimi çalışıyorsa.

Kod bölümleri birden fazla kez çalıştırmak alıyorsanız, ve hiçbir yönlendirmeleri orada tespit ettik tanısında sonra, çağrı yığını fonksiyonu için ne olduğunu görmek için debug_backtrace kullanabilirsiniz. A denetleyicisi yeniden yönetmenlik benim değil, ama farklı yerlerde kod birden çok kez bir bölümü çağrı olabilir. Eğer çağrı yığını dışarı adım olarak, aramadan önce "fonksiyonunu girme" demek için günlük bir satır eklemek ve çağrıdan sonra "fonksiyonu bırakarak" sonra, birden çok kez çağrılan oluyor bir bölümde hata ayıklama hata izleme raporu kullanın.