#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;
}