while-list给出了奇怪的值

时间:2011-10-13 20:47:57

标签: php mysql sql-update

我从表单中获得下一个帖子:

$_POST['segment'][2]
$_POST['segment'][3]
$_POST['segment'][4]
$_POST['segment'][5]

这些是表单中的复选框。

不要问我为什么,但发布的数据转换为: $ IN [“段”]

我用以下方式检查:

if($IN['segment'][5])
  $podo_segment = 5;
elseif($IN['segment'][4])
   $podo_segment = 4;
elseif($IN['segment'][3])
   $podo_segment = 3;
elseif($IN['segment'][2])
   $podo_segment = 2;
else
   $podo_segment = 'NULL';

podo意味着脚:)。

然后我将(最高)值插入mysql。 (值越高意味着也包含更低的值,这就是为什么只使用1个字段)

我必须更新较旧的值,但使用了掩码,我真的不明白这是如何完成的,因此不知道如何将其转换/更新为新的值2,3,4或5。

$segmask = 0;
while (list($a,$b)=@each($IN["segment"]))
   $segmask += pow(2,$a);

我试过php.net但是对它没有任何意义。至少没有更多$ segmask成为2 ^ $ a的值。 (什么是$ a,$ b和$ b似乎什么也没做?) 但是mysql中的结果值例如:

5给出了32,(对我来说没问题:2 ^ 5)

没有其他选择2,3,4和/或5,给出的值如下:

9977932
16273612
18366668
24662092
16448
17846476
18370636
34619404
270024716
18370780
9982092
34623564
9977980
512
16386
1064964
2
37240844
35143692
1064972
9977868
16388
2148548620
269500428
2148548668
268976140
1107836940
11026444
2149072908
1589260

最后,我需要根据这个较旧的字段更新值为2,3,4或5的新mysql字段。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我个人不喜欢while (list() = each())结构。它看起来很混乱,令人困惑,99.9%的时间foreach将同样有效地完成同样的工作,如果不是更有效的话。

更改

while (list($a,$b)=@each($IN["segment"]))
  $segmask += pow(2,$a);

foreach ($IN["segment"] as $key => $val)
  $segmask += pow(2, $key);

...看看你是否还有同样的问题。如果你这样做,那么问题就在于其他地方,而且我可能会对你想要达到的目标有更多的疑问。