在php中处理数字输入失败

时间:2014-01-21 00:06:43

标签: php mysql preg-replace

我有一个输入框,告诉我的用户将他们的Google Plus地址复制并粘贴到其中。这是输入框的代码:

<div class="row-fluid"><div class="span3 sidebar"><h4>Google Plus:</h4></div>
<div class="span9"><p> <input type="text" name="gplus" value="$data->googleplus" placeholder="Google Plus Profile URL">
</p></div></div><br/>

这是处理输入的PHP代码:

$gplus=preg_replace("/[^0-9]/", "", $_POST['gplus']);
mysql_query( "UPDATE contacts SET googleplus='$gplus' WHERE username='$user'" )
or die ( "Could not update GooglePlus" );

我只需要地址末尾的数字,因为其他人对每个人都是一样的。这是问题所在。当用户输入最多10位数时,它可以很好地存储数字。当用户输入超过10位数字时,它会将此数字存储在数据库中:“2147483647”。始终是相同的数字。任何字母都应该被删除,但是任何超过十位的数字都会导致这个数字出现。

我搜索了我的代码“2147483647”,而不是其中任何一个!

4 个答案:

答案 0 :(得分:5)

http://dev.mysql.com/doc/refman/5.5/en/integer-types.html

Type: INT
Maximum Value: 2147483647

您显然将值存储为整数,当数字太大时,会出现溢出,并以最大值结束。

你不应该将这些值存储为整数,因为它们不是数字 - 它们没有数字含义,它们只是一个标识符。改为使用(VAR)CHAR。

答案 1 :(得分:1)

我认为您的数据库字段不正确。将其更改为bigint或float(或varchar ...)。

添加链接:http://dev.mysql.com/doc/refman/5.5/en/integer-types.html

同意上面的cbroe,varchar可能是最好的选择

编辑同意更好的答案:)

答案 2 :(得分:0)

你必须在数据库内检查你的表,当你创建数据库时,你为选项卡中的每个字段选择了一个类型,例如对于整数字段,max_value是2,147,483,647所以如果你需要更多的空间你可以使用 bigint 或者如果你只使用这个数字,你也可以使用字符串。

我希望对你有用,别(和我的英语一样!)

答案 3 :(得分:0)

您应该使用BIGINT unsigned存储大于 2147483647 或小于 -2147483647 的数字,因为google plus ID是一个类似的数字116686373347867906934

阅读此部分http://dev.mysql.com/doc/refman/5.5/en/out-of-range-and-overflow.html