2015-05-14 9 views
0

У меня проблема с моим значением переключателя, которое не вставлено в базу данных. Я использую ajax, поэтому в своем PHP-файле я запрашиваю значения, и один из них - это переключатель, который выбран.Значение кнопки «Радио», не вставляемое в базу данных

В моем внешнем javascript-файле переменная «пол» назначается правильно в соответствии с выбранным переключателем. Тем не менее, запрос, выполненный в файле PHP, вообще не вставляет значение переключателя в базу данных. Остальные значения вставляются, за исключением переключателя, который отображается как пустой после отображения таблицы.

Примечание: Я не использую форму.

Эти коды из моего PHP файла:

       . 
           . 
          Some other codes 
           . 
           . 

function insertRow($name, $address, $phone, $gender, $nation){ 
    $table_info = "info"; 
    $query_string = "insert into $table_info(name, address, phone, gender, nation) values('$name', '$address', '$phone', '$gender', '$nation');"; 
    $result = @mysql_query($query_string) or die (mysql_error()); 
    } 
?> 

<?php 
if(isset($_REQUEST['id'])){ 
    $id = rtrim($_REQUEST['id']); 
} 
if(isset($_REQUEST['name'])){ 
$name = $_REQUEST['name']; 
} 
if(isset($_REQUEST['address'])){ 
    $address = $_REQUEST['address']; 
} 
if(isset($_REQUEST['phone'])){ 
    $phone = $_REQUEST['phone']; 
} 
if(isset($_REQUEST['gender'])){ 
    $gender = $_REQUEST['gender']; 
} 
if(isset($_REQUEST['nation'])){ 
    $nation = $_REQUEST['nation']; 
} 
$action = rtrim($_REQUEST['action']); 

if($action=="delete"){ 
echo deleteRow($id); 
echo update_database(); 
} 
elseif($action=="insert"){ 
echo insertRow($name, $address, $phone, $gender, $nation); 
echo update_database(); 
} 
    else{ 
    echo update_database(); 
    } 
?> 

Эти коды из моего файла JavaScript:

      . 
          . 
         Some other functions 
          . 
          . 

function insertThis(){ 
    var name = document.getElementById("name").value; 
    var address = document.getElementById("address").value; 
    var phone = document.getElementById("phone").value; 
    var gender; 
    var radioButtons = document.getElementsByName("gender"); 
    var nation = document.getElementById("nation").value; 

    var page = "database.php"; 

    for(var i=0, length=radioButtons.length; i<length; i++){ 
    if(radioButtons[i].checked){ 
    gender = radioButtons[i].value; 
    break; 
    } 
} 

    var parameters = "name="+name+"&address="+address+"&phone="+phone+"&gender="+gender+"&nation="+nation+"&action=insert"; 

    var xmlhttp = new XMLHttpRequest(); 

    if(xmlhttp==null){ 
    alert("Your browser does not support ajax!"); 
    return false; 
    } 
    xmlhttp.onreadystatechange=function(){ 
    document.getElementById("divTable").innerHTML=xmlhttp.responseText; 
}; 
    xmlhttp.open("GET", page+"?"+parameters, true); 
    xmlhttp.send(null); 
} 

И, наконец, радио кнопки, которые находятся в HTML-файле:

<td>Gender:</td> 
    <td><input checked type="radio" name="gender" id="male" value="Male">Male 
    <input type="radio" name="gender" id="female" value="Female">Female</td> 
+1

Что такое тип данных для столбца 'gender'? попробовали ли вы распечатать свой '$ query_string', чтобы узнать, правильно ли ваш' $ gender' в вашем запросе? – Sean

+0

Тип данных для пола - varchar (6), как мне распечатать my $ query_string, хотя, эхо в функции? – hzq

+0

Не совсем уверен, но попробуйте либо '& radioButtons =" ​​+ gender', либо '& gender =" + radioButtons'. Поскольку вы уже объявили 'radioButtons' в' var radioButtons = document.getElementsByName («gender»), ' –

ответ

1

Вы можете изменить код, как это.

Заменить:

for(var i=0; length=radioButtons.length; i<length; i++) 

с:

for(var i=0; i< radioButtons.length; i++) 

Rewrite:

for(var i=0; i< radioButtons.length; i++){ 
    if(radioButtons[i].checked){ 
    gender = radioButtons[i].value; 
    break; 
    } 
} 
+0

OP имеет 'var radioButtons = document.getElementsByName (" gender "); for (var i = 0, length = radioButtons.length; i Sean

+0

@Sean прав, это то же самое, что я закодировал, но только более короткую версию. – hzq

+0

@ Vikas-Umrao Я предположил, что сначала это не сработает, но это похоже на решение, так как когда я попробовал ваш ответ, он отображает. – hzq

0

Чтобы помочь диагностировать, изменять insertRow() либо echo $query_string; и print_r($_REQUEST);, или записать их в файл, или отправить их по электронной почте.

Это будет записывать в файл, то вы можете открыть его и посмотреть на то, что может происходить:

file_put_contents($query_string . "\n\n" . print_r($_REQUEST, true), 'test_file.txt'); 

Подсказка: вы должны рассмотреть вопрос защиты кода от инъекции SQL и неправильные значения, потому что неожиданные данные могли быть поставленными в database.php. Например, поверните if(isset($_REQUEST['gender'])) в if (isset($_REQUEST['gender']) and in_array($_REQUEST['gender'], array('Male', 'Female')))

Смежные вопросы