O valor do PHP não excede 127
Pergunta
Aqui está parte do código no meu formulário:
<br><input type="checkbox" checked="yes" name="country[]" value="1" />Asia/Pacific Region
<br><input type="checkbox" checked="yes" name="country[]" value="2" />Europe
<br><input type="checkbox" checked="yes" name="country[]" value="3" />Andorra
...
<br><input type="checkbox" checked="yes" name="country[]" value="250" />Jersey
<br><input type="checkbox" checked="yes" name="country[]" value="251" />Saint Barthelemy
<br><input type="checkbox" checked="yes" name="country[]" value="252" />Saint Martin
E este é o meu código PHP:
$country=$_POST['country'];
...
foreach ($country as $country) {
$sql="INSERT INTO sites_countries (siteID, country) VALUES ('$id', '$country')";
# execute SQL command
if (!mysql_query($sql,$con)) {
die('Error: ' . mysql_error());
}
}
Mas olhei para o meu banco de dados e parece chegar apenas a 127, então $ country é sempre 127
Solução
Se o campo "país" for definido como um tinyint assinado, o valor máximo é 127.
Vejo http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html
Editar: Mesmo que o seu servidor MySQL permita inserir dados que estão fora de alcance, você pode obter informações sobre o truncamento, por exemplo, com
SHOW WARNINGS
o que resultaria em algo como"Level";"Code";"Message" "Warning";"1264";"Out of range value for column 'i' at row 1"Você também pode colocar o servidor no modo rigoroso e obter um erro se algum dado estiver fora de alcance.
Vejo http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html
Outras dicas
Verifique o tipo de coluna de dados do seu país. Se esta coluna for TinyInt, verifique se não é "não assinada".
Tinyint assinado está restringido a -127/127
Precisamos ver seus estatutos SQL DDL para poder resolver este. A causa mais provável é que você tenha um tipo de dados com um intervalo muito pequeno no seu banco de dados para poder lidar com números maiores que 127.
Execute a seguinte declaração:
SHOW CREATE TABLE sites_countries;
Publique os resultados aqui.