2015-06-29 74 views
2

我目前正在研究一个登录系统(这很好,通过使用两个文本字段,然后用户重定向)。但是,由于我正在开发移动应用程序,因此在JSON中执行此操作会更容易,而且我不完全确定从何处开始。我基本上想要做的是使用https请求(从我的应用程序),所以它会请求:https://www.example.com/login.php?username=username&password=passwordPHP MySQL的JSON登录系统

我已经创建了一个基本的示例,但它不是我想要做的关于传递在通过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); 
?> 

我现在已经开始在另一个系统,这是相当多的东西,我希望做的工作的编辑(之后我发现这里一个例子:http://www.dreamincode.net/forums/topic/235556-how-to-create-a-php-login-with-data-from-mysql-database/),只是每次我要求什么时间像https://www.example.com/login.php?username=root&password=password - 我得到的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); 
} 

?> 
+3

注意一个HTTP POST,一个通常使用表单参数而不是查询字符串参数。 – J0e3gan

+0

@maytham我现在编辑了我的原代码以改进功能和安全性,但目前出现错误 –

+0

@maytham格式如下:http://codeshare.io/ETRcX&这里是上述生成JSON响应的代码:http:/ /codeshare.io/SERMM - 我实际上想要做的是以某种方式安全地将用户名和密码(作为参数)传递到URL中>进行MySQL检查以查看用户名/密码是否在数据库中>如果它在数据库中那么应该回显一个JSON“成功”字符串,如果它不在数据库中,那么JSON“失败”字符串应该回显 –

回答

2

尝试改变以下行,它应该工作。按照您描述的方式,我可以开始工作。

1-在这里,您将获得URL参数并进行消毒。

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

$username = mysql_real_escape_string($username); 
$userpassword = mysql_real_escape_string($userpassword); 

2 - 在这里,你算你有多少行有

变化$row = mysql_fetch_assoc($result);

$total_rows = mysql_num_rows($result);

3-在这里,你检查,如果你有至少1列。

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

这应该给输出{"success":1}

注1:这是解决你的要求和问题,但并不一定意味着在一般正确的方法或完美的解决方案。

注2:我建议你认为密码哈希,在获得,使用库MySQLi或PDO的STED MySQL和输入敏感的,而不是使用URL传递用户名和密码代替POST方法。我建议你看看这个link它描述了我在笔记1中提到的一些事情。

http://www.wikihow.com/Create-a-Secure-Login-Script-in-PHP-and-MySQL

+0

仍导致{“failed”:1}对我来说,即使在做出你所建议的改变之后。也许这与行数有关? –

+0

好的,谢谢,但放入几个回声(检查查询,结果和行)后,查询是正确的,并获取传递给它的用户名和密码(感谢您提出的代码更改);结果找到数据库中的用户详细信息,并且只有一行返回,这导致我相信该行正在计数的方式出现问题 –

+0

这意味着,我认为,我发现问题是为什么它总是以失败告终。那么,我将如何去计算查询生成的行数呢? –