<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbName = "escape_room";
$user_username = $_POST['Input_user'];
$user_password = $_POST['Input_pass'];
$conn = new mysqli($servername, $username, $password, $dbName);
if (!$conn){
die("Cound not Connect: " . mysqli_connect_error());
}
$sql = "SELECT pass FROM escape_room WHERE user = '".$user_username."' ";
$result = mysqli_query($conn, $sql);
//Get the result and confirm login
if (mysqli_num_rows($result)>0){
while($row = mysqli_fetch_assoc($result)){
if ($row['pass'] == $user_password){
echo "login success";
echo $row['pass'];
}else{
echo "password incorrect";
echo "password is = ". $row['pass'];
}
}
}else{
echo "user not found";
echo "password is = ". $row['pass'];}
Я создал WWWForm в Unity C Script и попытался получить значение Mysqlitedatabase, запустив Login.php на сервере XAMPP. Однако мне не удалось подтвердить, совпадают ли идентификаторы. В консоли появится только код, написанный на языке html.
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns = "http://www.w3.org/1999/xhtml" lang = "en" xml:lang = "en">
<head>
<title>Object not found!</title>
...
Что я должен делать? Спасибо за чтение.
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;
public class gamemanager : MonoBehaviour {
[Header("LoginPanel")]
public InputField ID;
public InputField PW;
[Header("CreateAccountPanel")]
public InputField New_ID;
public InputField New_PW;
public string LoginUrI;
// Use this for initialization
void Start () {
LoginUrI = "localhost/escape_room/Login.php";
}
public void LoginBtn()
{
StartCoroutine(LoginToDB(ID, PW));
}
IEnumerator LoginToDB(InputField username, InputField password)
{
Debug.Log(username.text);
Debug.Log(password.text);
WWWForm form = new WWWForm();
form.AddField("Input_user", username.text);
form.AddField("Input_pass", password.text);
WWW webRequest = new WWW(LoginUrI, form);
yield return webRequest;
Debug.Log(webRequest.text);
}
public void CreateAccountBtn()
{
}
}
+ Добавить) [Это то, что я реализовал в скрипте Unity C. У меня есть InputField, и я использовал метод AddField, чтобы принять это inputField и передать его php. Кроме того, я создал объект WWW, чтобы разрешить доступ к Login.php через сервер. В конце я протестировал через Debug.Log, чтобы увидеть, насколько хорошо будут выглядеть результаты авторизации. ]
Вам действительно следует обратиться к руководству, прежде чем приступить к этому проекту. Ввод данных пользователем непосредственно в SQL - это красный флаг, как и пароли в виде простого текста. Также зачем перебирать результирующий набор, разве не существует только 1 пользователь на имя пользователя? Если нет, то это тоже проблема безопасности, потому что имя пользователя john может принадлежать двум людям.
@ user3783243 Это очень помогло. Я изменил код, может это быть лучший код? $ numrows = mysql_num_rows ($ проверка); if ($ numrows == 0) {die ("ID не существует. \ n"); }
Вы не можете использовать функции mysql_ с mysqli. Используйте mysqli везде, вы вернетесь на много лет назад, если перейдете к mysql_
@MilindSingh В Unity я объявляю LoginUrI = 'localhost / escape_room / Login.php' следующим образом: Это неправильный URL?
Можете ли вы запустить "localhost / escape_room / Login.php" по URL-адресу в браузере?
@MilindSingh Да, я сделал это. Не было никаких ошибок, кроме предупреждения о том, что входное значение должно быть выполнено из скрипта Unity C.
давайте посмотрим ваш сценарий WWWform C#, я думаю, он принимает только один пост и строковое значение
@comphonia Добавил в текст. Спасибо.






WWWform
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;
using UnityEngine.Networking;
public class gamemanager : MonoBehaviour {
[Header("LoginPanel")]
public InputField ID;
public InputField PW;
[Header("CreateAccountPanel")]
public InputField New_ID;
public InputField New_PW;
string LoginUrI = "http://localhost/escape_room/login.php";
// Use this for initialization
void Start () {
}
public void LoginBtn()
{
StartCoroutine(LoginToDB(ID, PW));
}
IEnumerator LoginToDB(InputField username, InputField password)
{
Debug.Log(username.text);
Debug.Log(password.text);
WWWForm form = new WWWForm();
form.AddField("Input_user", username.text);
form.AddField("Input_pass", password.text);
// Make Post Request
using (var w = UnityWebRequest.Post(LoginUrI, form))
{
yield return w.SendWebRequest();
if (w.isNetworkError || w.isHttpError) {
Debug.Log(w.error);
}
else {
Debug.Log(w.downloadHandler.text);
}
}
}
public void CreateAccountBtn()
{
}
}
Протестируйте php-код, замените его Login.php этим, чтобы убедиться, что вы сначала получили значения.
<?php
if (isset($_POST) && !empty($_POST)){
echo "Successful post";
var_dump($_POST);
} else die("Error: post not successful");
?>
Общая / неизвестная ошибка HTTP. Я использую сервер xampp, MySql, и не знаю, почему получаю сообщение об ошибке.
Я тоже использую оба, не знаю почему, это работает для других вещей?
Нет, я запускал его только на своем ноутбуке.
скопируйте новый код C#, просто протестируйте его в единстве и работайте. публичная строка испортила это, я также установил ее вне Start ()
вы должны увидеть результаты как отладку единства, не заходя в браузер, чтобы вы знали, что он опубликован
Ух ты. Вы - гений. Почему бы мне не подумать об этом? Я получил от тебя великую благодать. Спасибо!
Рад, что смог помочь
Файл PHP, содержащий код, не найден сервером. Возможно, вы выполняете неправильный URL-адрес или файл.