data is changed when inserting into database

I have a form contaning Full name, email, phone when inserting values into the database the phone number was change to 2147483647 (Full name and email are ok). Here are my PHP file register.php

<h1>register form</h1>
<?php
$labels=array("full_name"=>"Full Name",
                "email"=>"Email",
                "phone"=>"Phone");
echo "<form action='check_register.php' method='POST'>";
foreach($labels as $key =>$value)
{
    echo "$value <input type='text' name='$key'/><br/>";
}
echo "<input type='submit' value='submit'/>";
echo "</form>";
?>

check_register.php

<?php
$labels=array("full_name"=>"Full Name",
                "email"=>"Email",
                "phone"=>"Phone");
foreach($_POST as $key =>$value)
{
    if(empty($value))
    {
        $empty_value[]=$key;
    }
    elseif($key=="full_name")
    {
        if(!preg_match("/^[A-Za-z '-]{2,50}$/",$value))
        {
            $invalid_value[]=$key;
        }
    }
    elseif($key=="email")
    {
        if(!preg_match("/^[A-Za-z0-9]{5,20}+(@)[A-Za-z0-9]{5,20}(\.com)$/",$value))
        {
            $invalid_value[]=$key;
        }
    }
    elseif($key=="phone")
    {   
        if(!preg_match("/^(\(\d+\)|\d+\-)?\d{10,20}$/",$value))
        {
            $invalid_value[]=$key;
        }
    }
}

if(@sizeof($empty_value)>0 or @sizeof($invalid_value)>0)
{
    if(@sizeof($empty_value)>0)
    {
        echo "input ";
        foreach($empty_value as $key) //loop empty value
        {
            echo " $labels[$key] ";
        }
    }
    if(@sizeof($invalid_value)>0)
    {
        echo "<br/>invalid data ";
        foreach($invalid_value as $key) //loop invalid_value
        {
            echo " $labels[$key]    ";
        }
    }
    echo "<form action='$_SERVER[PHP_SELF]' method='POST'>";
    foreach($labels as $key =>$value)
    {
        echo "$value <input type='text' name='$key'/><br/>";
    }
    echo "<input type='submit' value='submit'/>";
    echo "</form>";
    }
else
    {
    $user='root';
    $host='localhost';
    $password='root';
    $dbname='pet';
    $connect=mysqli_connect($host,$user,$password,$dbname) or die("can't connect to server");
        foreach($labels as $key =>$value)
        {
            $good_data[$key]=strip_tags(trim($_POST[$key]));
                if($key=="phone")
                {
                    $good_data[$key]=preg_replace("/[)( .-]/","",$good_data[$key]);
                }
            $good_data[$key]=mysqli_real_escape_string($connect,$good_data[$key]);
        }
        $query="INSERT INTO register ("; 
        foreach($good_data as $key =>$value)
        {
            $query.="$key,"; 
        }
        $query.= ") VALUES (";      
        $query=preg_replace("/,\)/",")",$query);
        foreach($good_data as $key =>$value)   
        {
            $query.="'$value',";
        }
        $query.=")";
        $query=preg_replace("/,\)/",")",$query);
        $query=preg_replace("/(\(\d+\)|\d+\-)/",")",$query);

        $result=mysqli_query($connect,$query) or die ("can't execute query.".mysqli_error($connect));
        echo "$query";
        echo "<h4>member inserted $query </h4>";
    }



?>

Upvotes: 0

Views: 54

Answers (1)

Andy
Andy

Reputation: 50600

Your phone number is stored as an integer and you are storing a number that is larger than an integer field.

Your options are to alter the table to make this field a bigint or a varchar.

Upvotes: 1

Related Questions