PHP选择值不保存到MySQL

时间:2013-05-20 01:18:08

标签: php mysql enums

无法弄清楚为什么以下内容会在我的本地测试服务器上保存正常,但不能在我的托管上保存。美元符号是我托管的唯一值。所有在当地保存都很好。

对于我有两个 对于具有utf8_unicode_ci排序规则的类型,“enum('$', '€', '¥', '£')”。

<select name="user_currency" id="user_currency">
    <option value="$" <?php echo ($user_currency == '$'?'selected="selected"':'');?>>$ - Dollar</option>  
    <option value="&euro;" <?php echo ($user_currency == '&euro;'?'selected="selected"':'');?>>&euro; - Euro</option>                      
    <option value="&yen;" <?php echo ($user_currency == '&yen;'?'selected="selected"':'');?>>&yen; - Yen</option>                 
    <option value="&pound;" <?php echo ($user_currency == '&pound;'?'selected="selected"':'');?>>&pound; - Pound</option>               
</select>

查询:

    $query = "UPDATE users as us SET user_currency = ".$db->prep($_POST['user_currency'])." WHERE us.user_id = '{$user_id}'";

准备功能

function prep($value,$strip_tags = 1){ 
       // Stripslashes
       if (get_magic_quotes_gpc()) {
           $value = stripslashes($value);
       }
       // Quote if not integer
       if (!is_numeric($value) || $value[0] == '0') {
           $value = "'" . mysql_real_escape_string($value) . "'";
       }           
      if($strip_tags){
            $value = DB::strip_html_tags($value);
       }else{
            $value = DB::strip_html_tags($value,0);
       }           
       return $value;
}   

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

也许您应该尝试更改此部分:

<select name="user_currency" id="user_currency">
    <option value="$" <?php echo ($user_currency == '$'?'selected="selected"':'');?>>$ - Dollar</option>  
    <option value="&euro;" <?php echo ($user_currency == '&euro;'?'selected="selected"':'');?>>&euro; - Euro</option>                      
    <option value="&yen;" <?php echo ($user_currency == '&yen;'?'selected="selected"':'');?>>&yen; - Yen</option>                 
    <option value="&pound;" <?php echo ($user_currency == '&pound;'?'selected="selected"':'');?>>&pound; - Pound</option>               
</select>

是:

<select name="user_currency" id="user_currency">
    <option value="$" <?php echo ($user_currency == '$'?'selected="selected"':'');?>>$ - Dollar</option>  
    <option value="&amp;euro;" <?php echo ($user_currency == '&euro;'?'selected="selected"':'');?>>&euro; - Euro</option>                      
    <option value="&amp;yen;" <?php echo ($user_currency == '&yen;'?'selected="selected"':'');?>>&yen; - Yen</option>                 
    <option value="&amp;pound;" <?php echo ($user_currency == '&pound;'?'selected="selected"':'');?>>&pound; - Pound</option>               
</select>

否则浏览器将发送与您声明的枚举不符的实际货币字符。 [编辑]这是因为您的枚举是HTML实体。我建议在内部切换使用货币代码,如JPY,USD等?

[澄清编辑:ISO货币代码更易于移动,如果您决定使用某些与货币相关的资源,第三方API更有可能使用它们。至于它为什么在本地工作而不在外部服务器上...如果您在用户输入上使用任何实体函数,则可能是实体处理中的PHP版本差异。如果是这种情况,则更有理由使用ISO货币代码。]