External Form redirects to access denied and doesnt send email
Permalink
I wrote this simple form that is meant for a client to put in their information and allow the business to get it through email.
The code worked fine but I accidentally lost it when C5 rebooted and so I'm remaking it.
I thought I made an exact copy though when I click submit the page is redirected to an access denied page and no email is sent.
I'm fairly new to PHP and C5 (as you can tell with how basic the code is) so it may be a simple problem though I haven't been able to find anything out.
I've tried changing the action and renaming my files along with toying with redirecting it to the website page but no email is sent if I do that.
Here's my code. Thanks in advance for any help!
The code worked fine but I accidentally lost it when C5 rebooted and so I'm remaking it.
I thought I made an exact copy though when I click submit the page is redirected to an access denied page and no email is sent.
I'm fairly new to PHP and C5 (as you can tell with how basic the code is) so it may be a simple problem though I haven't been able to find anything out.
I've tried changing the action and renaming my files along with toying with redirecting it to the website page but no email is sent if I do that.
Here's my code. Thanks in advance for any help!
<?php namespace Application\Block\ExternalForm\Form\Controller; use Core; use Loader; use Concrete\Core\Controller\AbstractController; class ContactusForm extends AbstractController { public function action_contactus_form($bID = false) { if ($this->bID == $bID) { $form = Loader::helper("form"); $name = $_POST['name']; $visitor_email = $_POST['email']; $phone = $_POST['phone']; $message = $_POST['message'];
Viewing 15 lines of 29 lines. View entire code block.
<?php $form = Loader::helper('form'); defined('C5_EXECUTE') or die("Access Denied."); ?> <form method="post" class="form" action="<?=$view->action('contactus_form')?>"> <input type="text" name="name" placeholder="Your Name: " required/> <br /> <input type="email" name="email" placeholder="Your Email: " required/> <br /> <input type="tel" name="phone" placeholder="Your Phone Number: 012-345-6789 (optional) "pattern="[0-9]{3}-[0-9]{3}-[0-9]{4}"> <br /> <textarea name="message" placeholder="Your Message for us!" cols="3" rows="3" required> </form>
The $response is an alert if it sends through I think it was in the test form in the concrete external form file so I thought to try and add it to maybe help. I have deleted it realizing it's unnecessary.
The header is supposed to show the location of the page that the form is in. I don't know if I should delete that also. I tried to see if it changed anything and it didn't have any impact on the issue I'm experiencing.
The header is supposed to show the location of the page that the form is in. I don't know if I should delete that also. I tried to see if it changed anything and it didn't have any impact on the issue I'm experiencing.
Try the following approach (design to suit).
view.php:
controller.php:
You can also make it fancy with Ajax so that the page doesn't refresh after submitting the form. The addon does that anyway.
view.php:
controller.php:
public function action_submit($token = false, $bID = false) { $data = $this->request->request->all(); if ($this->bID != $bID) { return false; } elseif ($this->app->make('token')->validate('contact_form', $token)) { if ($this->ValidateForm($data)) { $this->MailForm($data); // do something after form sent } else { // do something if form validation failed } }
Viewing 15 lines of 28 lines. View entire code block.
You can also make it fancy with Ajax so that the page doesn't refresh after submitting the form. The addon does that anyway.
Alright, I'll try the code in my php. It may be a little bit before I know if I'm failing or not since I don't know too much I'll have to trial and error and probably change the code.
I strongly appreciate the help because I've been stuck for a couple of weeks now on this specific problem!
I strongly appreciate the help because I've been stuck for a couple of weeks now on this specific problem!
So when I try it the code $app->make("token") pulls an error named " Call to a member function make() on null " pops up.
I've tried including code in a function make() but it won't register the code in my view.php file.
I've tried including code in a function make() but it won't register the code in my view.php file.
<?php defined('C5_EXECUTE') or die("Access Denied."); $form_action = $view->action('submit', $app->make('token')->generate('contactus_form')); ?> <form id="form" action="<?php echo $form_action; ?>" method="post" accept-charset="utf-8"> <input type="text" name="name" placeholder="Your Name:" /> <span class ="error"><?= $name_error ?></span> <br /> <input type="email" name="email" placeholder="Your Email:" /> <span class ="error"><?= $email_error ?></span> <br /> <input type="tel" name="phone" placeholder="Your Phone Number: 012-345-6789 (optional)" pattern="[0-9]{3}-[0-9]{3}-[0-9]{4}"> <br /> <textarea name="message" placeholder="Your Message for us!" cols="3" rows="3" ></textarea> <span class ="error"><?= $message_error ?></span> <br />
Viewing 15 lines of 17 lines. View entire code block.
You need to get the $app object, it doesn't necessarily already exist. See:
https://documentation.concrete5.org/developers/appendix/concrete5-ve...
https://documentation.concrete5.org/developers/appendix/concrete5-ve...
Thank you! The error is no longer popping up but it is still routes to access denied page.
What's the header for?
What's the $response?
You may have a look athttps://www.concrete5.org/marketplace/addons/contact-form1...
e.g.