PHP 邮政编码丢失前导零

Jam*_*mie 2 php mysql

我将邮政编码存储在 MySQL 数据库中作为varchar(10). 出于某种原因,将它存储在一张表中与另一张表不同。字段之间的唯一区别是一个是varchar(10) Nullable,一个是varchar(10)。该Nullable列正在保存没有前导零的邮政编码,因此'05415'变为5415. 这在另一个表中工作得很好。我认为它们存储在同一页面上,但我似乎找不到问题所在。我对 PHP 不是很好,所以我真的很感激这里的一些帮助。

这是在网站上注册的功能......数据库中的注册表正在保存前导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) . "'
                )";
Run Code Online (Sandbox Code Playgroud)

这就是订单的流程。这是在插入前删除前导零的表。

        $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";
Run Code Online (Sandbox Code Playgroud)

为了让邮政编码正确显示,我用这个更新了代码,0出现了:

$zip = str_pad($order->eod_shipping_postal_code, 5, '0', STR_PAD_LEFT);
Run Code Online (Sandbox Code Playgroud)

bob*_*2vs 5

如果我有一个猜测,我会假设您的变量在某个地方存储为整数,如果发生这种情况,那么您肯定会丢失前导“0”。要查看的一些选项可能是查看变量的存储位置并确保将其存储为字符串。

或者,您始终可以使用以下方法确保它在 php 中有 5 个数字:

str_pad($zip, 5, '0', STR_PAD_LEFT)
Run Code Online (Sandbox Code Playgroud)

看到这个:http : //www.php.net/str_pad

(虽然我建议您在 php 中找到它作为数字存储的位置而不是“伪造”。但如果您找不到它,这将起作用)