Komut ekleme çiftleri INSERT

3 Cevap php

I am writing a quiz website.
What should happen is:

  • Bir sayfa o ve dört düğme veya bir metin üzerinde bir sorusu var.
  • When you click a button, it calls itself with the answer number in the address like: ?q=[question number]&a=[answer].
  • If the question uses a textbox it POSTs the answer.
  • This code should then detect that something has been sent to it and write that to a database.
  • Kullanıcı kimliği bir tanımlama saklanır.
  • There is also a key column in the database. the idea is that it stores all answers a user has submitted over time and users can change their answers.
    <?PHP
        mysql_connect("------", "------", "------") or die();
        mysql_select_db("------") or die();
        $q=$_GET['q'];
        if(isset($_GET['a'])){
        	$a=$_GET['a'];
        } else {
        	$a=$_POST['longanswer'];
        }		
        if(isset($a)){
        	$u=$_COOKIE['id'];
        	if($qust['atype']==1){
        		mysql_query("INSERT INTO answers (userid ,answer ,qid) VALUES ($u, $a, $q);");
        	} else {
        		mysql_query("INSERT INTO answers (userid ,answer ,qid) VALUES ($u, '$a', $q);");
        	}
        }
    ?>
    

I don't think it should matter, but later on on the code, it queries the database with the SELECT command.
When i run this code, it seems to enter 2 or 3 entries to the database. The trend seems to be that when i run the code it enters the previous answer, followed by the new answer. Any help would be greatly appreciated. Thanks,

Logan

3 Cevap

Ne yapmak istediğiniz kullanıcı başına bir soru başına sadece tek bir cevap vermek için gibi görünüyor. Bu durum buysa, kullanıcı adınız ve qid üzerinde masada bir UNIQUE sınırlamasıyla isteyeceksiniz:

ALTER TABLE answers ADD UNIQUE(userid,qid);

Eğer aynı kullanıcı adınız ve qid ile bir satır eklemek çalıştığınızda bu hata neden olur. Kullanıcıların kendi hatası değiştirmek için izin vermek istiyorsanız, size INSERT sorguyu değiştirebilirsiniz:

INSERT INTO answers (userid ,answer ,qid) VALUES ($uid, '$answer', $qid) ON DUPLICATE KEY UPDATE answer='$answer'

Bu veritabanında gösterilmesini çoklu kayıt engeller, ancak birden ınsert'ler yine PHP kod adı olabilir. Bunu gidermek için biz kod biraz daha görmek lazım.

Başka bir seçenek ilk veritabanına girmek üzereyiz veri almak için denemek olacaktır. Bulursanız, orada zaten, bu yüzden tekrar eklemek gerekmez. Kısıtlamaları kullanarak için öneriler (ses vardır ama sen çoğaltmaları önlemek için çalışıyoruz verileri kolayca kısıtlamaları veya çiftleri istemediğiniz verilerine eklenir değilse exactly aynı veri değil o zaman bu başka bir seçenek) sadece benzer verileri söylüyor.

Yalnızca kullanıcı başına bir cevabı izin verirseniz cmptrgeekken tarafından bahsedilen benzersiz kısıtlama kesinlikle ilave edilmelidir, ama çıkması durumunda o zaman da birincil anahtar ihlali işlemek gerekir: zaten cevap vermiş kullanıcıyı bilgilendirin VEYA önceki değeri yerine, nasıl bağlı olarak Site çalışmak istiyoruz.

Ayrıca, istek bir kez daha tetikledi nedense mı? Belki javascript, sizin veya diğer bazı mantık tarafından? Eğer sadece bir kez tıkladığınızda yinelenen yanıtlar görünürse, bu durum gibi görünüyor.

/ B