【问题标题】:Radio button value not inserting into database单选按钮值未插入数据库
【发布时间】:2015-05-14 12:38:18
【问题描述】:

我的单选按钮值有问题,没有插入到数据库中。我正在使用 ajax,所以在我的 PHP 文件中我请求值,其中之一是选中的单选按钮。

在我的外部 javascript 文件中,变量“gender”已根据所选单选按钮正确分配。但是,在 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>

【问题讨论】:

  • gender 列的数据类型是什么?您是否尝试过打印您的$query_string 以查看您的$gender 在您的查询中是否正确?
  • 性别的数据类型是 varchar(6),但是我如何打印出我的 $query_string,在函数中回显它?
  • 不完全确定,但请尝试&amp;radioButtons="+gender&amp;gender="+radioButtons。由于您已经在 var radioButtons = document.getElementsByName("gender"); 中声明了 radioButtons
  • @Fred-ii- var radioButtons 稍后在for(var i=0, length=radioButtons.length; i&lt;length; i++){ 中用于设置if(radioButtons[i].checked){ gender = radioButtons[i].value; break;}。所以&amp;gender="+gender 应该没问题。
  • 如果是与数据库相关的错误,请删除$result = @mysql_query 中的@,您可能会抑制可能出现的错误。

标签: javascript php html ajax radio-button


【解决方案1】:

您可以像这样更改您的代码。

替换:

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

与:

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

重写:

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

【讨论】:

  • OP 有var radioButtons = document.getElementsByName("gender"); for(var i=0, length=radioButtons.length; i&lt;length; i++){ if(radioButtons[i].checked){ gender = radioButtons[i].value; break; } }。那么你的代码和那个有什么不同呢?
  • @Sean 是对的,它与我编写的代码相同,但只是一个较短的版本。
  • @Vikas-Umrao 一开始我以为它不起作用,但这似乎是解决方案,因为当我尝试您的答案时,它会显示出来。
  • 如果您或任何人能向我解释原因,我将不胜感激,否则谢谢。
【解决方案2】:

为了帮助诊断,将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')))

【讨论】:

    猜你喜欢
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 2014-11-04
    • 1970-01-01
    • 2022-01-22
    • 2015-04-10
    • 2013-12-10
    相关资源
    最近更新 更多