2015-06-14 43 views
1

如果我填寫表單中的每個輸入,數據將成功進入數據庫,但是當我沒有填充輸入電話時,數據將不會進入數據庫,會給出錯誤:MySQL - PDO - 允許如果POSTS爲NULL

error sqlstate 23000 integrity constraint violation 1048 column 'telephone' cannot be null

因此,這意味着,如果該字段的電話是空的,我會點擊提交數據將不會進入數據庫。

所以我的問題是:我如何允許,如果textinput'電話'沒有填充,數據仍然會進入數據庫?

這是.PHP

<?php 


include("dbconfig.php"); 

if(isset($_POST['name'])) 
{ 

try { 


    $date= date('d.m.y'); 
    $tijd= date("H:i A"); 
    $ip = $_SERVER['REMOTE_ADDR']; 

    $conn = new PDO('mysql:host=localhost;dbname=*****', $username, $password); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 


    $mhbt = $conn->prepare("INSERT INTO orders (name, email, telephone, city) VALUES (?, ?, ?, ?)"); 
    $mhbt->bindParam(1, $_POST["name"]); 
    $mhbt->bindParam(2, $_POST["email"]); 
    $mhbt->bindParam(3, $_POST["telephone"]); 
    $mhbt->bindParam(4, $_POST["city"]); 


    $mhbt->bindParam(5, $date); 
    $mhbt->bindParam(6, $tijd); 
    $mhbt->bindParam(7, $ip); 

    $mhbt->execute(); 

} catch(PDOException $e) { 
    echo 'ERROR: ' . $e->getMessage(); 
} 

} 



?> 
+0

更改表。將'telephone field'的默認值更改爲'null'。所以如果沒有賦值,那麼自動將null添加到'telephone'字段。嘗試並告訴發生了什麼。謝謝 –

回答

1

要小心,當你正在創建列not null屬性。當您想要將數據保存到該表格時,您總是需要傳遞值。

表中的變化。更改默認值telephone field to null。所以如果沒有賦值,則自動將null添加到telephone field

只是做一個查詢這樣的: - ALTER TABLE orders MODIFY COLUMN telephone VARCHAR(15) NULL

注: - 這將是更善於分貝水平做。它會放鬆未來的問題。謝謝。

0

如果你是用電話是null OK,只是更改架構,使它:

ALTER TABLE orders MODIFY COLUMN telephone VARCHAR(15) NULL 

如果你不是,修改表有一些默認值:

ALTER TABLE orders MODIFY COLUMN telephone VARCHAR(15) NOT NULL DEFAULT '000-0-0000000' 
0

主要有兩種可能性,您的問題:

1-您a)由設定的默認值允許空值

ALTER TABLE orders MODIFY COLUMN telephone VARCHAR(50) NULL; 

二)改變數據庫結構

(如空串)

ALTER TABLE orders MODIFY COLUMN telephone VARCHAR(50) NOT NULL DEFAULT ''; 

2 - 寫空電話號碼爲空字符串

$mhbt->bindParam(3, (isset($_POST["telephone"]) ? $_POST["telephone"] : '')); 

如果您可以修改數據庫結構,我想你應該選擇選項1.如果您有對數據庫結構控制和必須發送空電話號碼,使用選項2.