2011-10-31 46 views
0

首先,我是ajax和Java Script的新手。我花了幾天的時間解決了這個問題,但我仍然沒有想到它。我已經閱讀了類似問題的主題,但仍然無法正確理解。所以在這裏;使用ajax提交獲取檢查值

非常簡單我想從三個單選按鈕之一發布選中的值。我得到的雖然是第一個單選按鈕才值..

我已經試過幾件事情,但我剝離下來的代碼,所以它可能是更容易看到問題是:-)

的AJAX

<script type"text="" javascript"=""> 
$(document).ready(function(){ 
    $("form#submit").submit(function() { 
    // we want to store the values from the form input box, then send via ajax below 
    var svar  = $('#svar').attr('value'); 
    var date  = $('#date').attr('value'); 
    var email  = $('#email').attr('value'); 

     $.ajax({ 
      type: "POST", 
      url: "ajax.php", 
      data: "svar="+ svar + "&email=" + email + "&date=" + date, 
      success: function(){ 
       $('form#submit').hide(); 
       //$('form#submit :input').val(""); 
       $('div.success').fadeIn(); 
      } 
     }); 
    return false; 
    }); 
}); 
</script> 

形式

<form id="submit" method="post" name="submit" action=""> 
      <fieldset> 
      <legend>Dagens spørgsmål: <? echo $row['question'];?></legend> 
       <br> 
       <input type="radio" name="svar" id="svar" value="1"><? echo $row['opt1'];?> 
       <br> 
       <input type="radio" name="svar" id="svar" value="2"><? echo $row['opt2'];?> 
       <br> 
       <input type="radio" name="svar" id="svar" value="3"><? echo $row['opt3'];?> 
       <br> 
        <input name="email" id="email" type="hidden" value="<? echo $email ?>" /> 
        <input name="date" id="date" type="hidden" value="<? echo $date ?>" /> 

       <br><br> 
       <button type="submit" class="button positive"> <img src="img/tick.png" alt=""> Svar på dagens spørgsmål </button> 
      </fieldset> 
     </form> 

Ajax.php

<?php 

    include ("dbc.php"); 

// CLIENT INFORMATION 
    $email  = htmlspecialchars(trim($_POST['email'])); 
    $date  = htmlspecialchars(trim($_POST['date'])); 
    $svar  = htmlspecialchars(trim($_POST['svar'])); 



//stuff from answers 

     mysql_query("INSERT INTO answers 
     (`email`,`day`,`answer`) 
     VALUES 
     ('$email','$date','$svar')") or die(mysql_error()); 

?> 

希望一個你,你聰明的傢伙有辦法解決。因爲這件事,我要把我逼瘋

+0

您正在將數據插入數據庫,而不是HTML文檔。您需要使數據庫的數據安全,而不是HTML。不要使用'htmlspecialchars',使用[使用綁定參數](http://bobby-tables.com/)的數據庫插入方法。 (如果稍後將數據從數據庫中提取出來並將其插入到HTML文檔中,那麼**將使用'htmlspecialchars')。 – Quentin

回答

1

你有幾個問題。

首先,您的HTML是invalid。一個ID必須是唯一的,所以每個單選按鈕必須有它自己的ID。您通過給他們一個相同的名稱來關聯一組單選按鈕。 (具有唯一ID然後可以使用FOR屬性將LABEL與每個LABEL相關聯,通過使屏幕閱讀器更容易並提供更大的點擊目標來增加可訪問性。

其次,單選按鈕的值是固定的。問題是「它是否成功?」並且通過查看它是否被檢查來確定。如果您手動執行此操作,則必須在組中的每個單選按鈕上都有循環,直到找到一個已選中的選項(或使用僅匹配選中比例按鈕(:checked)的選擇器)。

第三,您通過將字符串混合在一起而不確保數據是否安全(使用encodeURIComponent)來構建表單數據。

解決方法是忘記手動完成所有這些操作,然後只使用表單上的jQuery serialize方法

1

第一個:您對幾個元素使用相同的ID。 ID-s應該是唯一的,你應該用類名或其他方式來處理你的元素。因此,而不是

$('#svar') 

你要跟應該使用

$('input[name=svar]') 

引用組複選框。

二:有輕微錯誤的位置:

$('#svar').attr('value'); 

是第一個單選按鈕的值屬性的值,而

$('input[name=svar]:checked').val(); 

會給你檢查收音機的價值按鈕選擇input[name=svar]

編輯: thx @Quentin指出我的錯誤。

+0

'val' [返回**第一個**單選按鈕的值](http://jsfiddle.net/ZzDPa/),而不是選中的那個。 – Quentin

+0

@Quentin對,糾正了我的答案。 – aorcsik

0

首先要知道的是id應該在html文檔中是唯一的。

是什麼使得ID類型的屬性特別的是沒有兩個這樣的 屬性可以具有相同的值;

[從CSS2選擇docs]

你assigend同一個ID三個單選按鈕引用。

現在當您使用var svar = $('#svar').attr('value');時,只有第一個單選按鈕將被選中。所以,不管選中哪個單選按鈕,只有你會得到的第一個單選按鈕值。

現在,如果您想要選擇單選按鈕,您必須使用jQuerys :checked selector