-3

无法弄清楚为什么下面的内容可以在我的本地测试服务器上很好地保存,但不能在我的托管服务器上保存。美元符号是唯一可以节省我托管的值。全部保存在本地。

对于两者,我都有“ enum('$', '€', '¥', '£')”作为带有 utf8_unicode_ci 排序规则的类型。

<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;
}   

有任何想法吗?

4

1 回答 1

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 实体。我是否可以建议在内部改用日元、美元等货币代码?

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

于 2013-05-20T02:28:31.033 回答