2015-06-29 5 views
2

В настоящее время я работаю над системой входа (которая отлично работает, используя два текстовых поля, и затем пользователь перенаправляется). Однако, поскольку я разрабатываю мобильное приложение, в JSON было бы намного проще сделать это, и я не совсем уверен, с чего начать. В основном я хочу использовать запрос https post (из моего приложения), чтобы он запрашивал: https://www.example.com/login.php?username=username&password=passwordPHP MySQL JSON Login System

Я создал базовый образец, но это не то, что я хочу сделать в отношении прохождения в параметре через 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

Обратите внимание, что для POST HTTP, один, как правило, используйте параметры формы, а не параметры строки запроса. – J0e3gan

+0

@maytham Теперь я изменил свой исходный код для улучшения функциональности и безопасности, но в настоящее время получаю ошибку –

+0

@maytham вот форма: http://codeshare.io/ETRcX & вот приведенный выше код для генерации ответа JSON: http://codeshare.io/SERMM - то, что я, по сути, хочу сделать, - это как-то безопасно передать имя пользователя и пароль (как параметры) в URL> сделать проверку MySQL, чтобы узнать, находится ли имя пользователя/пароль в базе данных> если оно находится в db то строка «успех» JSON должна быть эхом, а если она не находится в db, то строка «failed» 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) {

Это должно дать OUTPUT {"success":1}

Note1: Это должно решить вашу просьбу и вопрос, но не необходимым означает правильный подход или идеальное решение в целом.

Примечание2: Я хотел бы предложить вам подумать о хэшировании паролей, метод поста в смене получить, использовать MySQLi или PDO в STED из MySQL и ввод сенсибилизации и не использовать URL, чтобы передать имя пользователя и пароль. Я бы посоветовал вам взглянуть на это link, в котором описываются некоторые вещи, упомянутые в моей заметке1.

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

+0

По-прежнему получается {"failed": 1} для меня, даже после внесения изменений, которые вы предложили. Может быть, это связано с подсчетом строк? –

+0

Благодарим, но после ввода нескольких эхо (чтобы проверить запрос, результат и строку) запрос правильный и получает имя пользователя и пароль, переданные в него (благодаря предлагаемому изменению кода); результат находит данные пользователя в базе данных и возвращается только одна строка, которая заставляет меня полагать, что что-то не так с тем, как подсчитывается строка. –

+0

Это означает, что, я думаю, я нашел вопрос о том, как почему он всегда возвращается как неудачный. Итак, как еще я мог бы подсчитать количество строк, которые генерирует запрос? –

0

вы можете создать Войти/систему регистрации без базы данных MYSQL, используя только .json файл системы может функционировать без базы данных.это безопасный и простой