PHP Post无法正确接收Vars

时间:2019-05-25 06:21:52

标签: php

我在这里有这个脚本:

<?php
//Tell the requester to output response as JSON
//header('Content-Type: application/json;charset=utf-8');

//POST information.
$name = $_POST['username'];
$pass = $_POST['password'];

$mysql_server = 'localhost';
$mysql_user = 'root';
$mysql_pass = '';
$mysql_dbname = 'test';

//Set up variables needed for middle-end
$return_code = 0;
$error_message = '';

//Connect to the Database
$conn = new mysqli($mysql_server, $mysql_user, $mysql_pass, $mysql_dbname);
if ($conn->connect_error)
{
    //Return an error (in JSON format) that MySQL server wont connect
    $return_code = -1;
    $error_message = 'Failed to connect to MySQL: ' . $conn->connect_error;
}
else
{
    //Query for a User/Pass match

    $sqlquery = "SELECT ucid FROM test WHERE ucid = '" . $name . "' AND password = '" . hash('sha256', $pass) . "'";
    $result = mysqli_query($conn, $sqlquery);
    if (mysqli_num_rows($result) > 0)
    {
     //On Successful User/Pass
            $return_code = 1;
    }
    elseif(mysqli_num_rows($result) == 0)
    {
            //On Failed User/Pass
            $return_code = 0;
            $error_message = 'Incorrect Username or Password';
    }
    else 
    {
        //Something went wrong
        $return_code = -1;
        $error_message = 'You messed something up real good.';
    }
}

if($return_code == 1)
{
    $jsonResults = array('return_code' => $return_code);
}
elseif ($return_code == (0 || -1))
{
    $jsonResults = array('return_code' => $return_code, 'error_message' => $error_message);
}


$echoJSON = json_encode($jsonResults, 1);
echo $echoJSON;
echo '<br><br>';
echo 'return code = ' . $return_code . ' and message: ' . $error_message;
echo '<br>Query Passed: ' . $sqlquery;
echo 'Username passed was: ' . $name . 'and Password passed was: ' . $pass;

?>

基本上,您将用户名和密码传递给它,然后脚本将连接到MySQL服务器,并对用户名+密码进行sha256散列后进行SQL查询。查询的重点是查看用户名和密码是否是有效的组合。如果其中之一是错误的,则查询应显示0个结果,从而导致显示“用户名或密码错误”消息

但是,当我运行脚本并回显结果时,显然什么都没有传递:

<b>Notice</b>:  Undefined variable: jsonResults in <b>C:\xampp\htdocs\alpha-test\db.php</b> on line <b>62</b><br />
null<br><br>return code = 0 and message: Incorrect Username or Password<br>Query Passed: SELECT ucid FROM test WHERE ucid = '' AND password = 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'Username passed was: and Password passed was: 

我不知道我在做什么错。

3 个答案:

答案 0 :(得分:0)

<b>Notice</b>:  Undefined variable: jsonResults in <b>C:\xampp\htdocs\alpha-test\db.php</b> on line <b>62</b><br />

首先我注意到上述错误,要删除此错误,应全局声明 $ jsonResults ,当前它的作用域是局部的,可阻止您在其中设置值。

下一个问题是空白的用户名和密码,为此,请从您发送这些信息的地方共享您的表格。可能您缺少 name 属性或某些拼写错误。

答案 1 :(得分:0)

问题似乎与邮递员有关(我从未使用过)。最好的测试方法是在新页面上创建一个表单,然后实际发布数据并确保其正常工作。

1)当我无法弄清为什么某事不起作用时,我简化了问题并减少了其他错误导致问题的可能性。因此,通过添加这些行来更改您的php脚本。

$name = $_POST['username'];
echo $name; 
exit;  

您需要确保设置了$ name。

2)创建一个发布到此页面的表单。

<form action="yourscript.php" method="post">
username: <input type=text name="username"><br>
password: <input type=text name="password"><br>
<input type=submit value="submit">
</form>

提交表格并确保在捕获mysql或其他问题之前,已捕获$ _POST ['username']和$ _POST ['password']。

3)就像您知道的那样,我在本地尝试了此操作,并且在发布该表单然后正确设置$ name时没有问题。因此,问题一定与邮递员的设置有关。

GL

答案 2 :(得分:0)

您正在使用$ _POST检索GET参数。这就是为什么您无法获得用户名/密码的原因。

正如您所说,您正在对此请求进行测试,这意味着您正在URL中传递参数:

  

alpha-test / db.php?username = test&password = test

您必须将$ _GET替换为$ _POST或$ _REQUEST。我在下面编写了一个简单的工作代码。我在这里使用$ _REQUEST能够使用相同的代码检索GET / POST变量。

<?php

//POST information.
$name = $_REQUEST['username'];
$pass = $_REQUEST['password'];

$sqlquery = "SELECT ucid FROM test WHERE ucid = '" . $name . "'' AND password = '" . hash('sha256', $pass) . "'";

echo $sqlquery;

?>