2

さて、ここに私の機能があります:

function getNewJobNumber($jobPrefix, $addition = "0") {
$addition = $addition + 1;
//echo $addition . "<br />";    
$yearDate = date("Y");
$firstDigit = $yearDate[strlen($yearDate) - 1];
$db = DatabaseHelpers::getDatabaseConnection();
$jobQuery = 'SELECT jobID, jobNumber, jobPrefix FROM tblJobNumbers WHERE jobPrefix = "' . $jobPrefix . '" AND jobNumber LIKE "' . $firstDigit . '___" ORDER BY jobID DESC LIMIT 1';
//echo $jobQuery . "<br />";
$stmt1 = $db->query($jobQuery);
$stmt1->setFetchMode(PDO::FETCH_OBJ);
$firstResult = $stmt1->fetch();
//above should select the latest created job number with selected prefix
//print_r($firstResult);
$jobNumber = $firstResult->jobNumber; //top row, will be last job number
//echo "jobNumberFromDB:" . $jobNumber . "<br />";
if (!$jobNumber) {
    //no job number exists yet, create one
    //will be last digit of year followed by "000" ie in 2013 first
    //new job number is "3000"
    $newJobNumber = str_pad($firstDigit, 4, "0");
    return $newJobNumber;
} else {
    //job number already exists, try next one
    $nextJobNumber = $jobNumber + $addition;
    $nextJobQuery = 'SELECT jobID, jobNumber, jobPrefix FROM tblJobNumbers WHERE jobPrefix = "' . $jobPrefix . '" AND jobNumber = "' . $nextJobNumber . '" ORDER BY jobID DESC LIMIT 1';
    $stmt2 = $db->query($nextJobQuery);
    $stmt2->setFetchMode(PDO::FETCH_OBJ);
    $nextResult = $stmt2->fetch();
    $dbNextJobNumber = $nextResult->jobNumber;      
    if (!$dbNextJobNumber) {
        //new job number is unique, return value
        echo "return:nextJobNumber-" . $nextJobNumber . "<br />";
        return($nextJobNumber);
    } else {
        //new job number is not unique, and therefore we need another one
        if ($addition <= 99) { //don't let this recurse more than 99 times, it should never need to
            //in order to loop this programatically call function again, adding one to addition factor
            getNewJobNumber($jobPrefix, $addition+1);
        } else {
            return;
        }
    }
}
}

ここに私の電話があります:

        $ourNewJobNumber = getNewJobNumber($_POST['txtJobPrefix'], 0);
        echo ":}" . $ourNewJobNumber . "{:<br />";

ここに私の結果があります:

return:nextJobNumber-3005
:}{:

コードは完璧に実行されており、データベースから値を取得して比較し、思いどおりにすべてを実行しています。私がテストできるすべての状況で正しい値を取得していますが、その値を呼び出し元のスクリプトに返すことを完全に拒否しています。私が見落としたばかげたエラーを見た人はいますか? return ステートメントの直前にデバッグ エコーを設定すると、return ステートメントの前に問題が発生する可能性が排除されるように見えますが、現時点ではわかりません。

編集: 明確にするために、3005 は、この時点でデータベースから期待される値です。これは、常に Zxxx である職場のジョブ番号を設定するためのものです。ここで、Z は年の最後の桁です。これらは常に順次作成されますが、1 年以上にわたるジョブの場合は Z のみを変更するため、3000 が作成される前に 3030 が存在する可能性がある (存在する) という事実を回避するために使用するコードです。

4

2 に答える 2

4

あなたが電話しているとき

getNewJobNumber($jobPrefix, $addition+1);

実際に値を返しているわけではありません。

変更してください

return getNewJobNumber($jobPrefix, $addition+1);

于 2013-01-14T18:02:25.910 に答える
4

関数を再帰的に呼び出していますが、戻り値で何もしていません:

    if ($addition <= 99) { //don't let this recurse more than 99 times, it should never need to
        //in order to loop this programatically call function again, adding one to addition factor
        getNewJobNumber($jobPrefix, $addition+1);
    } else {
        return;
    }

次のようになります。

    if ($addition <= 99) { //don't let this recurse more than 99 times, it should never need to
        //in order to loop this programatically call function again, adding one to addition factor
        return getNewJobNumber($jobPrefix, $addition+1);
        ^^^^^^
    } else {
        return -1;    // some kind of error message?
    }
于 2013-01-14T18:02:37.587 に答える