Re: Array to string conversion error when writing to db
Thanks for your response Mike. I had actually thought of using a join table, but wasn't sure how to do it in Cake. Thanks for pointing me in the right direction. I've now set up my join table and got it all successfully working. CakePHP makes things so simple, once you've got your head around it! It's all great, apart from one thing... I want validation to check that at least one checkbox is selected when the form is submitted, but I can't seem to get it to work. I've tried the following code in both my Proposal model and my new Audience model. public $validate = array('audience' => array('rule' => array('multiple', array('min' => 1; Here's the code for the relevant content... // Controllers/ProposalsController.php $this->set('audiences', $this->Proposal->Audience->find('list', array('fields'=>array('Audience.id', 'Audience.agegroup'; // Proposals/add.ctp echo $this->Form->input('Audience', array('multiple' => 'checkbox')); // HTML generated from above (edited fore brevity) Audience Suitable for all ages Lower primary (5-7 years) Upper primary (7-11 years) If you can help me get the validation working I'll be most grateful! Thanks, Mark. On Wednesday, 17 September 2014 11:11:26 UTC+1, Mike Karthauser wrote: > > Hi Mark > > I’d try it a more cakey way. > > Your model would have the following relationship > > Registration HasAndBelongsToMany AudienceType > > id, name > > AudienceType being your data > > array(1 => '5-7 years', 2 => '7-11 years', ‘3 => '7-11 years'); > > > > You’d store the relationship between the two in a join table so you’d have > a table with the following fields > > registration_id, audience_type_id > > That would allow you to look up registrations via the audience_type_id > > > > My feeling is this is a better way for you to link this > Read more in the book > > http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html > > HTH. > Mike > > > > On 17 Sep 2014, at 11:01, MarkB > wrote: > > Hi, > > I'm new to CakePHP, OOP and my PHP knowledge & skills could probably be > considered beginner++ level, so please have patience with me. > > I'm producing an event registration system for a festival website. I have > created a multi-step form that uses a session to temporarily record data. > It asks users to specify the ideal audience for their event, based upon > age. This needs to allow multiple selections, and I want to collate and > write their selections into a single mySQL database text field called > 'audience'. > > The code I'm using to create the multiple selections in my form view is as > follows (actual form has several more options) > > $options = array('5-7' => '5-7 years', '7-11' => '7-11 years', '11-14' => > '7-11 years'); > echo $this->Form->select('audience', $options, array('multiple' => > 'checkbox')); > > This generates the following HTML: > > id="ProposalAudience"/> > name="data[Proposal][audience][]" value="5-7" id="ProposalAudience57" > />5-7 years > name="data[Proposal][audience][]" value="7-11" id="ProposalAudience711" > />7-11 years > name="data[Proposal][audience][]" value="11-14" id="ProposalAudience1114" > />11-14 years > > The code I'm using in my controller file to write to the database is as > follows: > > $arrAudience = $this->Session->read('form.data.audience'); > $strAudience = implode($arrAudience); > $this->Session->write('form.data.audience', $strAudience); > $this->Proposal->save($currentSessionData); > > But I get the following errors: > > Warning (2): implode() [function.implode]: Argument must be an array > [APP/Controller/ProposalsController.php, line 106] > Notice (8): Array to string conversion > [CORE/Cake/Model/Datasource/DboSource.php, line 1009] > > The SQL query dump has the word 'Array' where I'd expect my string to be. > > Where am I going wrong? Should I be using something other than the basic > PHP implode function? > > Thanks for any help you can give. > > > > > -- > Like Us on FaceBook https://www.facebook.com/CakePHP > Find us on Twitter http://twitter.com/CakePHP > > --- > You received this message because you are subscribed to the Google Groups > "CakePHP" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to cake-php+u...@googlegroups.com . > To post to this group, send email to cake...@googlegroups.com > . > Visit this group at http://groups.google.com/group/cake-php. > For more options, visit https://groups.google.com/d/optout. > > > > Mike Karthäuser > Director, Brightstorm Ltd. > > 1, Brewery Court > North Street > Bristol > BS3 1JS > > mi...@brightstorm.co.uk > www.brightstorm.co.uk > +44(0) 7939252144 > > > -- Like Us on FaceBook https://www.facebook.com/CakePHP Find us on Twitter http://twitter.com/CakePHP --- You received this message because you are subscribed to the Google Groups "CakePHP" group. To unsubscribe from this group and
Re: Array to string conversion error when writing to db
Thanks for your response Mike. I had actually thought of using a join table, but wasn't sure how to do it in Cake. Thanks for pointing me in the right direction. I've read that part of the book now and have mostly got my head round it. I'm not too sure how to get the checkbox ticks into the join table though - is it done automagically? I guess I'll have to just try it all out and see... I've got a helluva lot to learn, and learning as you work is often the best way I know. I could do without the deadline I have though! Regards, Mark. On Wednesday, 17 September 2014 11:11:26 UTC+1, Mike Karthauser wrote: > > Hi Mark > > I’d try it a more cakey way. > > Your model would have the following relationship > > Registration HasAndBelongsToMany AudienceType > > id, name > > AudienceType being your data > > array(1 => '5-7 years', 2 => '7-11 years', ‘3 => '7-11 years'); > > > > You’d store the relationship between the two in a join table so you’d have > a table with the following fields > > registration_id, audience_type_id > > That would allow you to look up registrations via the audience_type_id > > > > My feeling is this is a better way for you to link this > Read more in the book > > http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html > > HTH. > Mike > > > > On 17 Sep 2014, at 11:01, MarkB > wrote: > > Hi, > > I'm new to CakePHP, OOP and my PHP knowledge & skills could probably be > considered beginner++ level, so please have patience with me. > > I'm producing an event registration system for a festival website. I have > created a multi-step form that uses a session to temporarily record data. > It asks users to specify the ideal audience for their event, based upon > age. This needs to allow multiple selections, and I want to collate and > write their selections into a single mySQL database text field called > 'audience'. > > The code I'm using to create the multiple selections in my form view is as > follows (actual form has several more options) > > $options = array('5-7' => '5-7 years', '7-11' => '7-11 years', '11-14' => > '7-11 years'); > echo $this->Form->select('audience', $options, array('multiple' => > 'checkbox')); > > This generates the following HTML: > > id="ProposalAudience"/> > name="data[Proposal][audience][]" value="5-7" id="ProposalAudience57" > />5-7 years > name="data[Proposal][audience][]" value="7-11" id="ProposalAudience711" > />7-11 years > name="data[Proposal][audience][]" value="11-14" id="ProposalAudience1114" > />11-14 years > > The code I'm using in my controller file to write to the database is as > follows: > > $arrAudience = $this->Session->read('form.data.audience'); > $strAudience = implode($arrAudience); > $this->Session->write('form.data.audience', $strAudience); > $this->Proposal->save($currentSessionData); > > But I get the following errors: > > Warning (2): implode() [function.implode]: Argument must be an array > [APP/Controller/ProposalsController.php, line 106] > Notice (8): Array to string conversion > [CORE/Cake/Model/Datasource/DboSource.php, line 1009] > > The SQL query dump has the word 'Array' where I'd expect my string to be. > > Where am I going wrong? Should I be using something other than the basic > PHP implode function? > > Thanks for any help you can give. > > > > > -- > Like Us on FaceBook https://www.facebook.com/CakePHP > Find us on Twitter http://twitter.com/CakePHP > > --- > You received this message because you are subscribed to the Google Groups > "CakePHP" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to cake-php+u...@googlegroups.com . > To post to this group, send email to cake...@googlegroups.com > . > Visit this group at http://groups.google.com/group/cake-php. > For more options, visit https://groups.google.com/d/optout. > > > > Mike Karthäuser > Director, Brightstorm Ltd. > > 1, Brewery Court > North Street > Bristol > BS3 1JS > > mi...@brightstorm.co.uk > www.brightstorm.co.uk > +44(0) 7939252144 > > > -- Like Us on FaceBook https://www.facebook.com/CakePHP Find us on Twitter http://twitter.com/CakePHP --- You received this message because you are subscribed to the Google Groups "CakePHP" group. To unsubscribe from this group and stop receiving emails from it, send an email to cake-php+unsubscr...@googlegroups.com. To post to this group, send email to cake-php@googlegroups.com. Visit this group at http://groups.google.com/group/cake-php. For more options, visit https://groups.google.com/d/optout.
Re: Array to string conversion error when writing to db
Hi Mark I'd try it a more cakey way. Your model would have the following relationship Registration HasAndBelongsToMany AudienceType id, name AudienceType being your data > array(1 => '5-7 years', 2 => '7-11 years', '3 => '7-11 years'); You'd store the relationship between the two in a join table so you'd have a table with the following fields registration_id, audience_type_id That would allow you to look up registrations via the audience_type_id My feeling is this is a better way for you to link this Read more in the book http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html HTH. Mike On 17 Sep 2014, at 11:01, MarkB wrote: > Hi, > > I'm new to CakePHP, OOP and my PHP knowledge & skills could probably be > considered beginner++ level, so please have patience with me. > > I'm producing an event registration system for a festival website. I have > created a multi-step form that uses a session to temporarily record data. It > asks users to specify the ideal audience for their event, based upon age. > This needs to allow multiple selections, and I want to collate and write > their selections into a single mySQL database text field called 'audience'. > > The code I'm using to create the multiple selections in my form view is as > follows (actual form has several more options) > > $options = array('5-7' => '5-7 years', '7-11' => '7-11 years', '11-14' => > '7-11 years'); > echo $this->Form->select('audience', $options, array('multiple' => > 'checkbox')); > > This generates the following HTML: > > id="ProposalAudience"/> > name="data[Proposal][audience][]" value="5-7" id="ProposalAudience57" > />5-7 years > name="data[Proposal][audience][]" value="7-11" id="ProposalAudience711" > />7-11 years > name="data[Proposal][audience][]" value="11-14" id="ProposalAudience1114" > />11-14 years > > The code I'm using in my controller file to write to the database is as > follows: > > $arrAudience = $this->Session->read('form.data.audience'); > $strAudience = implode($arrAudience); > $this->Session->write('form.data.audience', $strAudience); > $this->Proposal->save($currentSessionData); > > But I get the following errors: > > Warning (2): implode() [function.implode]: Argument must be an array > [APP/Controller/ProposalsController.php, line 106] > Notice (8): Array to string conversion > [CORE/Cake/Model/Datasource/DboSource.php, line 1009] > > The SQL query dump has the word 'Array' where I'd expect my string to be. > > Where am I going wrong? Should I be using something other than the basic PHP > implode function? > > Thanks for any help you can give. > > > > > -- > Like Us on FaceBook https://www.facebook.com/CakePHP > Find us on Twitter http://twitter.com/CakePHP > > --- > You received this message because you are subscribed to the Google Groups > "CakePHP" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to cake-php+unsubscr...@googlegroups.com. > To post to this group, send email to cake-php@googlegroups.com. > Visit this group at http://groups.google.com/group/cake-php. > For more options, visit https://groups.google.com/d/optout. Mike Karthäuser Director, Brightstorm Ltd. 1, Brewery Court North Street Bristol BS3 1JS mi...@brightstorm.co.uk www.brightstorm.co.uk +44(0) 7939252144 -- Like Us on FaceBook https://www.facebook.com/CakePHP Find us on Twitter http://twitter.com/CakePHP --- You received this message because you are subscribed to the Google Groups "CakePHP" group. To unsubscribe from this group and stop receiving emails from it, send an email to cake-php+unsubscr...@googlegroups.com. To post to this group, send email to cake-php@googlegroups.com. Visit this group at http://groups.google.com/group/cake-php. For more options, visit https://groups.google.com/d/optout.
Array to string conversion error when writing to db
Hi, I'm new to CakePHP, OOP and my PHP knowledge & skills could probably be considered beginner++ level, so please have patience with me. I'm producing an event registration system for a festival website. I have created a multi-step form that uses a session to temporarily record data. It asks users to specify the ideal audience for their event, based upon age. This needs to allow multiple selections, and I want to collate and write their selections into a single mySQL database text field called 'audience'. The code I'm using to create the multiple selections in my form view is as follows (actual form has several more options) $options = array('5-7' => '5-7 years', '7-11' => '7-11 years', '11-14' => '7-11 years'); echo $this->Form->select('audience', $options, array('multiple' => 'checkbox')); This generates the following HTML: 5-7 years 7-11 years 11-14 years The code I'm using in my controller file to write to the database is as follows: $arrAudience = $this->Session->read('form.data.audience'); $strAudience = implode($arrAudience); $this->Session->write('form.data.audience', $strAudience); $this->Proposal->save($currentSessionData); But I get the following errors: Warning (2): implode() [function.implode]: Argument must be an array [APP/Controller/ProposalsController.php, line 106] Notice (8): Array to string conversion [CORE/Cake/Model/Datasource/DboSource.php, line 1009] The SQL query dump has the word 'Array' where I'd expect my string to be. Where am I going wrong? Should I be using something other than the basic PHP implode function? Thanks for any help you can give. -- Like Us on FaceBook https://www.facebook.com/CakePHP Find us on Twitter http://twitter.com/CakePHP --- You received this message because you are subscribed to the Google Groups "CakePHP" group. To unsubscribe from this group and stop receiving emails from it, send an email to cake-php+unsubscr...@googlegroups.com. To post to this group, send email to cake-php@googlegroups.com. Visit this group at http://groups.google.com/group/cake-php. For more options, visit https://groups.google.com/d/optout.