Re: Weird $_GET behaviour with DB_DataObject_FormBuilder

From: Date: Fri, 09 Jul 2004 21:51:51 +0000
Subject: Re: Weird $_GET behaviour with DB_DataObject_FormBuilder
References: 1 2  Groups: php.pear.general 
Request: Send a blank email to pear-general+get-13587@lists.php.net to get a copy of this message
There is no reason why this shouldn't work. $_GET isn't any different than any other array. It *looks* like your code is just fine. Try the debugLevel thing and check out the messages. It could help. On Fri, 09 Jul 2004 16:50:08 -0500, Sarah Gray <sarah@fabled.net> wrote: > Hi -- > > On second thought, > I have another project using 1.3.4 from CVS and on this one I also use $_GET > values in > this way, and they work fine. > So maybe it's a version issue. > I did check on CVS and in bugs and saw no mention of it. > Is this a known bug with 0.9.0? > > Thanks again, > s. > > > > > Sarah Gray wrote: > > > 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. > > > > -- > > PEAR General Mailing List (http://pear.php.net/) > > To unsubscribe, visit: http://www.php.net/unsub.php > > -- > PEAR General Mailing List (http://pear.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > > > !DSPAM:40ef10f8164973700921275! > > -- DB_DataObject_FormBuilder - The database at your fingertips http://pear.php.net/package/DB_DataObject_FormBuilder paperCrane --Justin Patrin--

« previous php.pear.general (#13587) next »