Welcome Guest, Not a member yet? Register   Sign In
form POST to same page, request method remains GET
#1

(This post was last modified: 04-17-2021, 08:42 AM by BFlokstra.)

I'm trying to post a form to the current page and process it there. To this end I addes a matched route to Routes.php:
PHP Code:
$routes->match(['get''post'], 'klanten/(:segment)''Klanten::bewerk/$1'); 

 I do not have a route set up that overwrites this route. Here is the full routes list:
PHP Code:
$routes->match(['get''post'], 'soorten/(:segment)''Soorten::index/$1');
$routes->match(['get''post'], 'deurbel/(:segment)/(:segment)''Deurbel::index/$1/$2');
$routes->get('klanten''Klanten::index');
$routes->post('klanten/toevoegen''Klanten::toevoegen');
$routes->match(['get''post'], 'klanten/(:segment)''Klanten::bewerk/$1');
$routes->get('/''Dashboard::index'); 

When I post the form somehow the request method keeps coming back as get instead of post... Here is my form HTML:

Code:
<form action="/klanten/<?= esc($klant['slug']) ?>/" method="post">
                <div class="row">
                    <div class="col-12">
                        <div class="form-group">
                            <label for="naam">Naam: </label>
                            <input type="text" class="form-control" name="naam" id="naam" value="<?= $klant['naam'] ?>">
                        </div>
                        <div class="form-group">
                            <label for="woonplaats">Woonplaats: </label>
                            <input type="text" class="form-control" name="woonplaats" id="woonplaats" value="<?= $klant['woonplaats'] ?>">
                        </div>
                    </div>
                </div>
                 <?php if(isset($validation)): ?>
                     <div class="row">
                        <div class="alert alert-danger" role="alert">
                            <?= $validation->listErrors() ?>
                        </div>
                     </div>
                    <?php endif;?>
                    <div class="row">
                        <div class="row">
                            <div class="col-12 col-sm-4">
                                <button type="submit" class="btn btn-success">Opslaan</button>
                            </div>
                        </div>
                    </div>
            </form>

As you can see, I do have the forms method as post. 
The debug bar does show the route is there:

Image doesn't work, here is the link: http://development.medicalcrossteam.nl/i...ns-get.png

By now I'm ready to smash my head against the wall, because I can't figure out what is going on here. I'm hopinh you guys can help me and prevent me from doing that  Confused
Reply
#2

I think you need to remove the trailing slash on this line:
PHP Code:
<form action="/klanten/<?= esc($klant['slug']) ?>/" method="post"

Like this:
PHP Code:
<form action="/klanten/<?= esc($klant['slug']) ?>" method="post"

Because CI uses regex to match the routes and I think you won't get a match with a trailing slash.

The user guide gives this example:

Quote:
PHP Code:
$routes->add('product/(:segment)''Catalog::productLookup/$1'); 

will only match product/123 and generate 404 errors for other example.
CodeIgniter 4 tutorials (EN/FR) - https://includebeer.com
Reply
#3

Thanks! I have been working at this problem for the better part of a day and couldn't figure it out. And one removing little slash was all it took! One this is for sure..... I'm not going to forget this one ever again!
Reply
#4

Yeah it sucks when that happen. Regex can be a pain to use, even when we don't know we're using them! Wink
CodeIgniter 4 tutorials (EN/FR) - https://includebeer.com
Reply
#5

Yeah! I tried CI a while back because of it's ease of use and the fact that it's not filled with "everything you ever might, maybe, someday, perhaps might want to use. It does what you need it to do. If it doesn't? You can still add other libraries to it.

For me as a new user, plus someone who's been out of the php scene singe 2014 and just now coming back into it, there are still headache moments over simple stuff like this ;-)
Reply




Theme © iAndrew 2016 - Forum software by © MyBB