Вставка целых чисел в SQL с использованием PHP / phpmyadmin - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь сохранить '$ phone' как в моей базе данных SQL, однако, если я установил тип COLUMN как 'INT' в phpmyadmin, данные не будут введены. как только я изменю тип COULMN на 'VARCHAR', данные могут быть переданы

в form.php:

<fieldset>
   <input placeholder="Your Phone Number" type="text" name="phone" value="<?= $phone ?>" tabindex="4">
   <span class="error"><?= $phone_error ?></span>
</fieldset>

$ телефон объявлен в formprocess.php:

$fname_error = $lname_error = $email_error = $phone_error = $job_error = $nameauth_error = $privacy_error = $decline_error = "";
$fname = $lname = $email = $phone = $message = $jobtitle = $nameauth = $success = $privacy = "";

if (empty($_POST["phone"])) {
$phone_error = "Phone is required";
  } else {
 $phone = test_input($_POST["phone"]);
 // check if e-mail address is well-formed
  if (!preg_match("/^(\d[\s-]?)?[\(\[\s-]{0,2}?\d{3}[\)\]\s-]{0,2}?\d{3} 
  [\s-]?\d{4}$/i",$phone)) {
  $phone_error = "Invalid phone number"; 
  }
 }`

if ($privacy == 'agree') {

if ($fname_error == '' and $lname_error == '' and $email_error == '' and $phone_error == '' and $privacy_error == '' and $nameauth_error == '' and $job_error == '') 
    {   
        $sql = "INSERT INTO data (phoneNo) VALUES ('$phone');";
        mysqli_query($con, $sql);
        $success = "Enjoy your game!!";
        $fname = $lname = $email = $phone = $message = $jobtitle = $nameauth = "";
    }   

} else if ($privacy == '') {
    $privacy_error = "Please Accept or Decline Our Policy";
} else if ($privacy == 'disagree') {
    $decline_error = "Please Accept Our Privacy Policy to Continue";
}   

}  

этот код прекрасно работает, если тип данных столбца в phpmyadmin varchar, но прерывается, если я использую INT

Это связано с тем, что я инициализирую переменную as = "", что делает ее varchar?

Должен ли я инициализировать мои значения INT как = 0;

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Вы должны разыграть его, чтобы использовать его как int.

$phone = (int) $phone.

Кроме того, телефонные номера всегда являются строковыми, так как они могут иметь «+» или начинаться с «0».

0 голосов
/ 31 августа 2018

Привет всем, что мне удалось выяснить это с помощью следующего кода, теперь он работает: if ($fname_error == '' and $lname_error == '' and $email_error == '' and $phone_error == '' and $privacy_error == '' and $nameauth_error == '' and $job_error == '') { $intphone = (int)$phone; $sql = "INSERT INTO data (phoneNo) VALUES ('$intphone');"; mysqli_query($con, $sql); $success = "Enjoy your game!!"; $fname = $lname = $email = $phone = $message = $jobtitle = $nameauth = ""; Я получил значение $ phone и преобразовал его в int следующим образом: $intphone = (int)$phone;

при условии, что номер телефона: 99999999999 в моей БД я получаю: 2147483647

которое, как я считаю, является наибольшим значением, которое может показать поле INT, и поскольку фильтрация в моем номере телефона допускает только 11 номеров и не менее, я думаю, это преобразуется в значение, большее, чем может показать INT.

Я выбрал свой INT (40) в phpmyadmin, однако, похоже, что это не фактическая длина символа, а некоторая форма представления битов (о которой я буду читать!)

спасибо всем, и если есть какие-либо указатели в любом направлении, вы можете порекомендовать, я прочитаю!

спасибо всем!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...