PHP MySQL如果日期和时间不可用,则添加到警报消息

PHP MySQL如果日期和时间不可用,则添加到警报消息,php,mysql,Php,Mysql,我是PHP的新手,也是一名新学生,所以如果我犯了一些经验丰富的人很明显会犯的错误,我会提前请求大家原谅我 我正在编写一个页面提交表单,该表单连接到mysql数据库,以检查现有值,如果该值不存在,则记录datetime选择器的字符串值,并在任何时候有人按下submit,并且在表单验证被接受后,向表中添加一个id号以生成唯一值。如果记录不存在,则提交工作正常 但是,只要记录已经存在,整个页面就会变为空白,而不是在错误消息中显示时间不可用 起初,我有一个按钮,可以检查mysql表中是否存在记录,但后来

我是PHP的新手,也是一名新学生,所以如果我犯了一些经验丰富的人很明显会犯的错误,我会提前请求大家原谅我

我正在编写一个页面提交表单,该表单连接到mysql数据库,以检查现有值,如果该值不存在,则记录datetime选择器的字符串值,并在任何时候有人按下submit,并且在表单验证被接受后,向表中添加一个id号以生成唯一值。如果记录不存在,则提交工作正常

但是,只要记录已经存在,整个页面就会变为空白,而不是在错误消息中显示时间不可用

起初,我有一个按钮,可以检查mysql表中是否存在记录,但后来我决定在完成表单验证时尝试包含mysql表的日期验证检查会更有效,这就是我遇到问题的地方,当然,页面会断开,什么也不显示

如果有人能指引我,我将不胜感激

似乎我无法添加更多的代码,但我会添加错误的代码

我确实需要初始化$error=;还有$DateTime和$id在脚本的顶部,我把它放在下面,但忘了把它放在上面,这导致了我的问题

    <?php

    $userid = "1";
    $strid = strval($id);
    $DateTimeCheck = $DateTime . $strid;
    $con = new PDO("mysql:host=$host;dbname=$dbname", $user, $password);
    $con->exec("SET CHARACTER SET utf8");
    $sql = "SELECT booked FROM user_booking WHERE `booked` = :booked";
    $sqlprep = $con->prepare($sql);
    $ar_val = array(':booked' => $DateTimeCheck);

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

        if (!$_POST['name']) {
            $error = "<br/>- Please enter your name";
        }
        if (!$_POST['email']) {
            $error .= "<br/>- Please enter your email";
        }
        if (!$_POST['message']) {
            $error .= "<br/>- Please enter a message";
        }
        if (!$_POST['check']) {
            $error .= "<br/>- Please confirm you are human";
        }
        if ($sqlprep->execute($ar_val)) {
        while ($row = $sqlprep->fetch(PDO::FETCH_OBJ)) {
            $DateTimeExists = $row->booked;
        }
    }
    if (isset($DateTimeExists) && $DateTimeExists != ''){
        $error .= "<br/>- The time you have requested is unavailable";
    }

    if ($error) {
        $result = '<div class="alert alert-danger" role="alert"><strong>Whoops, there is an error</strong>. Please correct the following: ' . $error . '</div>';
        } else {
            mail("@gmail.com", "Contact message", "Name: " . $_POST['name'] . "
        Email: " . $_POST['email'] . "
        When: " . $_POST['datetime'] . "
        Message: " . $_POST['message']);
            {
                $result = '<div class="alert alert-success" role="alert">Thank you, someone will be in touch soon to confirm your appointment. </div>';

                $id = "$userid";
                $strid = strval($id);
                $DateTime = $_POST['datetime'];
                $DateTimeCheck = $DateTime . $strid;
                $strid = strval($id);
                $con = new PDO("mysql:host=$host;dbname=$dbname", $user, $password);
                $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                $sql = "INSERT INTO user_booking ( user_id, booked ) VALUES ( :id, :booked )";
                $q = $con->prepare($sql);
                $q->execute(array(':booked' => $DateTime . $strid,
                    ':id' => $id));
                $con = null;
            }
        }
    }
?>

这是表单的标记

                <form method="post" role="form">
                    <div class="form-group">
                        <input type="text" name="name" class="form-control" placeholder="Your name"
                               value="<?php echo $_POST['name']; ?>">
                    </div>
                    <div class="form-group">
                        <input type="email" name="email" class="form-control" placeholder="Your email"
                               value="<?php echo $_POST['email']; ?>">
                    </div>

                    <div class="form-group" align="left">
                        <label class="control-label">Date/Time</label>
                        <div class='input-group date' id='datetimepicker1'>
                            <input type='text' name="datetime" class="form-control" placeholder="desired time"
                                   value="<?php echo $_POST['datetime']; ?>">
                            <span class="input-group-addon">
                     <span class="glyphicon glyphicon-calendar"></span>
                     </span>
                        </div>
                    </div>
                    <div class="form-group">
                            <textarea name="message" rows="5" class="form-control"
                                      placeholder="message..."><?php echo $_POST['message']; ?></textarea>
                    </div>
                    <div class="checkbox" align="left">
                        <label class="readable" align="left">
                            <input type="checkbox" name="check"> I am human
                        </label>
                    </div>
                    <div align="left">
                        <input type="submit" name="submit" class="btn btn-success" value="Book Appointment!"/>
                    </div>
                </form>
如果您正在使用。=您需要先初始化变量,然后。=才能处理变量

您试图在此IF块中执行此操作

if (!$_POST['name']) {
    $error = "<br/>- Please enter your name";
}
现在,该变量将在以后的代码中进行测试

如果这确实是这里的问题,您应该得到错误报告。如果您没有看到任何问题,那么在测试时尝试将这些代码行添加到任何问题脚本中


小点查询1。如果它只返回一行,则在$row=$sqlprep->fetchPDO::FETCH_OBJ时不需要循环{.如果它返回多行,您将失去对$row->booked的最后一个引用,因为您正在将其分配给标量变量。如何从php获得错误响应?$error.=-请确认您是人类;您好@Dilek,我正在使用复选框验证“我是人类”。@RiggsFolly谢谢,我将更新它。我只需要ne行。可能有一些提示:-$error可能未定义,并将显示一个错误/空白页-检查电子邮件地址是否有效,以便邮件功能不会崩溃-检查日期是否有效,如果我在获取日期后花一分钟时间怎么办?-清理所有变量以保存电子邮件或html页面中的输出-检查h的功能uman不起作用,也许你可以添加一个name=firstname的输入字段,并用css隐藏它,机器人会填写这个字段,但人类不会,因为他看不见。在服务器端检查post firstname是否为空。我不确定,如果需要,你能检查他在顶部的第一个查询并执行吗。我已经添加了这个字段并初始化了变量,谢谢。@SteveInCA将此$ar\u val=array':booked'=>$DateTimeCheck;更改为$ar\u val=$sqlprep->executearray':booked'=>$DateTimeCheck;因为您使用的是pdo,所以如果没有执行错误,它将不会给出结果?@Dilek如果$sqlprep->execute$ar\val,他将在这一行的脚本下执行查询{
$error = '';
if (isset($_POST['datetime'])){

    // So now you can change this test to use .=
    if (!$_POST['name']) {
        $error .= "<br/>- Please enter your name";
    }
ini_set('display_errors', 1); 
ini_set('log_errors',1); 
error_reporting(E_ALL); 
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);