Инкремент данных в codeigniter - PullRequest
0 голосов
/ 08 ноября 2018

Вот мой код

    $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

Может кто-нибудь помочь мне, пожалуйста. Спасибо.

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Сделано вот так

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

Спасибо, Лоренцо С

0 голосов
/ 08 ноября 2018

Если $receipt === 4, вы выполняете это:

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

и затем вы сохраняете значение в БД с помощью $this->ion_auth->update_receipt($invid,$receipt,$newreceipt);.

Итак, теперь база данных содержит «UT- что-то ».

Теперь, если вы выполните этот простой код на PHP, вы, вероятно, поймете:

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

Будет выведено UT-11. Вы можете взглянуть на официальную документацию , чтобы понять, почему это так работает .

Итак, в следующий раз, когда $receipt === 4, вы выполните тот же код: $newreceipt = $UTextension.(++$last_receipt->row()->inv_cno);

, что эквивалентно "UT-" . "UT-*something*".

И вот нежелательный результат.

Теперь решение соответствует вашим потребностям: Если inv_cno должно быть целым числом, вы просто сохраняете целое число и вычисляете обратно "prefix-" . inv_cno в коде.

В противном случае вам следует просто проверить, есть ли в $last_receipt->row()->inv_cno уже префикс , чтобы понять, нужно ли вам добавлять / изменять его или нет.

РЕДАКТИРОВАТЬ --- после комментариев пользователя.

Теперь, когда мы теперь 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 .: В любом случае, как примечание, не так безопасно выполнять этот вид математики над строками. Но это другая история.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...