等待mysql服务器的响应很简单

I'm new to programming and wrote a basic login script (or rather watched a tutorial), but my output in Unity is at first "User nicht gefunden" and about one second later "User gefunden".

My question: Can I somehow wait for a response from the mysql server in a easy way and still recognize a missing connection?

Unityscript:

public string inputusername;
public string inputpassword;

public string URL = "http://localhost/login.php";


void Start () {

}


void Update () {
    if (Input.GetKeyDown(KeyCode.L))
    {
       StartCoroutine(LoginToDB(inputusername, inputpassword));
    }
}

IEnumerator LoginToDB(string username, string password)
{
    WWWForm form = new WWWForm();
    form.AddField("usernamePost", username);
    form.AddField("passwordPost", password);

    WWW www = new WWW(URL, form);
    yield return www;


    if(www.text == "wrong")
    {
        Debug.Log("User nicht gefunden");
    }
    if(www.text == "correct")
    {
        Debug.Log("User gefunden");
    }


}

Phpscript:

$servername = "localhost";
$username = "root";
$password = "********";
$dbName = "test";

$user_username = $_POST["usernamePost"];
$user_password = $_POST["passwordPost"];

 $conn = new mysqli($servername, $username, $password, $dbName);

if(!$conn){
    die("Verbindung Fehlgeschlagen!". mysqli_connect_error());
}

$sql = "SELECT password FROM users WHERE username = '".$user_username."' ";
$result = mysqli_query($conn, $sql);



if(mysqli_num_rows($result) > 0){

    while($row = mysqli_fetch_assoc($result)){

         if($row['password'] == $user_password){
             echo "correct";
         } 

         else{

                echo "wrong";
         }

    }

}else {
    echo"not here";

}

Sorry in advance for the probably simple question.

dongqiao8417
dongqiao8417 不,如果您的mysql服务器脱机并且没有响应连接请求,那么它将假定无法访问mysql服务器,在此配置中定义此存储的时间
接近 2 年之前 回复
douba5540
douba5540 那么'mysql.connect_timeout'会在一段时间后终止与服务器的连接吗?
接近 2 年之前 回复
duanjuelian4640
duanjuelian4640 没有清楚地理解这个问题,但mysql.connect_timeout可能是你可能正在寻找的php.ini中的设置。
接近 2 年之前 回复
doufocheng6233
doufocheng6233 首先,我得到的密码是错误的,只有大约一秒后,密码才被真正识别出来。所以我的第一次尝试只有在通过www.text提供“答案”的正确密码时才会这样。但是,我不知道如何判断服务器是否完全连接。因此,为了使我的问题更加精确:是否有一个函数使else回显“错误”,直到mysql服务器没有返回一段时间,然后检查服务器是否完全连接。
接近 2 年之前 回复
ds122455
ds122455 我读过这篇文章但是没有得到它。你究竟是什么问题?
接近 2 年之前 回复
dongsigan2044
dongsigan2044 好的我已经修改了我的帖子。也谢谢你。
接近 2 年之前 回复
douzhi9921
douzhi9921 也谢谢你的建议。就像我刚开始说的那样它应该只是一种测试。
接近 2 年之前 回复
dongzhenge2014
dongzhenge2014 感谢您的意见。但起初它应该只是一种测试。
接近 2 年之前 回复
doushi3202
doushi3202 请不要混淆条款。在使用MySQL时,SQLServer是Microsoft产品
接近 2 年之前 回复
douxiong4250
douxiong4250 还使用准备好的语句来帮助打击sql注入
接近 2 年之前 回复
drsl90685154
drsl90685154 您的代码容易受到SQL注入攻击。此外,您不应该在数据库中以明文形式存储密码,而是使用像bcrypt这样的散列函数。
接近 2 年之前 回复

1个回答



我在这里看到三个问题:</ p>

  while($ row = mysqli_fetch_assoc($ 结果)){

if($ row ['password'] == $ user_password){
echo“correct”;
}

else {

echo“wrong”;
}

}
</ code> </ pre>


  1. 您没有检查传入的用户是否与数据库中的用户匹配。 具有相同密码的多个用户可以互相登录! </ li>
  2. 您将返回多个回复,这就是您最初看到“密码错误”的原因</ li>
  3. 您没有对密码进行腌制和散列处理。 这本质上是不安全的。</ li>
    </ ol>
    </ div>

展开原文

原文

I see three issues here:

while($row = mysqli_fetch_assoc($result)){

     if($row['password'] == $user_password){
         echo "correct";
     } 

     else{

            echo "wrong";
     }

}
  1. You aren't checking that the passed in user matches the user in the database. Multiple users with the same password could log in add each other!
  2. You are returning multiple responses, this is why you see "wrong password" initially
  3. You aren't salting and hashing your passwords. This is inherently insecure.

doushouj966020
doushouj966020 我不经常写php和sql。 我可以阅读你的代码正在做什么,但我无法构建更好的工作代码。
接近 2 年之前 回复
doujiang2641
doujiang2641 你能给我一个正确功能的例子吗? 我没有使用mysql的经验所以我不知道如何解决这些问题。
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问