Weird $_GET behaviour with DB_DataObject_FormBuilder
| From: | Sarah Gray | Date: | Fri, 09 Jul 2004 21:37:42 +0000 |
| Subject: | Weird $_GET behaviour with DB_DataObject_FormBuilder | ||
| Groups: | php.pear.general | ||
| Request: | Send a blank email to pear-general+get-13584@lists.php.net to get a copy of this message | ||
Hello Pear List,
This one is weird. Thanks in advance to anyone with insight / advice.
Summary:
php 4.3.2 and the formBuilder in Beta (not from CVS), 0.9.0
When I try to use a value passed in from the $_GET array to plug into
my DataObject ( for editing form objects),
DB_DataObject_FormBuilder does not properly update the object. In all
cases it *does* fill in the form values with the right
values from said object -- it just does not discrimate correctly between
insert and update.
When I use plain ints or other variables that are not from $_GET, the
thing works fine.
Multiple tests seem to trace to: every time I try using the $_GET array
values (as values or as a conditional), my code does not work as
planned.
Is there any reason this code block shouldn't work? To create a new
object or edit existing...
$do = DB_DataObject::factory('mc_Programs');
if( isset($_GET['id']) ){
$value = $_GET['id'] + 0; // to cast the value to int
$do->get($value);
}
$fg =& DB_DataObject_FormBuilder::create($do);
If it shouldn't work -- why not?
If it should work, it doesn't.
I've listed all my code samples / examples below and would love advice.
Details and extended examples below this line:
My entire code to create new object. Works.
$do = DB_DataObject::factory('mc_Programs');
$fg =& DB_DataObject_FormBuilder::create($do);
$form =& $fg->getForm();
$form->addElement('image', 'submit',
'/images/submit_CreateNewProgram.gif' ); // IMG submit
if ($form->validate()) {
$form->process(array(&$fg,'processForm'), false);
$form->freeze();
}
Now, same code, but to edit existing object // Works. updates object
with pk 3
$do = DB_DataObject::factory('mc_Programs');
$do->get(3);
$fg =& DB_DataObject_FormBuilder::create($do);
$form =& $fg->getForm();
$form->addElement('image', 'submit',
'/images/submit_CreateNewProgram.gif' ); // IMG submit
if ($form->validate()) {
$form->process(array(&$fg,'processForm'), false);
$form->freeze();
}
The following examples are working / not working in a way I don't
understand.
NOTE: I am only writing the code that is inserted between this line:
$do = DB_DataObject::factory('mc_Programs');
and this line:
$fg =& DB_DataObject_FormBuilder::create($do);
But I have made no changes to the rest of the code block that I printed
above.
EXAMPLES
1. This works: // updates object with pk 3
$e = 3;
$do->get($e);
2. This works // updates object with pk 3
$e = '3'; // assign string ( to mock how $_GET['id'] comes in as a
string)
$e = $e + 0; // switch to int, just like I did with $_GET['id']
$do->get($e);
3. This DOESN'T Work (results of echo and print_r statements printed
next to if statements so you can see results)
Instead, this creates a new entry.
if( $_GET['id'] ){
echo 'in if
<br>'; // in if
echo 'gettype ID=' . gettype( $_GET['id'] ) . '<br>'; //
gettype
ID=string
print_r( $_GET
); // Array ( [id]
=> 0002 )
$e = $_GET['id'] + 0;
echo '<br>e: ' . $e . '<br>';
// e: 2
echo "gettype e=" . gettype($e); //
gettype e=integer
$do->get($e);
echo '<br>leaving
if'; // leaving if
}
4. And, if I do this -- leaving the $do->get OUTSIDE of the if
statement,
if( $_GET['id'] ){
echo 'in if
<br>'; // in
if
echo 'gettype ID=' . gettype( $_GET['id'] ) . '<br>';
//
gettype ID=string
print_r( $_GET
); // Array (
[id] => 0001 )
$e = $_GET['id'] + 0;
// e: 1
echo '<br>e: ' . $e . '<br>';
echo "gettype e=" . gettype($e);
// gettype e=integer
echo '<br>leaving
if'; //leaving if
}
$do->get($e);
I get this error:
DB_DataObject Error: No Value specified for getdb_dataobject_error
Object
(
[error_message_prefix] =>
[mode] => 16
[level] => 1024
[code] => -1
[message] => DB_DataObject Error: No Value specified for get
5. This works // updates the object:
if( 1== 1){
$e = 4;
}
$do->get($e);
6. This does not work: // instead creates new object (but strangely,
does NOT give the error message seen in example #4 about "No Value
specified for getdb_dataobject_error...") even though the get is
similarly outside of the if statement
if( 1== 1){
$e = $_GET['id'] + 0;
}
$do->get($e);
_________________________________
In summary:
I've tried the above and a few other things.
I am confused.
I would appreciate any insight.
Thanks,
s.