是否可以从表单中发布小数?

时间:2011-10-18 13:32:28

标签: php

我正在尝试从表单中获取POSTED数字的反转。

<select name="inverse_num">
<option value="2">2 </option>
<option value="1">1 </option>
<option value="1/2">1/2 </option>
<option value="1/3">1/3 </option>
</select>

在获取值的php文件中,说“1/2”,

$my_inverse=1/($_POST[inverse_num]);  // returns 1 , but..
$my_inverse=1/(1/2);  // returns 2, which is required.

为什么会发生这种情况..从逻辑上来说,我发布了相同的价值。请建议。

4 个答案:

答案 0 :(得分:3)

  • 您只能发布表单中的文字。
  • PHP并不关心变量是否包含字符串或数字,它会在它们之间进行转换。
  • PHP不会解析看似方程的文本。

您可以采取以下措施:

function simple_fractions ($value) {
    if (is_numeric($value)) {
            return $value;
    }
    preg_match('/^(\d+)\/(\d+)$/', $value, $matches);
    if ($matches[1] && $matches[2]) {
            return $matches[0] / $matches[1];
    }
    if ($matches[1] == 0) {
            return 0;
    }
    return false;
}

答案 1 :(得分:2)

你的两个表达方式:

$my_inverse=1/($_POST[inverse_num]);   // array keys shall be quoted
$my_inverse=1/(1/2); 

实际上是:

$my_inverse=1/"1/2"; 
$my_inverse=1/(1/2); 

这解释了结果。

如果您要发送字符串0.5,那么PHP将按预期处理它,顺便说一句。

答案 2 :(得分:1)

Quentin有一个可能的解决方案。

然而,在我看来,另一个更好:

<select name="inverse_num">
<option value="a">2 </option>
<option value="b">1 </option>
<option value="c">1/2 </option>
<option value="d">1/3 </option>
</select>

然后在你的提交脚本中:

if($_POST['inverse_num'] == 'a'){
  $value = 2;
}elseif($_POST['inverse_num'] == 'b'){
  $value = 1;
}elseif($_POST['inverse_num'] == 'c'){
  $value = 1/2;
}elseif($_POST['inverse_num'] == 'd'){
  $value = 1/3;
}

等...

这种方法没什么复杂的。

答案 3 :(得分:0)

如何发布小数而不是分数? 例如0.5