我在这里有这个脚本:
<?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:
我不知道我在做什么错。
答案 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;
?>