我一直想弄清楚这里出了什么问题。我从我的Android应用程序发送POST数据。用户名和密码。两者都编码。我的php文件通过HTTP调用接收发布数据,我已经对此进行了测试并读取了发送的数据并且它100%正确。
通过我的应用程序,我发送管理员:管理员。与脚本连接的数据库有一行填充相同的结果用户名:Admin,密码:Admin。
在我的PHP代码中,我创建了三个检查。 RowCount 1(找到一个结果)?
if ($num_rows == 1)
{
$totalData["success"] = 1;
$totalData["message"] = "Logged in successfully.";
echo json_encode($totalData);
}
Rowcount 0(什么也没找到)
elseif ($num_rows == 0)
{
$totalData["success"] = 0;
$totalData["message"] = "Could not find user. Please check your username and/or password.";
echo json_encode($totalData);
}
还有一个(永远不会被调用,因为它总是0或1个结果)。我把它放在测试目的。
else
{
$totalData["success"] = 3;
$totalData["message"] = "No data found. fix your shit.";
echo json_encode($totalData);
}
如果num_rows == 1,我希望得到第一部分。管理员:管理员存在,所以它应该挂钩到if语句。问题是,它没有这样做。它给了我elseif声明。它没有在我的数据库中找到具有Admin:Admin。
值的单个结果我会在帖子中返回数据集(通过我的应用程序发送),以向您显示其有效数据。
脚本返回的JSON数据。
04-26 20:59:52.099 2984-3000/com.wachisu.insertapp V/userInserter﹕ {"message":"Could not find user. Please check your username and\/or password.","isSuccess":0,"sesUsername":"admin","sesPassword":"admin","sesDB":"user1","success":0}
我把以下脚本放在一起:
<?php
if (isset($_POST['Username']) && isset($_POST['Password']) && isset($_POST['Database']))
{
$username = $_POST['Username'];
$password = $_POST['Password'];
$database = $_POST['Database'];
$totalData = array(
"message" => "",
"isSuccess" => 0,
"sesUsername" => $username,
"sesPassword" => $password,
"sesDB" => $database
);
try
{
$db = new PDO('mysql:host=localhost;dbname=user1', 'root', '');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$checkUsers = "SELECT
username, password
FROM
users
WHERE
username = :username
AND
password = :password";
$userStmt = $db->prepare($checkUsers);
$userStmt->execute(array(
':username' => $username,
':password' => $password
));
$user = $userStmt->fetchAll();
$num_rows = count($user);
if ($num_rows == 1)
{
$totalData["success"] = 1;
$totalData["message"] = "Logged in successfully.";
echo json_encode($totalData);
}
elseif ($num_rows == 0)
{
$totalData["success"] = 0;
$totalData["message"] = "Could not find user. Please check your username and/or password.";
echo json_encode($totalData);
}
else
{
$totalData["success"] = 3;
$totalData["message"] = "No data found. fix your shit.";
echo json_encode($totalData);
}
}
catch(PDOException $e)
{
$message = $e->getMessage();
}
$db = NULL;
}
我一直在尝试发送用户名:admin,密码:admin。
我的数据库如下所示:
我只知道我忽略了一些东西,一些小事。我的大脑有些放弃了。
答案 0 :(得分:0)
我在您的帖子中看到的您并不关心数据。
但这可能是数据问题。
所以你写了用户名:管理员,密码:管理员
您已在数据库中以用户名:admin,密码:admin 向我们提供屏幕截图。
你发帖时真的检查过好的数据吗?
它应该是小写:admin
,admin
。
编辑1
从phpMyAdmin查看新屏幕截图,我对您的列名password
有另一种猜测。似乎MySQL将密码识别为关键字,而不是列名。要解决此问题,您应该使用该字段名称周围的反引号:
SELECT *
FROM users
WHERE
username = 'admin'
AND
`password` = 'admin'
答案 1 :(得分:0)
信不信由你,我的数据库就是问题所在。没有什么可以选择。我创建了一个具有完全相同值的新数据库,并且DID可以工作。感谢所有试图提供帮助的人!