PHP MySQL如果日期和时间不可用,则添加到警报消息
我是PHP的新手,也是一名新学生,所以如果我犯了一些经验丰富的人很明显会犯的错误,我会提前请求大家原谅我 我正在编写一个页面提交表单,该表单连接到mysql数据库,以检查现有值,如果该值不存在,则记录datetime选择器的字符串值,并在任何时候有人按下submit,并且在表单验证被接受后,向表中添加一个id号以生成唯一值。如果记录不存在,则提交工作正常 但是,只要记录已经存在,整个页面就会变为空白,而不是在错误消息中显示时间不可用 起初,我有一个按钮,可以检查mysql表中是否存在记录,但后来我决定在完成表单验证时尝试包含mysql表的日期验证检查会更有效,这就是我遇到问题的地方,当然,页面会断开,什么也不显示 如果有人能指引我,我将不胜感激 似乎我无法添加更多的代码,但我会添加错误的代码 我确实需要初始化$error=;还有$DateTime和$id在脚本的顶部,我把它放在下面,但忘了把它放在上面,这导致了我的问题PHP MySQL如果日期和时间不可用,则添加到警报消息,php,mysql,Php,Mysql,我是PHP的新手,也是一名新学生,所以如果我犯了一些经验丰富的人很明显会犯的错误,我会提前请求大家原谅我 我正在编写一个页面提交表单,该表单连接到mysql数据库,以检查现有值,如果该值不存在,则记录datetime选择器的字符串值,并在任何时候有人按下submit,并且在表单验证被接受后,向表中添加一个id号以生成唯一值。如果记录不存在,则提交工作正常 但是,只要记录已经存在,整个页面就会变为空白,而不是在错误消息中显示时间不可用 起初,我有一个按钮,可以检查mysql表中是否存在记录,但后来
<?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);