Link to home
Start Free TrialLog in
Avatar of dave4dl
dave4dl

asked on

more php reference problems

The values in a custom object i have dont seem to be being accessed correctly and i think it is because i am not using references correctly in php (I am new to php).  Below is my code with comments showing the odd output.  Below the code is the output (read the description above the output to see what is wrong with it).

    function controlOutput(){
        //pull all the unique key/display values from tablename
        $output="";
        $controlName=$this->parentColumn->getControlName();
       
        $output=$output."<select name=\"".$controlName."\" id=\"".$controlName."\">";
       
        if($this->strKeyColumn!=""){
            $result=$this->queryDatabase();
            while($row = mysql_fetch_row($result))
            {
                $id = $row[0];
                $display = $row[1];
                $output=$output."<option value=\"$id\"";
                echo "Test2? - \$this->parentColumn->strCurValue={$this->parentColumn->strCurValue}<br>\n"; // <-this prints out blank
                //echo "\$id=$id\n";
                if($this->parentColumn->strCurValue==$id) $output=$output." selected";
                $output=$output.">$display</option>\n";
            }
            $output=$output."</select>";
        }
        return $output;
    } //end  function controlOutput()

function editOutput(){
        //pull all the unique key/display values from tablename
        $output="";
        $controlName="frm_".$this->strTableName;
       
        $output=$output."<form name=\"".$controlName."\" id=\"".$controlName."\" action=\"".$_SERVER['SCRIPT_NAME']."\" method=\"POST\">";
        $output=$output."<table cellpadding=0 cellspacing=0 border=0 align=left>";
       
        foreach ($this->arrColumns as $i => $value){
            $output=$output."<tr>";
            $output=$output."<td nowrap style=\"padding-bottom:3px\">".$value->descriptionOutput() . "</td>";
            $output=$output."<td nowrap style=\"padding-left:5px;padding-bottom:3px\">".$value->controlOutput() . "</td>";
            $output=$output."</td></tr>\n";
        }
       
        $output=$output."</table><br clear=\"left\" />";
       
        foreach ($this->arrHiddenFormVariables as $i => $value){
            $output=$output."<input type=\"hidden\" name=\"{$value[0]}\" id=\"{$value[0]}\" value=\"{$value[1]}\">";
        }
        $output=$output."<br /><input type=\"submit\" value=\"Save Changes\">";
        $output=$output."</form>";
       
        return $output;
    } // end function editOutput

      $objCurTable->strIdColumnValue=$curID;
      if(strtolower($curAction=="edit")){
           
        $objCurTable->updateFromDatabase();
         
        foreach($objCurTable->arrColumns as $foreachCurColumn){
            echo "Test? - \$foreachCurColumn->strCurValue{$foreachCurColumn->strDisplayText}={$foreachCurColumn->strCurValue}<br />\n";  <--actually holds the value
        }
      }

echo $objCurTable->editOutput();
---------------------------------------------------------------------------
The following is output generated from the code above.  Notice that during "Test2" the columns have values but during "Test" they do not:

Test? - $foreachCurColumn->strCurValueProgram Name=Example Entry
Test? - $foreachCurColumn->strCurValueProgram Description=
Test? - $foreachCurColumn->strCurValueProgram Website=
Test? - $foreachCurColumn->strCurValueThis program is also an instition=1
Test? - $foreachCurColumn->strCurValueProgram institution=376

Test2? - $this->parentColumn->strCurValue=
^^ The above line is repeated for each record in $result (in the controlOutput function)^^

Does anyone know why I am seeing this output and what changes to make so it see the strCurValues when it runs Test2 (in addition to "Test?")?
Avatar of Roonaan
Roonaan
Flag of Netherlands image

Where do you set the $this->parentColumn property?

-r-
Avatar of dave4dl
dave4dl

ASKER

Woops, i forgot to tell you where the parentColumn come from:

$this->objLink=&new clsLink($this);

    function clsLink(&$inputParent,$inputDisplayColumn=null,$inputKeyColumn=null, $inputTableName=null) {
        $this->strDisplayColumn=$inputDisplayColumn;
        $this->strKeyColumn=$inputKeyColumn;
        $this->strTableName=$inputTableName;
        $this->parentColumn=$inputParent;
    }
Avatar of dave4dl

ASKER

Man you reply fast!
Try:

    function clsLink(&$inputParent,$inputDisplayColumn=null,$inputKeyColumn=null, $inputTableName=null) {
        $this->strDisplayColumn=$inputDisplayColumn;
        $this->strKeyColumn=$inputKeyColumn;
        $this->strTableName=$inputTableName;
        $this->parentColumn=&$inputParent;
    }

-r-
Avatar of dave4dl

ASKER

Thanks for the replies Roonaan,  I really appreciate your help today!

I changed the line that says "$this->parentColumn=$inputParent;" to "$this->parentColumn=&$inputParent;"
but it still prints out "Test2? - $this->parentColumn->strCurValue=" a number of times.
ASKER CERTIFIED SOLUTION
Avatar of Roonaan
Roonaan
Flag of Netherlands image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of dave4dl

ASKER

I tried the "while" loop since i didn't know how those behaved differently before but I had no luck.  I expect I am probably not giving you some critical piece of info so i uploaded my php files to https://filedb.experts-exchange.com/incoming/ee-stuff/1278-phpFiles.zip if you dont mind taking a look at the real thing (instead of the snippets on EE).

AddEditItem.php creates a table object (defined in clsTable.php) which has an array of column objects (defined in clsColumn.php) which contains a link object (defined in clsLink.php).

The values stored in the column object seem to persist but accessing it from the (child) link seems to be failing.

So i think the references in one direction and/or the other from the link are not working right.

What do you think?
Final resort might be to implement an explicit reference:

$this->objLink->parentColumn = &$this;

-r-
Avatar of dave4dl

ASKER

Thanks for your help roonaan.  I ended up just declaring another variable in the child class so that i wouldnt need a reference to the parent (even though it creates a duplicate).