Php 可以从表单中发布小数吗?

Php 可以从表单中发布小数吗?,php,Php,我试图得到表格上公布的数字的倒数 <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> 为什么会发生

我试图得到表格上公布的数字的倒数

<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不关心变量是否包含字符串或数字,它将在它们之间进行转换。 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;
}
您只能发布表单中的文本。 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;
}
你的两个表达:

$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将按预期处理它,顺便说一句。

您的两个表达式:

$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将按预期处理它。顺便说一句,用小数代替分数怎么样?
e、 g.0.5

用小数代替分数怎么样?
e、 g.0.5

昆汀有一个可能的解决方案

然而,我认为另一个更好:

<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>
等等


这个方法并不复杂。

昆汀有一个可能的解决方案

然而,我认为另一个更好:

<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>
等等


这个方法并不复杂。

您的值是以文本形式发布的,而不是以数字形式发布的。如果您添加一个1*$\u POST['inverse\u num'],该怎么办?还有一个PHP类可用于此操作。如果你的数学在任何阶段变得稍微复杂一点,可能会有用。更多信息:您的值是以文本形式发布的,而不是以数字形式发布的。如果您添加一个1*$\u POST['inverse\u num'],该怎么办?还有一个PHP类可用于此操作。如果你的数学在任何阶段变得稍微复杂一点,可能会有用。这里有更多关于它的信息:假设值总是相同的,或者最多从这个代码中修改…@ChaimChaikin-他的代码使用带有下拉框的静态HTML。。。他们是唯一的选择。这就是为什么这是一个如此简单的解决方案。。。不过,上面的一种方法是有效的。没错,有时候,即使代码是动态生成的,人们也只发布静态HTML。假设值总是相同的,或者最多根据此代码修改…@ChaimChaikin-他的代码使用带有下拉框的静态HTML。。。他们是唯一的选择。这就是为什么这是一个如此简单的解决方案。。。但是上面的方法是有效的。的确,有时人们只发布静态HTML,即使代码是动态生成的。