如何在表单中显示javascript错误


How to display javascript error in form?

我有一个网站,你可以上传新闻报道。上传新闻后,您可以对其进行编辑。问题是,当您编辑 DATE 表单时,默认情况下它会自动将其显示为"0000-00-00"。

因此,当我在日期表单上输入"blacklivesmatter"时,它应该显示一个javascript错误,指出"日期应仅以年-月-日格式输入"

以下是我认为错误的代码应该是什么样子的:

echo "<script language='javascript'> alert('Date should be entered with YEAR-MONTH-DAY format only'); window.location='editnews.php'; </script>";

以下是 PHP 页面的代码:

<?php
if(isset($_GET['id']))
{
    $id = $_GET['id'];
    $query = mysqli_query($con,"select * from news where ID = '$id'");
    $re = mysqli_fetch_array($query);
}
?>
<form method="post" action="editnews_action.php">
<h3><b><u>Title:</b><input type="text" name="title" value="<?php echo $re['Title']; ?>"/><input type="hidden" name="id" value="<?php echo $re['ID']; ?>"/></h3>
<h3><b><u>Detail:</b><input type="text" name="desc" value="<?php echo $re['story']; ?>"/></h3>
<h3><b><u>Date:</b><input type="text" name="date" value="<?php echo $re['DATE']; ?>"/></h3>
<center>
<br>
<input type="submit" value="Submit" name="submit">
</form> 

以下是操作页面:

<?php require 'connect.php'; ?>
<?php
session_start(); 
if(isset($_POST['submit'])) {
    $id = $_POST['id'];
    $title=$_POST['title'];
    $date= $_POST['date'];
    $story=$_POST['desc']; 
    $q = mysqli_query($con,"update news set Title = '$title', story = '$story', DATE = '$date' where ID = '$id'");
    if($q)
    {
        header("Location: adminside.php");
    }
}
?>

我应该把javascript错误放在哪里?

你有几个选项可以在javascript中验证日期:

1.) 如果无效,new Date("date string")将返回"无效日期"。您可以检查这一点并根据需要显示错误

function isDateValid(date) {
    var theDate = new Date(date);
    return theDate;
}

不是最好的选择。 例如,new Date(1)将返回有效日期。"无效日期"仅在输入类似 new Date('test') 的内容时才会引发

2.) 使用由 bootstrap 或 jquery 或其他库提供的日期选择器。通常,这些日期选择器已经具有日期验证,因此您不必担心。这也为用户提供了更好的选择日期的界面。

在我看来,这是最好的选择。大多数日期选择器还将具有可配置的选项,因此您可以使验证更加灵活,有些甚至具有内置的错误消息,以便该部分也将为您处理

3.) 使用正则表达式针对输入的日期运行。您可以找到许多不同的正则表达式来验证各种不同的格式。要研究的一个网站是 regexlib.com

var dateReg = /^'d{2}([./-])'d{2}'1'd{4}$/
"22-03-1981".match(dateReg) // matches
"22.03-1981".match(dateReg) // does not match
"22.03.1981".match(dateReg) // matches

这是一个不错的选择。

Javascript - 正则表达式验证日期格式

Javascript date regex DD/MM/YYYY

JavaScript中用于日期验证的正则表达式

这样简单的事情就可以工作

session_start(); 
if(isset($_POST['submit'])) {
    $id = $_POST['id'];
    $title=$_POST['title'];
    $date= $_POST['date'];
    $story=$_POST['desc']; 
if (validateDate($date)) {
        $q = mysqli_query($con,"update news set Title = '$title', story = '$story', DATE = '$date' where ID = '$id'");
        if($q)
        {
            header("Location: adminside.php");
        }
    }else{
    /*
    * show error if date not valid
    */
        echo "<script language='javascript'> alert('Date should be entered with YEAR-MONTH-DAY format only'); window.location='editnews.php'; </script>";
    }
}

/** 验证日期的功能*/ function validateDate($date, $format = 'Y-m-d') { $d = DateTime::createFromFormat($format, $date); 返回 $d &&$d->格式($format) == $date; }