Jump to content

garry27

Members
  • Posts

    161
  • Joined

  • Last visited

    Never

Profile Information

  • Gender
    Not Telling

garry27's Achievements

Regular Member

Regular Member (3/5)

0

Reputation

  1. Actually, "TextArea" in the class name for Contact form should be "Textarea". My mistake, was looking at wrong directory for the class file in case anyone's following this thread
  2. Phew! Sorted now, thanks guys! Once I got the error reporting it pointed out I googled it and turns out the element entity should be spelled "HtmlEntities" not "HTMLEntities". The error reporting also pointed that there was no TextArea.php file in the library I downloaded which explains why I got a blank screen before. Oh well you live and learn
  3. Hi gristoi, yep, here it is: <?php class Square_Form_Contact extends Zend_Form { public function init() { // initialize form $this->setAction('/contact/index') ->setMethod('post'); // create text input for name $name = new Zend_Form_Element_Text('name'); $name->setLabel('Name:') ->setOptions(array('size' => '35')) ->setRequired(true) ->addValidator('NotEmpty', true) ->addValidator('Alpha', true) ->addFilter('HTMLEntities') ->addFilter('StringTrim'); // create text input for email address $email = new Zend_Form_Element_Text('email'); $email->setLabel('Email address:'); $email->setOptions(array('size' => '50')) ->setRequired(true) ->addValidator('NotEmpty', true) ->addValidator('EmailAddress', true) ->addFilter('HTMLEntities') ->addFilter('StringToLower') ->addFilter('StringTrim'); // create text input for message body /* $message = new Zend_Form_Element_TextArea('message'); $message->setLabel('Message:') ->setOptions(array('rows' => '8','cols' => '40')) ->setRequired(true) ->addValidator('NotEmpty', true) ->addFilter('HTMLEntities') ->addFilter('StringTrim');*/ // create captcha $captcha = new Zend_Form_Element_Captcha('captcha', array( 'captcha' => array( 'captcha' => 'Image', 'wordLen' => 6, 'timeout' => 300, 'width' => 300, 'height' => 100, 'imgUrl' => '/captcha', 'imgDir' => APPLICATION_PATH . '/../public/captcha', 'font' => APPLICATION_PATH . '/../public/fonts/LiberationSansRegular.ttf', ) )); $captcha->setLabel('Verification code:'); // create submit button $submit = new Zend_Form_Element_Submit('submit'); $submit->setLabel('Send Message') ->setOptions(array('class' => 'submit')); // attach elements to form $this->addElement($name) ->addElement($email) // ->addElement($message) ->addElement($captcha) ->addElement($submit); } }
  4. okays, I've var_dumped the php for the view script of the contact form: <h2>Contact</h2> <?php echo $this->form; var_dump($this->form); ?> ...and it outputs this: object(Square_Form_Contact)#51 (27) { ["_attribs:protected"]=> array(2) { ["action"]=> string(14) "/contact/index" ["method"]=> string(4) "post" } ["_decorators:protected"]=> array(3) { ["Zend_Form_Decorator_FormElements"]=> object(Zend_Form_Decorator_FormElements)#64 (4) { ["_placement:protected"]=> string(6) "APPEND" ["_element:protected"]=> object(Square_Form_Contact)#51 (27) { ["_attribs:protected"]=> array(2) { ["action"]=> string(14) "/contact/index" ["method"]=> string(4) "post" } ["_decorators:protected"]=> array(3) { ["Zend_Form_Decorator_FormElements"]=> object(Zend_Form_Decorator_FormElements)#64 (4) { ["_placement:protected"]=> string(6) "APPEND" ["_element:protected"]=> *RECURSION* ["_options:protected"]=> array(0) { } ["_separator:protected"]=> string(1) " " } ["Zend_Form_Decorator_HtmlTag"]=> object(Zend_Form_Decorator_HtmlTag)#65 (7) { ["_encoding:protected"]=> NULL ["_placement:protected"]=> NULL ["_tag:protected"]=> NULL ["_tagFilter:protected"]=> NULL ["_element:protected"]=> NULL ["_options:protected"]=> array(2) { ["tag"]=> string(2) "dl" ["class"]=> string(9) "zend_form" } ["_separator:protected"]=> string(1) " " } ["Zend_Form_Decorator_Form"]=> object(Zend_Form_Decorator_Form)#66 (5) { ["_helper:protected"]=> string(4) "form" ["_placement:protected"]=> string(6) "APPEND" ["_element:protected"]=> NULL ["_options:protected"]=> array(0) { } ["_separator:protected"]=> string(1) " " } } ["_defaultDisplayGroupClass:protected"]=> string(22) "Zend_Form_DisplayGroup" ["_description:protected"]=> NULL ["_disableLoadDefaultDecorators:protected"]=> bool(false) ["_displayGroupPrefixPaths:protected"]=> array(0) { } ["_displayGroups:protected"]=> array(0) { } ["_elementDecorators:protected"]=> NULL ["_elementPrefixPaths:protected"]=> array(0) { } ["_elements:protected"]=> array(4) { ["name"]=> object(Zend_Form_Element_Text)#50 (30) { ["helper"]=> string( "formText" ["_allowEmpty:protected"]=> bool(true) ["_autoInsertNotEmptyValidator:protected"]=> bool(true) ["_belongsTo:protected"]=> NULL ["_decorators:protected"]=> array(5) { ["Zend_Form_Decorator_ViewHelper"]=> object(Zend_Form_Decorator_ViewHelper)#68 (6) { ["_buttonTypes:protected"]=> array(3) { [0]=> string(24) "Zend_Form_Element_Button" [1]=> string(23) "Zend_Form_Element_Reset" [2]=> string(24) "Zend_Form_Element_Submit" } ["_helper:protected"]=> string( "formText" ["_placement:protected"]=> string(6) "APPEND" ["_element:protected"]=> object(Zend_Form_Element_Text)#50 (30) { ["helper"]=> string( "formText" ["_allowEmpty:protected"]=> bool(true) ["_autoInsertNotEmptyValidator:protected"]=> bool(true) ["_belongsTo:protected"]=> NULL ["_decorators:protected"]=> array(5) { ["Zend_Form_Decorator_ViewHelper"]=> object(Zend_Form_Decorator_ViewHelper)#68 (6) { ["_buttonTypes:protected"]=> array(3) { [0]=> string(24) "Zend_Form_Element_Button" [1]=> string(23) "Zend_Form_Element_Reset" [2]=> string(24) "Zend_Form_Element_Submit" } ["_helper:protected"]=> string( "formText" ["_placement:protected"]=> string(6) " ...... Not sure what this means but might mean something to someone? I was under the impression that it should output html :-\ Thanks
  5. I tried what you guys suggested and still the contact form doesn't load. I'm not even sure if I needed to add the code at bootstrap as the Square_Form_Contact class executes at runtime from start to end. I added exit("test") to the last line and it executed. I added this extra line ot the .ini script. The Square_Form_Contact class is located at /zend_training/sites/square/library/Square/Form/Contact.php: includePaths.library = APPLICATION_PATH "/../library/Square" and this to the bootstrap class: protected function _initAutoLoad() { $resourceLoader = new Zend_Loader_Autoloader_Resource(array( 'basePath' => '/zend_training/sites/square/library/Square', 'namespace' => 'Square')); $resourceLoader->addResourceType('form', 'Form/', 'Form'); } Thank you for your help! It's greatly appreciated!
  6. Sorry, I'm not sure what you mean. I'm not a very good programmer unfortunately. The expected URL for the page is .../square/public/contact so it loads the Contact_Controller and default action from th default module. Then the include path is in the php.ini on the root of the public_html folder: include_path = .:/zend_training/sites/square/library
  7. I've been learning ZF from a book and working through the excercises. I've got the master layout working and controller and views which "serve" two different pages, working fine. The next excercise is for a contact form and doesn't work. Please see below code, taken from the authour's source code: APP_DIR>library>Square>Contact.php : <?php class Square_Form_Contact extends Zend_Form { public function init() { // initialize form $this->setAction('/contact/index') ->setMethod('post'); // create text input for name $name = new Zend_Form_Element_Text('name'); $name->setLabel('Name:') ->setOptions(array('size' => '35')) ->setRequired(true) ->addValidator('NotEmpty', true) ->addValidator('Alpha', true) ->addFilter('HTMLEntities') ->addFilter('StringTrim'); // create text input for email address $email = new Zend_Form_Element_Text('email'); $email->setLabel('Email address:'); $email->setOptions(array('size' => '50')) ->setRequired(true) ->addValidator('NotEmpty', true) ->addValidator('EmailAddress', true) ->addFilter('HTMLEntities') ->addFilter('StringToLower') ->addFilter('StringTrim'); // create text input for message body /* $message = new Zend_Form_Element_TextArea('message'); $message->setLabel('Message:') ->setOptions(array('rows' => '8','cols' => '40')) ->setRequired(true) ->addValidator('NotEmpty', true) ->addFilter('HTMLEntities') ->addFilter('StringTrim');*/ // create captcha $captcha = new Zend_Form_Element_Captcha('captcha', array( 'captcha' => array( 'captcha' => 'Image', 'wordLen' => 6, 'timeout' => 300, 'width' => 300, 'height' => 100, 'imgUrl' => '/captcha', 'imgDir' => APPLICATION_PATH . '/../public/captcha', 'font' => APPLICATION_PATH . '/../public/fonts/LiberationSansRegular.ttf', ) )); $captcha->setLabel('Verification code:'); // create submit button $submit = new Zend_Form_Element_Submit('submit'); $submit->setLabel('Send Message') ->setOptions(array('class' => 'submit')); // attach elements to form $this->addElement($name) ->addElement($email) // ->addElement($message) ->addElement($captcha) ->addElement($submit); } } APP_DIR>modules/default/controllers/ContactController.php : <?php class ContactController extends Zend_Controller_Action { public function init() { $this->view->doctype('XHTML1_STRICT'); } public function indexAction() { $form = new Square_Form_Contact(); $this->view->form = $form; if ($this->getRequest()->isPost()) { if ($form->isValid($this->getRequest()->getPost())) { $values = $form->getValues(); $mail = new Zend_Mail(); $mail->setBodyText($values['message']); $mail->setFrom($values['email'], $values['name']); $mail->addTo('info@square.example.com'); $mail->setSubject('Contact form submission'); $mail->send(); $this->_helper->getHelper('FlashMessenger')->addMessage('Thank you. Your message was successfully sent.'); $this->_redirect('/contact/success'); } } } public function successAction() { if ($this->_helper->getHelper('FlashMessenger')->getMessages()) { $this->view->messages = $this->_helper->getHelper('FlashMessenger')->getMessages(); } else { $this->_redirect('/'); } } } APP_DIR>modules/default/configs/application.ini : [production] phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" resources.modules = "" resources.layout.layoutPath = APPLICATION_PATH "/layouts" resources.layout.layout = master autoloaderNamespaces[] = "Square_" # routes # /home route resources.router.routes.home.route = /home resources.router.routes.home.defaults.module = default resources.router.routes.home.defaults.controller = index resources.router.routes.home.defaults.action = index # /content/* route resources.router.routes.static-content.route = /content/:page resources.router.routes.static-content.defaults.module = default resources.router.routes.static-content.defaults.controller = static-content resources.router.routes.static-content.defaults.action = display # /contact route resources.router.routes.contact.route = /contact resources.router.routes.contact.defaults.module = default resources.router.routes.contact.defaults.controller = contact resources.router.routes.contact.defaults.action = index [staging : production] [testing : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 [development : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 Everything is the same as the author's code except for the code for the text area in the form class which I have to comment out to prevent 0 code being outputted. I've checked to see if the code parses the form and controller scripts from start to end and it does. However, no form code is outputted, just the master layout and a "Contact" header. I'm using Zend Framework 1.11.10 Full. Could this be a conflict with a newer version of ZF? Thanks in advance.
  8. I checked it with echo $PATH as you said. I can access zf inside the -s public_html/zend_training/bin folder if I do do this inside the same folder: ln -s zf.sh zf If I access outside the directory, however, it says "Could not open input file: ./zf.php" On the otherhand, if I create the link at the route level to the same bin folder, I get -jailshell: Could: command not found. Using this: ln -s public_html/zend_training/bin/zf.sh public_html/zend_training/bin/zf
  9. Thank you for your help thorpe I've gone back to changing the bash files and it loads ok now (was loading zf.bat before) but only from inside the bin directory for the zf.sh file. I've tried creating a link so I can access the file from any directory like this: ln -s public_html/zend_training/bin/zf.sh public_html/zend_training/bin/zf but i get command not found. Any idea why this is?
  10. I'm having a nightmare installing ZF with the Zend Tool. The manual says I have to install some folders in the includes path and two files in the system executable path. But I don't know what this means. I'm using a Linux hosted shared server with access to Shell and tried a few things ("which php"which points to a system folder I don't have permission to edit and editting a bash file) but still can't the zend tool running. Please someone help
  11. No, I'm just trying to run it through a php query as I don't have access to phpAdmin on that server.
  12. Do you have the code to do this as can't find it on the internet? Do you have the code to do this as can't find it on the internet?
  13. I've exported a database from phpadmin and I'm trying to import it onto a different server. The database connects fine but I get a mysql error from the first line of sql code. The source server is SQL version is 5.0.92 and the destination version is 5.0.77. The database name I want to insert the data into is "h8861636". Here's the sql code: USE `h8861636`; -- -------------------------------------------------------- -- -- Table structure for table `Blog` -- CREATE TABLE IF NOT EXISTS `Blog` ( `bid` int(10) unsigned NOT NULL auto_increment, `date` date NOT NULL, `title` varchar(80) collate latin1_general_ci NOT NULL, `uid` int(50) unsigned NOT NULL, `tid` int(10) unsigned NOT NULL, `mcid` int(10) unsigned default NULL, `iid` int(10) unsigned default NULL, `vid` int(10) unsigned default NULL, PRIMARY KEY (`bid`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=49 ; -- -- Dumping data for table `Blog` -- INSERT INTO `Blog` (`bid`, `date`, `title`, `uid`, `tid`, `mcid`, `iid`, `vid`) VALUES (1, '2011-06-28', 'Welcome to the Site!', 1, 1, 1, 5, NULL), (2, '2011-06-27', 'Post pictures of your reptiles!', 1, 2, 2, 0, NULL), (3, '2011-06-27', 'Rankins Dragon Care', 1, 0, NULL, 0, 1), (4, '2011-06-27', 'Corn Snake care', 1, 0, NULL, 0, 2), (48, '2011-06-28', 'Leo blog', 1, 57, 58, 17, NULL); -- -------------------------------------------------------- -- -- Table structure for table `Comments` -- CREATE TABLE IF NOT EXISTS `Comments` ( `cid` int(10) unsigned NOT NULL auto_increment, `comment` varchar(1000) collate latin1_general_ci NOT NULL, `date` date NOT NULL, `uid` int(10) unsigned NOT NULL, `bid` int(10) unsigned NOT NULL, `iid` int(10) unsigned default NULL, PRIMARY KEY (`cid`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=3 ; -- -- Dumping data for table `Comments` -- INSERT INTO `Comments` (`cid`, `comment`, `date`, `uid`, `bid`, `iid`) VALUES (1, 'this id comment 1', '2011-06-27', 2, 2, 6), (2, 'This is comment 2', '2011-07-04', 3, 2, NULL); -- -------------------------------------------------------- -- -- Table structure for table `Image` -- CREATE TABLE IF NOT EXISTS `Image` ( `iid` int(10) unsigned NOT NULL auto_increment, `filename` varchar(50) collate latin1_general_ci NOT NULL COMMENT 'filename and extension only', `alt` varchar(50) collate latin1_general_ci NOT NULL, PRIMARY KEY (`iid`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=18 ; -- -- Dumping data for table `Image` -- INSERT INTO `Image` (`iid`, `filename`, `alt`) VALUES (1, 'uid2.jpg', 'Member''s profile picture'), (2, 'uid3.jpg', 'Member''s profile picture'), (3, 'uid4.JPG', 'Member''s profile picture'), (4, 'uid6.JPG', 'Member''s profile picture'), (5, 'bid1.jpg', 'Welcome to Reptile Care Sheets!'), (6, 'cid1.jpg', 'Crested gecko'), (17, 'bid48.jpg', 'Leopard Gecko'); -- -------------------------------------------------------- -- -- Table structure for table `MainContent` -- CREATE TABLE IF NOT EXISTS `MainContent` ( `mcid` int(10) unsigned NOT NULL auto_increment, `content` varchar(10000) collate latin1_general_ci NOT NULL, PRIMARY KEY (`mcid`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=59 ; -- -- Dumping data for table `MainContent` -- INSERT INTO `MainContent` (`mcid`, `content`) VALUES (1, 'Lorem ipsum dolor sit amet, reprehenderit donec vivamus vestibulum, aenean proin libero tellus fringilla, auctor convallis ac nec, amet vitae fusce volutpat leo. Sed ligula iaculis magna fusce, ex aenean turpis congue, sapien suscipit sit laoreet, rhoncus lacus sagittis nibh sed rutrum, amet eros in. Pellentesque aliquam libero fringilla aliquam semper risus, cursus ipsum ipsum amet urna ut, eget dignissim donec, varius dui quis nunc amet, odio diam. Mollis et commodo inventore vestibulum, tortor proin pede cras donec. Augue metus neque vel ac sed, turpis vitae sapiente, sit massa, odio massa ad et nunc, porta justo lacus lorem faucibus nisl. Porttitor integer maecenas curabitur felis pellentesque ridiculus, rutrum eros elementum varius a, enim bibendum ullamcorper, ipsum suspendisse proin. Libero sit nisl quisque wisi pellentesque vivamus, elit aliquam nulla ac et sed vehicula, cum consectetuer purus, nec dolor. Ut adipiscing sit. Viverra eleifend curabitur amet in in. Vitae in orci ridiculus, iaculis elementum integer convallis at ut ante, dolor libero semper, aenean at massa cum vel. Nunc integer tristique per pharetra in sodales, dignissim accumsan, pede ut arcu lorem, nibh vestibulum, duis at nulla risus ipsum pharetra fermentum. Orci elit, vehicula in ullamcorper et erat nam, sem massa, rutrum fermentum malesuada velit vitae. Eget mi nec tortor, exercitation adipiscing montes sed mauris, sapien arcu nulla pellentesque nulla lorem duis. Lectus proin vel eu cum pellentesque, laoreet lectus vel eu arcu, etiam nulla. Lacus neque luctus fermentum. Leo nullam sit sit venenatis tincidunt, arcu parturient a est accumsan justo, quis aliquet nec gravida ac facilisi eleifend. Mattis nam eleifend eros potenti. Vel auctor ante phasellus nullam aenean. Leo volutpat arcu cras eleifend curabitur sagittis, enim gravida, mauris mi vel est neque sed tincidunt, velit ultrices non fermentum ligula nunc. Pretium felis dictum id mauris arcu, fringilla proin mauris aut dis semper, semper in, libero arcu facilisi pretium nunc. Neque turpis faucibus mollis, quis vel mollis ultricies vestibulum, augue vulputate, eros nunc. Libero vel, in etiam maecenas cursus, a quis nulla eget proin, aliquet blandit vestibulum faucibus quis at suspendisse, congue interdum suspendisse pharetra netus. Magna interdum cras dui maecenas lorem ligula. Pulvinar sit lobortis suspendisse dictum curabitur, consectetuer libero justo accumsan quis, tincidunt ac venenatis diam ante sollicitudin eu, ut feugiat non eros id, lacus aliquid. Fringilla auctor, sed nibh etiam saepe velit viverra, pretium inceptos, nostra erat lectus habitasse varius elementum amet, et interdum lorem adipiscing volutpat aenean. Eu odio et at erat eu hac.'), (2, 'Euismod ligula cum vestibulum, luctus velit laoreet, magna ullamcorper ac. Urna cras wisi sed scelerisque egestas orci, nam laoreet gravida in purus, sed felis aenean in ipsum. Sociis et ligula elementum odio eu wisi, id felis aliquet commodo, class semper vestibulum omnis a sodales dapibus. Et tortor orci in donec risus pellentesque, ipsum id egestas neque amet vitae pellentesque. Amet gravida rutrum pellentesque, nulla nulla, posuere odio orci fermentum nisl vestibulum, non in, ac in fermentum. Id integer eu vel imperdiet ut, suspendisse diam nibh, purus adipiscing ut, interdum nulla. Id et, lobortis sed aut massa suspendisse in, felis et adipiscing. Sed tincidunt iusto aliquam tellus, urna volutpat quis, suspendisse aliquam quis erat. + '), (3, 'This is my new crested gecko. Isn''t he great?'), (58, 'Leo mc'), (57, 'gh'), (56, 'f'), (55, 's'), (54, 'g'), (53, 'n'), (52, 'tr'), (51, 'blog test mc'); -- -------------------------------------------------------- -- -- Table structure for table `Teaser` -- CREATE TABLE IF NOT EXISTS `Teaser` ( `tid` int(10) unsigned NOT NULL auto_increment, `teaser` varchar(500) collate latin1_general_ci NOT NULL, PRIMARY KEY (`tid`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=58 ; -- -- Dumping data for table `Teaser` -- INSERT INTO `Teaser` (`tid`, `teaser`) VALUES (1, 'Welcome to the Reptile Pet Care online guide! This Webpage is currently under construction. Please take a look at the rest of the site and watch this space for futture announcements. '), (2, 'This Blog is devoted to posting pictures of your pets.'), (57, 'Leo teaser'); -- -------------------------------------------------------- -- -- Table structure for table `User` -- CREATE TABLE IF NOT EXISTS `User` ( `uid` int(10) unsigned NOT NULL auto_increment, `fname` varchar(20) collate latin1_general_ci NOT NULL, `lname` varchar(40) collate latin1_general_ci default NULL, `email` varchar(50) collate latin1_general_ci NOT NULL, `password` varchar(20) collate latin1_general_ci NOT NULL, `imageID` int(10) unsigned default NULL, PRIMARY KEY (`uid`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=7 ; -- -- Dumping data for table `User` -- INSERT INTO `User` (`uid`, `fname`, `lname`, `email`, `password`, `imageID`) VALUES (1, 'Garry', 'McCabe', 'mccabegarry@hotmail.com', 'dsgdsg', NULL), (2, 'Karen', 'Chung', 'uid2@domainname.com', 'rghdhdf', 1), (3, 'Patrick', NULL, 'uid3@domainname.com', 'dfhdhd', 2), (4, 'Sandy', NULL, 'uid4@domainname.com', 'gsrgg', 3), (5, 'Marion', 'Moon', 'uid5@domainname.com', 'dgdggd', NULL), (6, 'Jerome', 'Wallace', 'uid6@domainname.com', 'sgsfgs', 4); -- -------------------------------------------------------- -- -- Table structure for table `Video` -- CREATE TABLE IF NOT EXISTS `Video` ( `vid` int(10) unsigned NOT NULL auto_increment, `url` varchar(200) collate latin1_general_ci NOT NULL, PRIMARY KEY (`vid`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=3 ; -- -- Dumping data for table `Video` -- INSERT INTO `Video` (`vid`, `url`) VALUES (1, 'http://youtu.be/CKxMht9nnhw'), (2, 'http://youtu.be/qA3dIYp2K4U'); Here's the sql error from my php query: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CREATE TABLE IF NOT EXISTS `Blog` ( `bid` int(10) unsigned NOT NULL auto_incr' at line 9 Anyone know where I'm going wrong please?
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.