如果我填写表单中的每个输入,数据将成功进入数据库,但是当我没有填写输入电话时,数据将不会进入数据库并会出错:
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 :(得分:1)
创建具有not null
属性的列时要小心。当您想要将数据保存到该表时,您需要始终传递值。
表中的变化。更改telephone field to null
的默认值。因此,如果未分配任何值,则会自动将null
添加到telephone field
。
只需执行以下查询: - ALTER TABLE orders MODIFY COLUMN telephone VARCHAR(15) NULL
注意: - 在db级别更好。它将使未来的问题得到放松。谢谢。
答案 1 :(得分:0)
如果电话为null
即可,只需更改架构即可:
ALTER TABLE orders MODIFY COLUMN telephone VARCHAR(15) NULL
如果您不是,请修改表格以获得一些默认值:
ALTER TABLE orders MODIFY COLUMN telephone VARCHAR(15) NOT NULL DEFAULT '000-0-0000000'
答案 2 :(得分:0)
您的问题主要有两种可能性:
1-您更改数据库结构
a)允许NULL值
ALTER TABLE orders MODIFY COLUMN telephone VARCHAR(50) NULL;
b)通过设置默认值(如空字符串)
ALTER TABLE orders MODIFY COLUMN telephone VARCHAR(50) NOT NULL DEFAULT '';
2-将空电话号码写为空字符串
$mhbt->bindParam(3, (isset($_POST["telephone"]) ? $_POST["telephone"] : ''));
如果您可以编辑数据库结构,我认为您应该选择选项1.如果您必须控制数据库结构并且必须发送空电话号码,请使用选项2.