2013-12-20 1 views
1

나는 MySQL 데이터베이스에 우편 번호를 varchar(10)으로 저장하고 있습니다. 어떤 이유로 하나의 테이블에 저장하는 것이 다른 테이블처럼 작동하지 않습니다. 필드 간의 유일한 차이는 varchar(10) Nullable이고 하나는 varchar(10)입니다. Nullable 열은 앞에 0이없는 우편 번호를 저장하므로 '05415'5415이됩니다. 이것은 다른 테이블에서도 잘 작동합니다. 나는 그들이 같은 페이지에 저장되어 있다고 생각하지만 문제를 찾을 수없는 것 같습니다. 나는 PHP에별로 좋지 않으므로 여기에 도움을 주시면 감사하겠습니다.PHP Zip Code Losing Leading Zero

이것은 사이트에 등록하는 기능입니다. db의 등록 테이블은 우편 번호를 선행 0으로 저장하므로이 기능이 작동한다고 가정합니다.

$Zip  = strip_tags(trim($_POST['MembersZip'])); 
    if (strlen($Zip = trim($Zip)) == 0) { 
       $isError = true; 
       print "<script>$('#MembersZip').addClass('error');</script>"; 
       print '<div class="errors">Please enter zip/postal code</div>'; 
      } 
    if (strlen($Zip = trim($Zip)) < 5) { 
        $isError = true; 
        print "<script>$('#MembersZip').addClass('error');</script>"; 
        print '<div class="errors">Zip code must be at least 5 digits</div>'; 
       } 
    $sql = "INSERT INTO tbl_ecommerce_addresses ( 
        ead_postal_code 
       ) VALUES (
        '" . addslashes($Zip) . "' 
       )"; 

주문 프로세스는 다음과 같습니다. 이것은 선행 제로가 삽입되기 전에 삭제되는 테이블입니다.

 $fieldName = "BillingZip"; 
     $fieldValue = strip_tags($_POST[$fieldName]); 
     if (!$fieldValue || strlen($fieldValue = trim($fieldValue)) == 0) { 
      $isError = true; 
      print "<script>$('#{$fieldName}').addClass('error');</script>"; 
      print '<div class="errors">Please enter billing zip/postal code</div>'; 
     } else { 
      $this->fields[$fieldName] = $fieldValue; 
      $this->record->eod_billing_postal_code = $fieldValue; 
     } 
    $Zip = $this->record->eod_billing_postal_code; 
    if (strlen($Zip = trim($Zip)) < 5) { 
       $isError = true; 
       print "<script>$('#BillingZip').addClass('error');</script>"; 
       print '<div class="errors">Billing Zip Code must be at least 5 digits</div>'; 
      } 
It looks like this line 
$newId = $this->record->insert(); 
is doing the insert, but when I do a var_dump of $this->record, the zip code still shows the leading 0. The only other thing I can think of is that the payment gateway is changing it somehow. 


     $paymentType  = urlencode("Authorization"); // 'Sale' or 'Authorization' 
     $firstName   = urlencode($this->fields["BillingFirst"]); 
     $lastName   = urlencode($this->fields["BillingLast"]); 
     $creditCardType  = urlencode($this->fields["CardType"]); 
     $creditCardNumber = urlencode($this->fields["CardNumber"]); 
     $padDateMonth  = urlencode(str_pad($this->fields["CardMonth"], 2, '0', STR_PAD_LEFT)); 
     $expDateYear  = urlencode($this->fields["CardYear"]); 
     $cvv2Number   = urlencode($this->fields["CardCode"]); 
     $address1   = trim(urlencode($this->fields["BillingAddress"])); 
     $address2   = urlencode($this->fields["BillingAddress2"]); 
     $city    = urlencode($this->fields["BillingCity"]); 
     $state    = urlencode($this->fields["BillingState"]); 
     $zip    = urlencode($this->fields["BillingZip"]); 
     $country   = urlencode($CountryCode); // US or other valid country code 
     $amount    = urlencode($this->fields["PurchasedTotal"]); 
     $currencyID   = urlencode($this->siteConfig->cy_code); 
     $ipAddress   = $main->getIP(); 
     $invoice   = substr($this->fields["CardNumber"],-4,4) . substr($this->fields["BillingZip"],0,4) . substr($this->fields["PurchasedTotal"],0,2); 

     $nvpStr = "&PAYMENTACTION=$paymentType&IPADDRESS=$ipAddress&AMT=$amount&CREDITCARDTYPE=$creditCardType&ACCT=$creditCardNumber". 
     "&EXPDATE=$padDateMonth$expDateYear&CVV2=$cvv2Number&INVNUM=$invoice&FIRSTNAME=$firstName&LASTNAME=$lastName". 
     "&STREET=$address1&CITY=$city&STATE=$state&ZIP=$zip&COUNTRYCODE=$country&CURRENCYCODE=USD"; 

는 우편 번호가 올바르게, 나는이와 코드를 업데이트 표시에 도착하고, 0이 나타났다 : 나는 추측이 있다면

$zip = str_pad($order->eod_shipping_postal_code, 5, '0', STR_PAD_LEFT); 
+0

'var_dump ($ this-> fields)'할 수 있습니까? – sjagr

+0

'[ "ShippingZip"] => 문자열 (5) "05154"'옳은 것 같습니다. hmmm – jlg

+0

@sjagr 또한'var_dump ($ this-> record)'를 추가했지만 여전히 우편 번호를 보여줍니다. 나는이 줄'$ newId = $ this-> record-> insert();'가 데이터를 삽입하고 있다고 생각했지만 우편 번호가 덤프 될 때 문제가 없다면 다른 문제가 될 수있는 곳은 무엇입니까? – jlg

답변

4

내가 길을 따라 어딘가에 가정 것이다 당신의 변수가 정수로 저장되고, 그럴 경우 확실히 '0'을 잃을 것입니다. 살펴볼 몇 가지 옵션은 변수가 저장되는 위치를 찾고 문자열로 저장되는지 확인하는 것입니다. 내가 권합니다 비록 당신이이 저장되는 위치 찾을 것을 http://www.php.net/str_pad

(:

str_pad($zip, 5, '0', STR_PAD_LEFT) 

이를 참조하십시오

또는

, 당신은 항상이 사용하여 PHP에서 5 개 개의 번호를 가지고 있는지 확인 할 수 있습니다 당신이 그것을 찾을 수 없다면, 이것은 작동하지 않을 것입니다.)

+0

나는 문제를 찾기 위해 어디에서나 찾고있었습니다. 내 코드를 제공 한 코드로 바꾸려면 어떤 라인을 사용해야합니까? – jlg

+0

그것은 실패한 위치에 따라 다릅니다. 이 데이터를 사용하는 모든 장소에서 앞에 0이 오도록 변수를 바로 변수에 저장해야하거나 변수가 실패했다는 것을 알 수있는 모든 위치를 사용해야합니다 (단, 변수가있는 위치를 찾으면 우리는 아마도 문제를 더 잘 이해할 수있을 것입니다.) – bobkingof12vs

+0

내가 찾은 것 같아. 나는 삽입 된 코드가 제대로 삽입되지 않았다고 생각하는 코드로 원본 게시물을 편집하려고합니다. – jlg

-1

우편 번호는 데이터베이스의 데이터 유형이 char (5) 여야합니다.