簡體   English   中英

在php中處理數字輸入失敗

[英]Processing numeric input in php fails

我有一個輸入框,告訴我的用戶將其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”,但沒有任何代碼!

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

Type: INT
Maximum Value: 2147483647

顯然,您將值存儲為整數,並且當數字太大時,會溢出並最終得到最大值。

無論如何,您都不應該將這些值存儲為整數,因為它們不是數字-它們沒有數字含義,它們只是一個標識符。 請改用(VAR)CHAR。

我認為您的數據庫字段不正確。 將其更改為bigint或float(或varchar ...)。

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

同意cbroe的觀點,varchar可能是最佳選擇

編輯同意更好的答案:)

您必須在數據庫中檢入表,創建數據庫時,必須為選項卡中的每個字段選擇一種類型,例如對於整數字段,max_value為2,147,483,647,因此,如果需要更多空間,可以使用bigint或使用此數字僅像數字序列一樣,您也可以使用字符串。

我希望對您有用,別頭(對不起我的英語!)

您應使用BIGINT unsigned存儲大於2147483647或小於-2147483647的數字,因為google plus ID是類似於116686373347867906934的數字

閱讀本部分http://dev.mysql.com/doc/refman/5.5/en/out-of-range-and-overflow.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM