在Mysql和PHP中,null值变为0

时间:2012-08-07 14:33:04

标签: php mysql

我有2个不同名称的下拉列表,我试图只在一个字段中查询。

我正在使用jQuery函数,其中如果选择item 1,将显示下拉列表1,如果选择item 2,将显示下拉列表2

这是我从mysql数据库和表中填充我的下拉列表的方法:

     <div id="minquep">
       <label>Branch</label>
          <SELECT name="user_min"> 
              <OPTION VALUE="0">Choose a branch
              <?=$minq_options?> 
          </SELECT> 
     </div>
    <div id="albury">
        <label>Branch</label>
          <SELECT name="user_branch"> 
              <OPTION VALUE="0">Choose a branch
              <?=$al_options?> 
          </SELECT> 

这就是我通过填写带有下拉列表的表单将查询插入到mysql中的方法:

if (isset($_REQUEST['Submit'])) { 
$sql = "INSERT INTO $db_table(branch) values ('".mysql_real_escape_string(stripslashes($_REQUEST['user_branch'])).",".mysql_real_escape_string(stripslashes($_REQUEST['user_min']))."')";


if($_REQUEST['user_branch']= ""){

    ($_REQUEST['user_branch']) = NULL;
}


if($result = mysql_query($sql ,$db)) { 
echo '<script type="text/javascript">alert("The user has been added successfully!\n");return true;</script>';
echo "<meta http-equiv=\"refresh\" content=\"0;URL=add_user.php\">";
}

else { 
echo "ERROR: ".mysql_error(); 
} 
}

测试场景是,我选择<select name="user_min">下的值。 所以我假设sql会绕过user_branch的结果,因为它是null。但它在插入查询后会打印'0'。例如,如果插入的($_REQUEST['user_min'])值为“Brisbane”且($ _REQUEST ['user_branch'])值为null(因为我未在user_branch下选择任何值下拉列表),分支字段应该成为“布里斯班”,知道user_branchNULL。但它确实用 0 打印“BRISBANE”,就像我的mysql表中的 0,Brisbane 一样。

我该如何解决这个问题?

我已经尝试过设置if条件,但它没有用。

if($_REQUEST['user_branch']= ""){

        ($_REQUEST['user_branch']) = NULL;
    }

我也尝试将 user_min 更改为同名user_branch,但它没有获得所选的值,而不是布里斯班它只是打印< EM> '0'

3 个答案:

答案 0 :(得分:4)

一些事情 -

  1. 您在$ sql后设置user_branch = NULL。

  2. 您正在使用价值附近的报价。这是很好的非空值 - 你需要检查是否有NULL值,然后不要在你的$ sql中使用引号。

  3. 您在IF语句中使用单个“=”。这是你的If语句失败。将其更改为if($var == '')

  4. <强>更新

    基于您现有代码的一些建议 - 但是还有其他最佳实践可以实现您想要实现的目标....

    $user_branch =  $_REQUEST['user_branch'];
    $user_min =  $_REQUEST['user_min']; 
    //you should validate above values first 
    
    if$user_branch == "" || $user_min == "") {
        $db_value = "NULL"; 
    } else 
    {
    $db_value = "'".mysql_real_escape_string(stripslashes($user_branch.','.$user_min))."'";
    }
    
    
    $sql = "INSERT INTO $db_table(branch) values (".$db_value.")";
    

答案 1 :(得分:0)

如果您不想要0,请更改:

<option value="0">Chose a Branch</option>

要:

<option value="">Chose a Branch</option>

否则,它将作为0

传递给表单

此外,您的PHP代码将无法正常工作:

if (isset($_REQUEST['Submit'])) { 
  // do this before the query
  if($_REQUEST['user_branch']== ""){ // note the extra = in there, so you aren't assigning the variable, you are compairing
    $_REQUEST['user_branch'] = NULL; // no need for brackets round the variable
  }
  $sql = "INSERT INTO $db_table(branch) values (".mysql_real_escape_string(stripslashes($_REQUEST['user_branch'])).",".mysql_real_escape_string(stripslashes($_REQUEST['user_min'])).")"; // you had single quotes around everything inside the VALUES() function

  if($result = mysql_query($sql ,$db)) { 
    echo '<script type="text/javascript">alert("The user has been added successfully!\n");return true;</script>';
    echo "<meta http-equiv=\"refresh\" content=\"0;URL=add_user.php\">";
  }
  else { 
    echo "ERROR: ".mysql_error(); 
  } 
}

答案 2 :(得分:-1)

$sql = "INSERT INTO reg(Name ,Email) values ('".mysql_real_escape_string(stripslashes($_REQUEST['Name']))."','".mysql_real_escape_string(stripslashes($_REQUEST['Email']))."')";

这是我的代码。在这里,我发现了未定义索引的错误。