2012-01-09 11 views
6

twilioから受け取ったSMSをデータベースに保存しているので、後で使用することができます。私がサンドボックスでこれをしたとき、それはうまくいった。しかし、通常の電話番号にアップグレードしたときに受信した番号は+1になります(またはxが元の番号であるxxxxxxxxxxの場合、1xxxxxxxxxx +のようになります)twilioから電話番号の形式を受け取った

したがって、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()"); 
?> 

まだ、何も受信されていません。任意のアイデアをどのように私はSMSがユーザーから受信されているかどうかを確認することができますか?私はそれがそこにあることをデータベースで見ることができます...しかし、mysqlはそれを見つけることはありません。送信された数字が受け取った数字と同じであったときに以前はうまくいったが、+1を加えてそれをスクリューアップした。 (以前のコードはWHERE responder = '$number'だったが、それはうまくいったが、追加の変数が役に立たなかった)。 このコードのORが多すぎますか?それも問題ですか?

UPDATE:

おかげで、ここで私はそれをデータベースに保存する前に、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); 

答えて

6

Twilioをしている、E.164と呼ばれる形式で数値を返します。国際的に認められている電話番号フォーマットの標準です。 一般に、番号をデータベースに保存する前にE164に番号を標準化することをお勧めします。そうすれば、同じ番号の2つの異なるコピー、たとえば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. 

私はそれが役に立てば幸い - 私を聞かせてくださいあなたはより多くの質問があるかどうかを知る。

ケビン

+0

大丈夫Iやった電話番号は何か? –

+0

私が使用しているOKのsubstrで始まる場合、私は確認することができますどのようにpreg_replace、文字列から部分文字列を削除するには?(私は1を削除したい) –

+0

okこれを今すぐ更新しました –

0

あなたの最後のorが重複$number6であるが、 $number7である必要があります。

responder in ('$number', '$number1', '$number2', '$number3', '$number4', '$number5', '$number6', '$number7') 

またはこのような何か:それはさておき

、あなたは、このようなinなど、いくつかの異なるもの、行うことができます

responder like '%$number%' 
+0

私はそれにそれを変更しますが、それはまだ動作していない:( –

0

正規表現を使用してください。 OK

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()"); 
+0

$ mとは何ですか?前に$ mを定義する必要はありますか? –

+0

"m"は "match"の略です。マニュアルを読んでください。 – Xeoncross

+0

ええ、そうするかもしれない。このコードは、少なくとも注意警告で動作します。 – Gustav

関連する問題