【问题标题】:Increment data in codeigniter在codeigniter中增加数据
【发布时间】:2019-04-11 17:21:28
【问题描述】:

这是我的代码

    $receipt = $_POST['receipt'];
    $invid = $_POST['invid'];
    // $receipt = intval($receipt);
    // $invid = intval($invid);

    $newreceipt = 0;
    $GTextension = 'GT-';
    $UTextension = 'UT-';
    $rec_type = array(1472,1416,9752,1417,1500);
    $last_receipt = $this->ion_auth->getLastReceipt($receipt);
    if($last_receipt->num_rows() > 0){
        if($receipt == 1){
            $newreceipt = $last_receipt->row()->inv_cno+1;
        }
        elseif($receipt == 2){
            $newreceipt = $last_receipt->row()->inv_cno+1;
        }
        elseif($receipt == 3){
            $newreceipt = $last_receipt->row()->inv_cno+1;
        }
        elseif($receipt == 4){
            $newreceipt = $UTextension.(++$last_receipt->row()->inv_cno);
        }
        else if($receipt == 5){
            $newreceipt = $GTextension.(++$last_receipt->row()->inv_cno);
        }
    }

    $this->ion_auth->update_receipt($invid,$receipt,$newreceipt);

    $return = array('dr_no' => $newreceipt);

    echo json_encode($return);

现在这段代码的输出是这样的 如果我选择==4 那就是这样的

UT-1418 没错。

然后如果我再次选择==4 问题存在,因为它现在是这样的 UT-UT-1419。它也在增加扩展名。我只想增加-1419

的数据

谁能帮帮我。谢谢。

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    如果$receipt === 4 你正在执行这个:

    $newreceipt = $UTextension.(++$last_receipt->row()->inv_cno);

    然后您将使用$this->ion_auth->update_receipt($invid,$receipt,$newreceipt); 将值保存在数据库中。

    所以,现在,数据库包含“UT-something”。

    现在,如果你在 PHP 中执行这个简单的代码,你可能会明白这一点:

    $test = "UT-10";
    ++$test;
    echo "$test\n";
    

    它将输出UT-11。 你可以看看一些official documentation to understand why this works like this

    所以,下一次$receipt === 4,你执行相同的代码: $newreceipt = $UTextension.(++$last_receipt->row()->inv_cno);

    相当于"UT-" . "UT-*something*"

    所以不想要的结果。

    现在,解决方案可以满足您的需求: 如果inv_cno 必须是整数,则只需保存整数并在代码中计算出"prefix-" . inv_cno

    否则,您应该检查$last_receipt->row()->inv_cno是否已经在其中has a prefix,以便了解是否必须添加/更改它。

    EDIT --- 在用户 cmets 之后。

    现在我们现在它是一个 varchar,假设前缀总是一个 3 个字符的字符串(“UT-”、“GT-”等),你可以创建这样的东西。 根据您的示例,我假设 inv_cno 可以已经有或没有前缀。 我假设可接受的前缀是“UT-”和“GT-”。

    我会在这里给你写一个例子让你理解我的观点,然后你必须将它集成到你的代码中:)

    <?php
    
    function get_new_receipt($inv_cno, $extension) {
      $prefix_len = 3;
      $admissible_prefixes = array("UT-", "GT-");
      $inv_cno++;
      if (strlen($inv_cno) <= $prefix_len) {
        return $extension . $inv_cno;
      }
      $current_prefix = substr($inv_cno, 0, $prefix_len);
      if ($current_prefix === $extension) {
        return $inv_cno;
      }
    
      return $extension . substr($inv_cno, $prefix_len);
    }
    
    
    $test = "UT-10";
    
    $test = get_new_receipt($test, "UT-");
    echo "$test\n";
    
    $test = get_new_receipt($test, "UT-");
    echo "$test\n";
    
    $test = get_new_receipt($test, "GT-");
    echo "$test\n";
    

    P.S.:无论如何,作为旁注,在字符串上执行这种数学运算并不是那么安全。但那是另一回事了。

    【讨论】:

    • inv_cno 是 varchar 先生。
    • 老实说。这有点难以实施。对不起,我会努力的。
    • 先生,您能否再解释一下代码,以便我能清楚地理解它
    【解决方案2】:

    这样做

    $prefix = 'UT-'; 
    elseif($receipt == 4){
           if (substr($UTextension, 0, strlen($prefix)) == $prefix) {
                    $UTextension = substr($UTextension, strlen($prefix));
                    $newreceipt = $UTextension. (++$last_receipt->row()->inv_cno);
           }
     }
    

    感谢洛伦佐 S

    【讨论】:

      猜你喜欢
      • 2014-11-23
      • 1970-01-01
      • 2011-10-16
      • 2014-02-14
      • 2011-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多