Page 1 of 1

Class Constructor

Posted: Fri Oct 09, 2009 12:37 pm
by dgkindy
I am trying to use OO Constructors for the first time. Not sure if I am setting and calling it correct. Here are the error lines that I am getting that I believe are due to not predefining the value in the variable.

Notice: Undefined offset: 1 in D:\Documents and Settings\414004425\My Documents\My Websites\PETdb\md4c10.php on line 46

Notice: Undefined offset: 1 in D:\Documents and Settings\414004425\My Documents\My Websites\PETdb\md4c10.php on line 50

Notice: Undefined offset: 1 in D:\Documents and Settings\414004425\My Documents\My Websites\PETdb\md4c10.php on line 120

Can someone please have a look and let me know what is missing?

I attached both the program file and the text file for reference.

Code: Select all

<?php
 
// System variables
$skip_first_blank_lines=6;
$file_name = "Text.txt";
//$file_name = "Hamma.txt";
//$file_name = "text2.txt";
 
// Open file in read mode
$file = @fopen($file_name, "r") or exit("Unable to open file!");
if ($file) {
    $sLBL=fgets($file);
    $project = project($sLBL);  //Isolates project number from first row of text in file 
    echo "Project:  ".$project."<br /><br />";
    //Skips through blank lines in file
    for ($count=0; $count <=$skip_first_blank_lines; ++$count) {
        $sLBL=fgets($file);
    }
 
    $new_part_flag = 1; //Indicates whether a new part should be created
    $part_cnt = -1;     //Counts the number of parts in file
    //Loops through the material status lines until end of file
    while (!feof($file)) {
        $pos=0;
        while (substr($sLBL,$pos,1) == '|') {   //Determine part level
            $pos++;
        }
        //Collect part number, name and factory
        If (substr($sLBL,$pos,2) == '--') {
            $material[++$part_cnt] = new Material;
            $material[$part_cnt]->constructor();
            $material[$part_cnt]->level = $pos;
            $pos=$pos+2;
            $material[$part_cnt]->part  = component($sLBL,$pos);
            $pos = $pos + strlen($material[$part_cnt]->part);
            while (substr($sLBL,$pos,1) == ' ') {
                $pos++;
            }
            $material[$part_cnt]->factory = substr($sLBL,($pos - strlen($sLBL)),4);
            $pos=$pos+7;
            $material[$part_cnt]->part_desc = substr($sLBL,($pos - strlen($sLBL)),40);
        }
        //Collect all remaining details regarding a part
        elseif (trim($sLBL,"| -") != "") {
            $sfragment = explode(" ",ltrim(substr($sLBL,($pos - strlen($sLBL)))));
            if (rank($sfragment[1]) < rank($material[$part_cnt]->status))  {
                $material[$part_cnt]->status = $sfragment[1];
            }
            
            switch (rank($sfragment[1])) {
                case 1:  //Plan.order
                    $material[$part_cnt]->edate = fdate($sfragment[0]);
                    break;
                case 2:  //PurRequist
                    $material[$part_cnt]->edate = fdate($sfragment[0]);
                    list($material[$part_cnt]->po, $material[$part_cnt]->line) = purchase_order($sfragment[2]);
                    break;
                case 3:  //Sim.reqmts
                    //No action to take
                    break;
                case 4:  //POSched.ln
                    $material[$part_cnt]->error = error_code($sLBL);    
                    $material[$part_cnt]->edate = fdate($sfragment[0]);
                    list($material[$part_cnt]->po, $material[$part_cnt]->line) = purchase_order($sfragment[2]);
                    break;
                case 5:  //Ship.note
                    $material[$part_cnt]->edate = fdate($sfragment[0]);
                    list($material[$part_cnt]->po, $material[$part_cnt]->line) = purchase_order($sfragment[2]);
                    break;
                case 6:  //Sched.agr.
                    $material[$part_cnt]->edate = fdate($sfragment[0]);
                    list($material[$part_cnt]->po, $material[$part_cnt]->line) = purchase_order($sfragment[2]);
                    break;
                case 7:  //QM InspLot
                    //No action to take
                    break;
                case 8:  //Prod.order
                    $material[$part_cnt]->error = error_code($sLBL);
                    $material[$part_cnt]->prod= production_order($sfragment[0]);    
                    $material[$part_cnt]->edate = fdate($sfragment[0]);
                    break;
                case 9:  //Plant Stck
                    break;
                case 10:  //Depend.req
                    $material[$part_cnt]->qty = quantity($sLBL);    
                    $material[$part_cnt]->edate = fdate($sfragment[0]);
                    break;
                case 11:  //Order.res.
                    $material[$part_cnt]->qty = quantity($sLBL);    
                    $material[$part_cnt]->rdate = fdate($sfragment[0]);
                    break;
                case 12:  //SubctctReq
                    $material[$part_cnt]->qty = quantity($sLBL);    
                    $material[$part_cnt]->rdate = fdate($sfragment[0]);
                    break;
                case 13:  //SalesOrder
                    $material[$part_cnt]->qty = quantity($sLBL);    
                    $material[$part_cnt]->rdate = fdate($sfragment[0]);
                    break;
                case 14:  //ReleaseOrd
                    $material[$part_cnt]->qty = quantity($sLBL);    
                    $material[$part_cnt]->rdate = fdate($sfragment[0]);
                    list($po[$part_cnt], $line) = purchase_order($sfragment[2]);
                    break;
                case 15:  //PldOrdRelO
                    $material[$part_cnt]->prod = production_order($sfragment[0]);    
                    $material[$part_cnt]->qty = quantity($sLBL);    
                    $material[$part_cnt]->rdate = fdate($sfragment[0]);
                    break;
                case 16:  //ProjectOrd
                    //confirm variables
                    break;
                case 17:  //Free deliv
                    //confirm variables
                    break;
                case 18:  //SubcStock
                    //confirm variables
                    break;
                default:
                    echo "Status missing from list: '".$sfragment[1]."'<br />";
            } 
        }
        $sLBL=fgets($file);
    }
    fclose($file);
    echo "<pre>"; var_dump($material); echo "</pre>\n";
}
 
class Material  {
        public $level;
        public $part;
        public $part_desc;
        public $status;
        public $edate;
        public $rdate;
        public $qty;
        public $pr;
        public $po;
        public $line;
        public $factory;
        public $error;
        public $prod;
        
        function constructor()  {
            $level = NULL;
            $part = NULL;
            $part_desc = NULL;
            $status = NULL;
            $edate = NULL;
            $rdate = NULL;
            $qty = NULL;
            $pr = NULL;
            $po = NULL;
            $line = NULL;
            $factory = NULL;
            $error = NULL;
            $prod = NULL;
            }
        }
 
function component($string,$pos) {       //Isolates part number from string
    $assembly = (explode(" ",substr($string,($pos - strlen($string)))));
    return $assembly[0];
    }
function project($string) {             //Isolates project number
    return ltrim(stristr(trim($string)," "), "0 ");
    } 
function production_order($string) {    //Isolates produnction order
        $prod_order = explode("/",$string);   
        return $prod_order[0];
    }
function error_code($string) {          //Isolates error code
        return $errord = trim(substr($string,-68,10));   
    }
function quantity($string) {            //Isolates required quantity
        $qty = explode("-",trim(substr($string,-50,10)));   
        return $qty[0];
    }
function purchase_request($string) {    //Isolates purchase request
        return explode("/",$string);   
    }
function purchase_order($string) {      //Isolates purchase order number and line
        return explode("/",$string);   
    }
function fdate($date) {                 //Isolates date
        $date_a = explode("-",$date);
        return $date = $date_a[0]."/".$date_a[1]."/".$date_a[2];
    }
function rank($status) {                //Determines ranking of status
    switch ($status) {
        case "Plan.order":
          $rank=1;
          break;
        case "PurRequist":
          $rank=2;
          break;
        case "Sim.reqmts":
          $rank=3;
          break;
        case "POSched.ln":
          $rank=4;
          break;
        case "Ship.note":
          $rank=5;
          break;
        case "Sched.agr.":
          $rank=6;
          break;
        case "QM InspLot":
          $rank=7;
          break;
        case "Prod.order":
          $rank=8;
          break;
        case "Plant":  //Plant Stck
          $rank=9;
          break;
        case "Depend.req":
          $rank=10;
          break;
        case "Order.res.":
          $rank=11;
          break;
        case "SubctctReq":
          $rank=12;
          break;
        case "SalesOrder":
          $rank=13;
          break;
        case "ReleaseOrd":
          $rank=14;
          break;
        case "PldOrdRelO":
          $rank=15;
          break;
        case "ProjectOrd":
          $rank=16;
          break;
        case "Free deliv":
          $rank=17;
          break;
        case "SubcStock":
          $rank=18;
          break;
        default:
          $rank=25;
    } 
    return $rank;
} 
 
?>

Re: Class Constructor

Posted: Fri Oct 09, 2009 3:57 pm
by requinix

Code: Select all

$sfragment = explode(" ",ltrim(substr($sLBL,($pos - strlen($sLBL)))));
Your code assumes the $sfragment array will have more than one element. In this case, it doesn't. Thus there is no $sfragment[1] and you get those warnings.