Проверка даты рождения с использованием данных из вызова API

#php #rest #twilio-studio

Вопрос:

Я добавляю проверку даты рождения в свой поток Twilio. Формат-мм/дд/гггг. Таким образом, пользователь должен ввести 01021999 для Даты рождения: 01-02-1999.

Я передаю входные данные в качестве параметра в свой скрипт проверки (PHP) на своем VPS через и http-запрос. Проблема в том, что если я вручную установлю переменную $dob в своем сценарии, она будет работать, но если я получу эту информацию из twilio, возникнет проблема, и http-запрос отправит ошибку.

Я знаю, что php обрабатывает числа, начинающиеся с нулей, по-разному, и вы должны передавать их в виде строк. Попытался использовать strval() для переменной dob, чтобы иметь возможность использовать входные данные, но не повезло.

Работает:

 $account_number = 1234;
$dob = "01021999";
$dob_length = strlen($dob);
if ($dob_length = 8) {
        echo $dob_month = substr($dob, 0, 2);
        echo $dob_day = substr($dob, 2,2);
        echo $dob_year = substr($dob, 4, 4);
        echo $dob_full = $dob_month . "-" . $dob_day . "-" . $dob_year;
        $sql1 = "SELECT * FROM accounts WHERE Acct_Nbr = '".$account_number."' AND Guar_DOB LIKE '%".$dob_full."%'  ";
        $rows = getRows($sql1);
 

Не работает (с или без преобразования $dob в строку с помощью strval() :

 require_once('logs.php');
require_once('db.php');
require_once('rest.php');

$data = $_REQUEST;
start_log();
$filename = basename(__FILE__);
echo "<pre>".print_r($data,true)."</pre>";
end_log();

header("Content-Type: application/json; charset=UTF-8");
$rfields = explode(",","client_id,account_number,dob");

foreach($rfields as $rf){
        if(!isset($data[$rf])){
                $message = $rf." is required.";
                $status = "error";
                echo json_encode(compact('status','message')); die();
        }
}

extract($data);
$dob_str = strval($dob);
$dob_length = strlen($dob_string);
if ($dob_length = 8) {
        echo $dob_month = substr($dob_str, 0, 2);
        echo $dob_day = substr($dob_str, 2,2);
        echo $dob_year = substr($dob_str, 4, 4);
        echo $dob_full = $dob_month . "-" . $dob_day . "-" . $dob_year;
        $sql1 = "SELECT * FROM accounts WHERE Acct_Nbr = '".$account_number."' AND Guar_DOB LIKE '%".$dob_full."%'  ";
        $rows = getRows($sql1);

}
 

Комментарии:

1. Вы уже пробовали использовать углерод для управления датами? carbon.nesbot.com/docs/#api-instantiation

2. $orgDate = «2021-09-24»; $newDate = дата(«d-m-Y», strtotime($orgDate)); Теперь формат даты: d-m-Y вот все форматы дат

3. @WILLIAMDAZA кажется полезным инструментом. Я не собираюсь изменять формат, просто захватывая пользовательский ввод через DTMF, добавляя» -«, чтобы он больше походил на дату, и используя эту дату для поиска в базе данных, чтобы узнать, совпадает ли она с записью.

Ответ №1:

Попробуйте это

         $dob = '01021999';
        $account_number = 'whatever';
        if (validateDate((string)$dob, 'dmY')) {
            $date = DateTime::createFromFormat('dmY', $dob);
            $final_date = $date->format('Y-m-d');
            $sql1 = "SELECT * FROM accounts WHERE Acct_Nbr = '" . $account_number . "' AND Guar_DOB LIKE '%" . $final_date . "%'  ";
            $rows = getRows($sql1);
        }


        function validateDate($date, $format = 'Y-m-d H:i:s')
        {
            $d = DateTime::createFromFormat($format, $date);
            return $d amp;amp; $d->format($format) == $date;
        }