0

フォームをテストすると、データベーステーブルにデータが正常に追加されますが、ラジオボタンの選択は常に「グループ化されていない」で、グループの最初のラジオボタンです。私はそれらに別々のIDを与えようとしましたが、私のajax.jsファイルでは私の関数はこれを使用しています:

var group = encodeURI(document.getElementById('group').value);

つまり、今は存在しないIDを呼び出しているということです(それが起こっていると思います)。ajax関数がラジオボタン選択を呼び出すときに、データベースに追加するphpファイルに送信するために、適切なものを選択するようにするにはどうすればよいですか。

これが理にかなっていることを願っています。詳細が必要な場合は、さらに追加できます。

これが私のフォームです。これは私の割り当てごとに行う必要があるため、phpファイルにあります(ajaxで呼び出す必要があります)。

<!-- Include AJAX Framework -->
<script src="ajax.js" language="javascript"></script>

<?php   $addContact = $_GET['addContact']; //index which sends new contact form to the html page via ajax function.

//form which users can use to enter the details of a new contact to add to the database.
echo "Add A Contact:";
echo "<form action='javascript:insert()' method='get'>";
echo "<table>";
echo "<tr>";
echo "<td>First Name:</td><td><input name='newFname' type='text' id='newFname' value='' size'20'></input></td>";
echo "</tr>";
echo "<tr>";
echo "<td>Last Name:</td><td><input name='newLname' type='text' id='newLname' value='' size'20'></input></td>";
echo "</tr>";
echo "<tr>";
echo "<td>Phone Number:</td><td><input name='newPhone' type='text' id='newPhone' value='' size'20'></input></td>";
echo "</tr>";
echo "<td>Email Address:</td><td><input name='newEmail' type='text' id='newEmail' value='' size'20'></input></td>";
echo "</tr>";
echo "<tr>";
echo "<td>Postal Address:</td><td><input name='newAddress' type='text' id='newAddress' value='' size'20'></input></td>";
echo "</tr>";
echo "<td>Group:</td><td><input type='radio' id='Ungrouped' name='group' value='Ungrouped'>No Group <input type='radio' id='Friends' name='group' value='Friends'>Friend";
echo "<input type='radio' id='Colleagues' name='group' value='Colleagues'>Colleagues <input type='radio' id='Family' name='group' value='Family'>Family";
echo "</table>";
//submit button that submits the contact information to an ajax function.
echo "<input type='submit' name='Submit' value='Add Contact'/>";
echo "</FORM>";

これが私のデータベースに接続し、挿入ステートメントを使用してデータベースにデータを保存する私のphpファイルです。

<!-- Include Database connections info. -->
<?php include('config.php'); ?>

<?php

if(isset($_GET['newFname']) && isset($_GET['newLname']) && isset($_GET['newPhone']) && isset($_GET['newEmail']) && isset($_GET['newAddress']) && isset($_GET['group'])) 
{

    $newFname = $_GET["newFname"] ;
    $newLname = $_GET["newLname"] ;
    $newPhone = $_GET["newPhone"] ;
    $newEmail = $_GET["newEmail"] ;
    $newAddress = $_GET["newAddress"] ;
    $group = $_GET["group"] ;

    $insertContact_sql = "INSERT INTO `test`.`contacts` (`newFname`, `newLname`, `newPhone`, `newEmail`, `newAddress`, `group`) VALUES ('{$newFname}' , '{$newLname}' , '{$newPhone}' , '{$newEmail}' , '{$newAddress}' , '{$group}')";
    $insertContact= mysql_query($insertContact_sql) or die(mysql_error());

} 

else 
{ 
    echo 'Error! Please fill all fileds!';
}

?>

これが私のajaxです(関連するajaxコード、他の関数(つまり、私のフォームを私のhtmlページに呼び出す関数)がありますが、これらはこの問題の解決には適用されません):

function createObject() 
{
    var request_type;
    var browser = navigator.appName;
    if(browser == "Microsoft Internet Explorer")
    {
        request_type = new ActiveXObject("Microsoft.XMLHTTP");
    }

    else    
    {
        request_type = new XMLHttpRequest();
    }

    return request_type;
}

var http = createObject();

//value solve an Internet Explorer cache issue
var nocache = 0;
function insert() 
{
    // Optional: Show a waiting message in the layer with ID login_response
    document.getElementById('content02').innerHTML = "Just a second..."
    // Required: verify that all fileds is not empty. Use encodeURI() to solve some issues about character encoding.
    var newFname= encodeURI(document.getElementById('newFname').value);
    var newLname = encodeURI(document.getElementById('newLname').value);
    var newPhone = encodeURI(document.getElementById('newPhone').value);
    var newEmail = encodeURI(document.getElementById('newEmail').value);
    var newAddress = encodeURI(document.getElementById('newAddress').value);
    var group = encodeURI(document.getElementById('group').value);

    // Set te random number to add to URL request
    nocache = Math.random();
    // Pass the login variables like URL variable
    http.open('get', 'newContact.php?newFname='+newFname+'&newLname=' +newLname+'&newPhone=' +newPhone+'& newEmail=' +newEmail+'&newAddress=' +newAddress+'&group=' +group+'&nocache = '+nocache);
    http.onreadystatechange = insertReply;
    http.send(null);
    }
    function insertReply() {
    if(http.readyState == 4)
    { 
        var response = http.responseText;
        // else if login is ok show a message: "Site added+ site URL".
        document.getElementById('content02').innerHTML = 'Your contact was successfully added!'+response;
    }
}
4

2 に答える 2

0

あなたがする必要があるのは、すべてのラジオボタンを循環して、チェックされているものを選択することです。次に、AJAXリクエストでそのラジオボタンだけの値を送信できます。このようなもの:

    var radios = document.getElementsByName('group');
    var selectedRadio = null;
    for (var i = 0; i < radios.length; i++) {
        if (radios[i].checked === true) {
            selectedRadio = radios[i]; 
            break;
        }
    }

    var group = encodeURI(selectedRadio.value);
于 2013-03-08T00:30:21.113 に答える
0

これを解決するためにjQueryを試すことができます。

<head>次の行をセクションに追加して、HTMLにjQueryを含めます。

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.pack.js"></script>

次に、jqueryセレクターを使用して、AJAXファイルの次の行を置き換えて必要な値を取得します

var group = encodeURI(document.getElementById('group').value);

これらによって:

var groupValue = ($("input[name='group']:checked") != null) ? $("input[name='group']:checked").value : "NOT_CHECKED";
var group = encodeURI(groupValue);

無線入力にプロパティがあることを確認してくださいnameid手元の目的には役立たないので、無視してください。また、ボタンがチェックされていない場合は、独自の値を設定します(デフォルト値を残さない場合)。

https://stackoverflow.com/a/2564019/772020でも読むことができます。

それが役に立ったかどうか教えてください。

于 2013-03-08T00:40:26.480 に答える