【问题标题】:Submit form with multiple conditions not working提交多个条件无效的表单
【发布时间】:2017-03-28 08:16:41
【问题描述】:

情况

我有一个提交表单。使用此表格,用户可以在餐厅预订餐桌。每次提交时,都会使用wp_insert_post 函数将一些数据发送到数据库。例如user_ipdatum_nieuwe_reservering(稍后解释)。我想用它来检查是否允许用户提交新的预订(防止垃圾邮件)。我已经尝试了几件事,但它不起作用。请参阅下面的代码。

问题

我怎样才能让它工作?我做错了什么?

代码
reserving.php

<!-- CODE WHEN POST = SUBMIT, MAKE A NEW RESERVATION.
=========================================== -->
<?php
global $wpdb;
$user_ip_db = getUserIP();
$date = date("d-m-Y H:i:s");

//echo $date;

$check_user_ip = $wpdb->get_results("SELECT meta_value FROM $wpdb->postmeta WHERE meta_key = 'user_ip_reservering' AND meta_value = '$user_ip_db'");
$check_time_new = $wpdb->get_results("SELECT meta_value FROM $wpdb->postmeta WHERE meta_key = 'datum_nieuwe_reservering'");

print_r($check_time_new);


if ( isset($_POST['submit_reservering']) ) {
  if ( (empty($check_user_ip)) && $date > $check_time_new ) {
      create_reservering();
      echo "Your reservation has been send";
    } else {
    echo 'You have already reserved';
  }
}

?><!-- end CODE FOR MAKING RESERVATION-->

插件文件

//Using this function to send the current day + 1 day to the database
//with a hidden text field named `datum_nieuwe_reservering`(show below)
//and in the end check if current date >= `datum_nieuwe_reservering`
<?php
 function getDateTime(){
 date_default_timezone_set('Europe/Amsterdam');
 $next_day = time() + (1 * 24 * 60 * 60);
 $date_now = date('d-m-Y H:i:s');
 $date_tomorrow = date('d-m-Y H:i:s', $next_day);

 echo $date_tomorrow;
}
?>

datum_nieuwe_reservering 的隐藏字段

 <input type='hidden' value='<?php echo getDateTime(); ?>' name='datum_nieuwe_reservering'>

注意:提交表单只能使用if (empty($check_user_ip)) { }; 代码正常工作。所以我也很难在 if 语句中添加日期。

我希望有人能在正确的方向上帮助我!
提前致谢。

【问题讨论】:

    标签: php wordpress date if-statement


    【解决方案1】:

    你试过在条件中使用括号吗?

    if ( isset($_POST['submit_reservering']) ) {
      if  ( (empty($check_user_ip)) && ($date > $check_time_new) ) {
          create_reservering();
          echo "Your reservation has been send";
        } else {
        echo 'You have already reserved';
      }
    }
    

    【讨论】:

    • 是的,已经尝试过,但不幸的是也没有工作。感谢您的建议!
    【解决方案2】:
    if (isset($_POST['submit_reservering']) === true) {
        $reserved = false;
        if (empty($check_user_ip) === true) {
            $test = end($check_time_new);
            if(date > $test->meta_value) {
                create_reservering();
                echo "Your reservation has been send";
            } else {
                echo 'You have already reserved';
            }
        }
    }
    

    【讨论】:

    • 能否分享一下“print_r($check_time_new);”回归?
    • 好吧,您不能只将数组与带有时间戳的 stdClass 对象进行比较。首先,您应该检查您是否真的只是获取用户本身的数据。然后你可以 foreach stdClass 对象数组并检查是否至少有一条记录日期> check_new_time。发生这种情况时,您可以说“保留”
    • 您的数组中有多个日期。都是同一个用户吗?
    • 更新后的答案应该有效。我对 stdObjects 了解不多,所以你应该尝试 $test->meta_value 和 $test['meta_value']。如果这部分不起作用,请尝试使用 $date = time() strtotime($test) -> if($date > strtotime($test->meta_value))
    • 我再次更新了我的答案。现在它将只取您 check_new_time 的最后一个条目...只需使用另一条记录尝试一下,其中 end($check_time_now) 的日期在现在之前(其中 meta_value 小于 28-03-2017 16:08:23) .那么它应该可以正常工作。
    猜你喜欢
    • 2022-11-22
    • 1970-01-01
    • 2014-12-11
    • 2017-10-17
    • 1970-01-01
    • 2023-03-15
    • 2016-10-28
    • 1970-01-01
    • 2019-01-15
    相关资源
    最近更新 更多