POST method not working in laravel 5 - laravel-5

**THIS is my code for form creation and action is set to post but it is showing error "tokenmismatchexception in verifycsrftoken.php line 53 laravel 5.1";
<html>
<body>
<form action="/abc" method="post">
<b style="padding-right:110px;">Patient's Name:</b>
<input type="text" name="fullname" required><br><br>
<b style="padding-right:50px;">Required Blood Group:</b>
<option>A+</option>
<select>
<option>B+</option>
<option>AB+</option>
<option>O+</option>
<option>A-</option>
<option>B-</option>
<option>AB-</option>
<option>O-</option>
</select><br><br>
<input
type="submit"
style="position:absolute;right:170px;"
name="submit"
value="Request">
</form>
</body>
</html>

You need to include the CSRF token in your form data. Add:
<input type="hidden" name="_token" value="{{ csrf_token() }}">
right after your opening form tag.

Related

MJML converts links in email clients to mjt.lu

Laravel-mix-mjml plugin converts href links. All links work fine except one link which is a form with post request. It doesn't pass the parameters. In the browser the links are not converted. How can I fix this? Thanks
<mj-text>
<form action="https://www.carsale.com/login" method="post" target="_blank">
<input type="hidden" name="customerId" value="{{ $inquiry->customer->customer_id ?? '' }}">
<input type="hidden" name="authToken" value="{{ $inquiry->customer->auth_token ?? '' }}">
<button type="submit" name="submit">Lets go</button>
</form>
Lets go
</mj-text>

The POST method is not supported for this route in Laravel when external api sends data to me

I'm submitting these parameters to an external API at www.sample.com/gateway
<form action="www.sample.com/gateway/" method="POST">
<input type="hidden" name="MerchantCode" value="123abc">
<input type="hidden" name="MerchantRefNo" value="1234">
<input type="hidden" name="Particualrs" value="Transaction_type=Bill;Account Number=4321;Account Name=John Doe;Email Address=jd#test.com">
<input type="hidden" name="Amount" value="100">
<input type="hidden" name="PayorName" value="John Doe">
<input type="hidden" name="PayorEmail" value="jd#test.com">
<input type="hidden" name="ReturnURLOK" value="success.php">
<input type="hidden" name="ReturnURLError" value="{{ url('/paymentdetails') }}">
<input type="hidden" name="Hash" value="{{ md5('123abc' . '1234' . 100">
<button type="submit" class="btn btn-primary " value="POST TO GATEWAY"><i class="far fa-credit-card"></i> PAY NOW </button>
</form>
After which, on the ReturnURLError
Controller
public function getPaymentDetail()
{
$response = Http::get('https://sample.com/api.php');
return $response->json();
}
Route
Route::get('/paymentdetails', 'App\Http\Controllers\PaymentController#getPaymentDetail');
I am getting The POST method is not supported for this route. Supported methods: GET, HEAD. when external api sends back data to me.
I triend changing the route to post but then the error becomes The GET method is not supported in this route
Can someone help?

Change PUT request to POST request to include image update

I wrote a post edit method which at first consisted only of text. I did the update using a PUT request.
Now I want to include images to my posts, so I added it, and it works for my POST request of creating a post but doesn't work for my update post, when I want to change image, since PUT request doesn't support file uploads.
So now I'm stuck trying to change my update method from PUT request that only updates text to a POST request that updates both the text and an image if supplied.
This is the code I wrote so far:
public function update(Request $request, Post $post)
{
//store updated image
if($request->hasFile('image') && $request->file('image')->isValid()){
if($post->hasMedia('posts')) {
$post->media()->delete();
}
$post->addMediaFromRequest('image')->toMediaCollection('post', 's3');
}
$post->update(request()->validate([
'body' => 'required'
]));
return redirect($post->path());
}
I think that the $post->update doesn't work for the POST request. I just want to update a text if an update was given.
Using Laravel 6.
EDIT: My form layout structure (simplified)
<form action="action="/posts/{post}" method="POST">
#method('PUT')
#csrf
<div class="form-group row">
<input id="body" type="text" class="form-control" name="body" value="{{ old('body', $post->body) }}">
<input id="image" type="file" class="form-control" name="image">
<button type="submit" class="btn btn-primary">Update Post</button>
</form>
My routes:
Route::get('/posts/{post}/edit', 'PostsController#edit')->name('posts.edit');
Route::put('/posts/{post}', 'PostsController#update');
I tried your code and it worked fine with me , only added #csrf in form tag.
<form action="/posts/{post}" method="POST" enctype="multipart/form-data">
#csrf
#method('PUT')
<div class="form-group row">
<input id="body" type="text" class="form-control" name="body" value="{{ old('body', $post->body) }}">
<input id="image" type="file" class="form-control" name="image">
<button type="submit" class="btn btn-primary">Update Post</button>
</form>

laravel post request results in an error that method not allowed

<form id="login-form" action="brand-dashboard" method="post">
<span class"email">email</span>
<input type="email" name="email">
<span class"email">password</span>
<input type="password" name="password"><br><br>
<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
<input type="submit" value="login">
</form>
this is in my view page..then in my route..
Route::get('/brand-dashboard','BrandsController#auth_brand_admin');
in my Brands controller..i use the method like
public function auth_brand_admin()
{
return ('sample text');
}
but i got error when submiting the form ..the error is..
MethodNotAllowedHttpException in RouteCollection.php
Change your code to this
Route::post('/brand-dashboard','BrandsController#auth_brand_admin');
It's because you register route with GET method but send POST request.

Why if i have more than 1 form in the same page with the same input file ID it is take just the first ID?

I have more than form in the same file like
<form name="myForm">
<input type="hidden" value="1" id="lastphp">
<a onclick="ajaxFunction()" class="folloo">
</form>
<form name="myForm">
<input type="hidden" value="2" id="lastphp">
<a onclick="ajaxFunction()" class="folloo">
</form>
<form name="myForm">
<input type="hidden" value="3" id="lastphp">
<a onclick="ajaxFunction()" class="folloo">
</form>
<form name="myForm">
<input type="hidden" value="4" id="lastphp">
<a onclick="ajaxFunction()" class="folloo">
</form>
but when I click on any link it always take the first ID which is 1??
An ID needs to be unique to the page, as it is a key for that element.
Why not change id="lastphp" to class="lastphp" and pass the form to the function?
<form name="myForm">
<input type="hidden" value="1" class="lastphp">
<a onclick="ajaxFunction(this.parentNode)" class="folloo">Test</a>
</form>
<form name="myForm">
<input type="hidden" value="2" class="lastphp">
<a onclick="ajaxFunction(this.parentNode)" class="folloo">Test</a>
</form>
<form name="myForm">
<input type="hidden" value="3" class="lastphp">
<a onclick="ajaxFunction(this.parentNode)" class="folloo">Test</a>
</form>
<form name="myForm">
<input type="hidden" value="4" class="lastphp">
<a onclick="ajaxFunction(this.parentNode)" class="folloo">Test</a>
</form>
And haddle it like this
function ajaxFunction(form) {
var lastphp = form.getElementsByClassName("lastphp")[0].value;
alert(lastphp);
}
This can be alot easier with a framework, like jQuery.

Resources