twilio

2012-01-09 7 views
6

से प्राप्त फ़ोन नंबर प्रारूप मैं डेटाबेस में twilio से प्राप्त एसएमएस संग्रहीत कर रहा हूं ताकि मैं बाद में उनका उपयोग कर सकूं। जब मैंने इसे सैंडबॉक्स में किया तो यह काम करता था। हालांकि जब मैंने नियमित फोन नंबर पर अपग्रेड किया था, तो उसे प्राप्त किया गया था, लेकिन +1 (या xxxxxxxxxx के लिए जहां x का मूल नंबर है, यह 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()"); 
?> 

लेकिन फिर भी, कुछ भी प्राप्त नहीं किया जा रहा है। कोई विचार है कि मैं कैसे जांच सकता हूं कि उपयोगकर्ता से एसएमएस प्राप्त हुआ है या नहीं? मैं डेटाबेस में देख सकता हूं कि यह वहां है ... लेकिन mysql इसे नहीं ढूंढ रहा है। यह पहले काम करता था, जब भेजा गया नंबर उस संख्या के समान था, लेकिन जोड़ा गया +1 के साथ यह इसे खराब कर देता है। (कोड WHERE responder = '$number' से पहले था और यह काम करता था, लेकिन अतिरिक्त चर ने इसकी मदद नहीं की थी)। क्या इस कोड में बहुत अधिक है या? क्या यह भी एक समस्या है?

अद्यतन:

धन्यवाद, यहां समारोह मैं 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 की संख्या को मानकीकृत करने का सबसे अच्छा अभ्यास है। इस तरह आपको एक ही संख्या की दो अलग-अलग प्रतियों के साथ अलग-अलग डेटा संग्रह करने की चिंता करने की आवश्यकता नहीं है - उदाहरण के लिए 925-555-1234 और (925) 5551234.

Google की libphonenumber लाइब्रेरी है जो आपके लिए संख्याएं परिवर्तित करेगी। यह जावास्क्रिप्ट, सी ++, जावा, और पायथन के साथ काम करता है।

आप 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

ठीक मैंने किया preg_replace, मैं कैसे जांच कर सकते हैं फोन नंबर कुछ? –

+0

ठीक मैं उपयोग कर रहा हूँ substr से आरंभ होता है मैं स्ट्रिंग से सबस्ट्रिंग कैसे हटा सकता हूं?(मैं 1 को हटाना चाहता हूं) –

+0

ठीक है, अब अपडेट हो रहा है –

0

आपकी आखिरी or प्रचुरता से $number6 है, यह $number7 होना चाहिए।

कि के अलावा, आप इस तरह के in के रूप में, कुछ अलग कर सकते हैं:

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

या कुछ इस तरह:

responder like '%$number%' 
+0

ठीक मैं यह है कि करने के लिए परिवर्तित कर देंगे, लेकिन यह अभी भी काम नहीं कर रहा :( –

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

में ऊपर दिए गए अपडेट में है $ एम क्या है? क्या मुझे पहले $ एम को परिभाषित करने की ज़रूरत है? –

+0

"एम" "मैच" के लिए छोटा है। मैनुअल पढ़ें। – Xeoncross

+0

हाँ, यह भी कर सकता है। यह कोड कम से कम नोटिस-चेतावनी के साथ काम करेगा। – Gustav

संबंधित मुद्दे