PHP-MySQL-JSON登录系统

PHP-MySQL-JSON登录系统,php,mysql,json,Php,Mysql,Json,我目前正在开发一个登录系统(通过使用两个文本字段,用户将被重定向,该系统非常有效)。然而,当我正在开发一个移动应用程序时,用JSON做这件事会容易得多,我也不完全确定从哪里开始。我基本上希望做的是使用https post请求(从我的应用程序),以便它可以请求: 我已经创建了一个基本的示例,但我并不打算通过URL传入参数,因为我的代码目前只是在MySQL数据库中查找用户,并以JSON输出用户。我希望能够通过URL传入用户名和密码参数,然后如果用户名/密码是否在数据库中,则输出“成功”或“错误”JS

我目前正在开发一个登录系统(通过使用两个文本字段,用户将被重定向,该系统非常有效)。然而,当我正在开发一个移动应用程序时,用JSON做这件事会容易得多,我也不完全确定从哪里开始。我基本上希望做的是使用https post请求(从我的应用程序),以便它可以请求:

我已经创建了一个基本的示例,但我并不打算通过URL传入参数,因为我的代码目前只是在MySQL数据库中查找用户,并以JSON输出用户。我希望能够通过URL传入用户名和密码参数,然后如果用户名/密码是否在数据库中,则输出“成功”或“错误”JSON响应

<?php
$host     = "localhost";
$username = "root";
$password = "password";
$db_name  = "test";
$con = mysql_connect("$host", "$username", "$password") or die("cannot connect");
mysql_select_db("$db_name") or die("cannot select DB");
$sql    = "select * from test_table";
$result = mysql_query($sql);
$json   = array();
if (mysql_num_rows($result))
    {
      while ($row = mysql_fetch_row($result))
       {
    $json['items'] = $row;
       }
    }
mysql_close($db_name);
echo json_encode($json, JSON_PRETTY_PRINT);
?>

编辑

我现在已经开始在另一个系统上工作,这正是我想要做的(在这里找到一个例子:)除了每次我请求类似的东西时——我得到JSON错误1代码

<?php
$host = "localhost"; // Host name
$db_username = "root"; // Mysql username
$db_password = "password"; // Mysql password
$db_name = "test"; // Database name
$tbl_name = "test_table"; // Table name

// Connect to server

mysql_connect("$host", "$db_username", "$db_password") or die("cannot connect");

// Select the database

mysql_select_db("$db_name") or die("cannot select DB");

// Get the login credentials from user

$username = $_POST['username'];
$userpassword = $_POST['password'];

// Secure the credentials

$username = mysql_real_escape_string($_POST['username']);
$userpassword = mysql_real_escape_string($_POST['password']);

// Check the users input against the DB.

$query = "SELECT * FROM test_table WHERE user = '$username' AND password = '$userpassword'";
$result = mysql_query($query) or die("Unable to verify user because " . mysql_error());
$row = mysql_fetch_assoc($result);

if ($row['total'] == 1) {

    // success

    $response["success"] = 1;

    // echoing JSON response

    echo json_encode($response);
}
else {

    // username and password not found
    // failed

    $response["failed"] = 1;

    // echoing JSON response

    echo json_encode($response);
}

?>

尝试更改以下行,它应该可以工作。正如你描述的那样,我让它发挥作用

1-这里您将获得URL参数并进行清理

$username = $_GET['username'];
$userpassword = $_GET['password'];

$username = mysql_real_escape_string($username);
$userpassword = mysql_real_escape_string($userpassword);
2-在这里,您可以计算有多少行

更改
$row=mysql\u fetch\u assoc($result)

to
$total\u rows=mysql\u num\u rows($result)

3-在这里检查是否至少有一行

并将
if($row['total']==1){
更改为
if($total_rows==1){

这将给出输出
{“success”:1}

注1:这是为了解决您的请求和问题,但并不意味着总的来说是正确的方法或完美的解决方案

注2:我建议您考虑密码散列,使用post方法代替get,在mysql和输入敏感化的sted中使用mysqli或PDO,而不是使用URL传递用户名和密码。我建议您看看这个,它描述了我在注1中提到的一些事情


您可以创建一个没有MYSQL数据库的登录/注册系统,只需使用.json文件,该系统就可以在没有数据库的情况下运行。它既安全又简单

  • 有一个github存储库,您可以看到代码
  • 你可以在这里看到完整的文档

请注意,对于HTTP POST,通常会使用表单参数而不是查询字符串参数。@maytham我现在编辑了我的原始代码,以改进功能和安全性,但目前获得了一个error@maytham这是表单:&这是上面生成JSON响应的代码:-我实际上希望做的是omehow安全地将用户名和密码(作为参数)传递到URL>进行MySQL检查以查看用户名/密码是否在数据库中>如果它在数据库中,则应回显JSON“success”字符串,如果它不在数据库中,则为JSON“failed”字符串应该echoed@TobyClench你能准确地复制洞错误内容吗。@maytham输出JSON字符串的PHP脚本没有任何错误;它总是输出JSON错误响应,而不是JSON成功响应,因此(即使用户名和密码在数据库中)它将输出:{“failed”:1}对我来说,即使在做了您建议的更改之后,仍然会导致{“failed”:1}。也许这与行数有关?好的,谢谢,但在输入一些回音(检查查询、结果和行)后,查询是正确的,并且正在将用户名和密码传递到其中(感谢您建议的代码更改);结果在数据库中找到了用户详细信息,并且只返回了一行,这使我相信该行的计数方式有问题。我认为,这意味着我发现了一个问题,即为什么该行总是以失败的方式返回。那么,除此之外,我该如何计算查询所返回的行数呢生成?你的链接应该检查我添加的链接,并尝试下一阶段的工作,你可以了解更多。