【发布时间】:2020-04-19 17:07:31
【问题描述】:
如果其中一个字段为空,我不明白将 html 表单字段传递给 mysql 数据库的正确方法是什么。
我有这个 html:
<form name="formName" method="POST" action="" onsubmit="registra();">
<label for="datetime1">datetime one</label>
<input type="datetime-local" id="datetime1" name="datetime1">
<label for="datetime2">datetime two</label>
<input type="datetime-local" id="datetime2" name="datetime2">
<button type="submit">Salva</button>
</form>
<script>
function registra() {
var datetime1 = document.forms['formName']['datetime1'].value;
datetime1 = new Date(datetime1).toISOString().slice(0, 19).replace('T', ' ');
var datetime2 = document.forms['formName']['datetime2'].value;
datetime2 = new Date(datetime1).toISOString().slice(0, 19).replace('T', ' ');
jQuery.ajax({
type: "POST",
url: "./functions.php",
data: {
action: 'registraForm',
id: <?php echo $id; ?>,
datetime1: datetime1,
datetime2: datetime2
}
}).done(function( response ) {
alert( response );
});
}
</script>
还有这个 php:
<?php
/* AJAX */
if(isset($_POST['action']) && !empty($_POST['action'])) {
$action = $_POST['action'];
switch($action) {
case 'registraForm' : registra_form();break;
}
}
function registra_form() {
$dbhost = "localhost";
$dbuser = "user";
$dbpass = "pass";
$db = "db";
$conn = new mysqli($dbhost, $dbuser, $dbpass,$db) or die("Connect failed: %s\n". $conn -> error);
$id = $_POST['id'];
$datetime1 = ($_POST['datetime1']?$_POST['datetime1']:NULL);
$datetime2 = ($_POST['datetime2']?$_POST['datetime2']:NULL);
if ( /* update mysql row */ ) {
$sql = "UPDATE table SET datetime1='$datetime1', datetime2 = '$datetime2', WHERE id=$id";
} else {
$sql = "INSERT INTO table (id, datetime1, datetime2) VALUES ($id, '$datetime1', '$datetime2')";
}
if ($conn->query($sql) === TRUE) {
echo 'done!';
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
die();
$conn -> close();
}
在数据库中,datetime1 和 datetime2 都设置为时间戳类型,默认为 null。
如果 datetime1 和 datetime2 都填写,则注册成功。如果没有填写表单的两个字段之一,我会收到 sql 语法错误。
类似error: UPDATE table SET datetime1='2020-04-17 11:06:00', datetime2='' WHERE id=5 Incorrect datetime value:'' for column db.table.datetime2 at row 2
我认为这是$datetime2 = ($_POST['datetime2']?$_POST['datetime2']:NULL);的问题,但我不知道如何解决。
谢谢 福斯科
【问题讨论】:
-
您正在尝试使用三元运算符,但没有以正确的方式使用它。查阅手册php.net/manual/en/language.operators.comparison.php
-
嗯,错误消息告诉了所有人......它清楚地表明您没有为您的日期时间字段提供正确的值。显然 NULL 是无效的,因此是错误的。那么你的表中 datetime1 和 datetime2 的架构设置是什么?
-
对不起@TimBrownlaw,我编辑了这个问题。 datetime1 和 datetime2 都设置为时间戳类型,默认为 null。
-
@FunkFortyNiner 我刚看到你看到的……有时需要一段时间……
-
只是想知道当您直接在 phpmyadmin 中尝试以下操作或您使用的任何内容时得到了什么结果... 1. SET datetime1='2020-04-17 11:06:00', datetime2 ='NULL' WHERE id=5 和 2。SET datetime1='2020-04-17 11:06:00', datetime2=NULL WHERE id=5。 1. 引号中有 NULL 而 2 没有。您可以填写其余的 SQL 语句以使其正确。