我将从twilio收到的短信存储在数据库中,以便稍后使用。当我在沙箱中这样做时,它起作用了。但是,当我升级到普通电话号码时,收到的号码与发送的号码相同,但+1(或xxxxxxxxxx,其中x是原始号码,看起来更像是1xxxxxxxxxx +)
因此我将mysql_query更改为以下内容:但它仍然无效。如何识别这是原始电话号码?
<?php
$starttime = time();
$number = $_POST['number'];
$number1 = "1" . $number;
$number2 = $number . "1";
$number3 = "+1" . $number;
$number4 = $number . "+1";
$number5 = "+" . $number . "1";
$number6 = "1" . $number . "+";
$number7 = $number."1+";
$received = mysql_query("SELECT * FROM sms_received
WHERE (responder='$number' OR responder='$number1'
OR responder='$number2' OR responder='$number3'
OR responder='$number4' OR responder='$number5'
OR responder='$number6' OR responder='$number6')
AND (body='y' OR body='yes' OR body='Y' OR body='Yes' OR 'yea' OR 'Yea')
AND timestamp BETWEEN ".date('Y-m-d H:i:s', strtotime($starttime))." AND NOW()");
?>
但是,仍然没有收到任何东西。有什么想法我可以检查是否已收到用户的短信?我可以在数据库中看到它在那里......但是mysql没有找到它。它之前有效,当发送的数字与收到的数字相同时,但添加了+1它会将其搞砸。 (之前的代码只有WHERE responder = '$number'
并且它有效,但其他变量没有帮助它)。
这段代码有太多OR吗?这甚至是个问题吗?
更新:
谢谢,这是我用来将数字删除到xxxxxxxxxx格式的函数,然后将其保存到数据库中:
function checkPhone($responder){
$items = Array('/\ /', '/\+/', '/\-/', '/\./', '/\,/', '/\(/', '/\)/', '/[a-zA-Z]/');
$clean = preg_replace($items, '', $responder);
if (substr($clean, 0, 1) == "1") {
return substr($clean, 1, 10);
}
else {
return substr($clean, 0, 10);
}
}
$number = checkPhone($responder);
答案 0 :(得分:6)
Twilio以E.164格式返回数字,这是国际公认的电话号码格式标准。
通常,在将数字存储到数据库之前,最好将数字标准化为E164。这样您就不必担心使用相同数字的两个不同副本存储不同的数据 - 例如925-555-1234和(925)5551234。
Google有一个libphonenumber库,可以为您转换数字。它适用于Javascript,C ++,Java和Python。
如果您使用的是PHP,并且只使用美国/加拿大号码,您可以编写一个功能来规范化电话号码,具体如下:
- Strip out all non number characters from the phone number
(parentheses, dashes, spaces) - you can use a function like preg_replace
- if the phone number begins with a +1, do nothing
- if the phone number begins with a 1, add a +
- else, add a +1 to the beginning of the number.
- finally, store it in the database.
我希望有所帮助 - 如果您有更多问题,请告诉我。
凯文
答案 1 :(得分:0)
您的上一个or
冗余$number6
,应为$number7
。
除此之外,你可以做一些不同的事情,比如in
:
responder in ('$number', '$number1', '$number2', '$number3', '$number4', '$number5', '$number6', '$number7')
或类似的东西:
responder like '%$number%'
答案 2 :(得分:0)
使用正则表达式。
preg_match_all("{[0-9]+}",$number,$m);
$norm_num="+".implode($m[0]);
if(strlen($norm_num)<6)
exit('Too short!');
mysql_query("SELECT * FROM sms_received
WHERE responder='%$norm_num%'
AND body IN ('y','yes','Y','Yes','yea','Yea')
AND timestamp BETWEEN ".date('Y-m-d H:i:s', strtotime($starttime))." AND NOW()");