'Ajax post does not give value to php file, post becomes get

I have this ajax function for login.

Edit: I just noticed that this server runs php7 while other server where the login does work uses php5. What has changed in php that this script doesn't work anymore?

Edit 2: Looks like the server request method isn't post but changed to get, why?

Solution: needed to remove the .php from url: "./ajaxcall/login.php", because I use pretty url htaccess.😅

var InName = $('#InName').val();
        var InPass = $('#InPass').val();
        alert(InName);
        $.ajax({
            type: "POST",
            url: "./ajaxcall/login.php",
            dataType: "json",
            data: {InName:InName, InPass:InPass},
            error: function (request, error) {
                console.log(arguments);
                alert("Inlog Can't do because: " + error);
            },
            success : function(data){
                if (data.code == "200"){
                    $("#InErEr").html(data.msg);
                    //window.location.reload(true);
                } else {
                    $("#InErEr").html(data.msg);
                    $('.lds-dual-ring').animate({opacity: 0}, 300);
                }
            }
        });

On the alert(InName); I get the correct value of the username. But when I check in my php file $_POST['InName'] it is empty.

Part of php file

include('../config.php');

if(empty($_POST['InName'])) {
    $Ierror = 'Username is required.';
}
if($_POST['InPass'] == '') {
    $Ierror = 'Password is required.';
}
$username = $_POST['InName'];
$passwordL = $_POST['InPass'];
// count user in between //
if($Inlognumber_of_rows == 0) {
    $Ierror = 'Username not found.';
} else {
    // password check //
    if(password_verify($salty_pass, $hashed_password)) {
    } else {
        $Ierror = 'Password incorrect.';
    }
}
if ($Ierror == '') {
// do login //
} else {
    $showerror = '<span style="color:#F00;">'.$Ierror.$username.$passwordL.$_POST['InName'].$_POST['InPass'].'</span>';
    echo json_encode(['code'=>404, 'msg'=>$showerror]);
    exit;
}

In the return message, $showerror I only get, Username not found, without the posted values. So the login is not working because of empty values? User is also present in the database of course. I also don't get the empty $_POST errors. So to cap up, in javascript I get the correct value for InName but not in php.



Solution 1:[1]

Solution: needed to remove the .php from url: "./ajaxcall/login.php", because I use pretty url htaccess.?

Solution 2:[2]

You are close but your error catch is not correct ... try this (Jquery):

var InName = 'something';
var InPass = 'morething';
$.post("./ajaxcall/login.php", {
    InName: InName,
    InPass: InPass
  }, function(data, status) {
    console.log(data, status);
  }).done(function() {
    alert("second success");
  })
  .fail(function() {
    alert("error");
  })
  .always(function() {
    alert("finished");
  });

on your php file just do print_r($_POST); and you will receive this in your console...:

Array
(
    [InName] => something
    [InPass] => morething
)
 success

Basically you were trying to print the error where you should have consoled log the request.responeText...

A good trick to know if posts arrived to the php even if the console.log won't show is doing this in the php file:

<?php
print_r($_POST) ;

$newfile = fopen('newfile.txt','a');
fwrite($newfile,json_encode($_POST));
fclose($newfile);

This will print and also store on a local file the post data....

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Kip
Solution 2