Почему срабатывает это «если»? - PullRequest
0 голосов
/ 02 ноября 2019

Последние 5 часов я работал над тем, почему это происходит, если меня вызывают ...

Позвольте мне показать вам код и объяснить вам:

<?php

require_once "ConnectDB.php";
$link2 = $link;

$key = $posthwid = "";

$err = "";



if($_SERVER["REQUEST_METHOD"] == "POST"){

    if(empty($_POST["key"])){
        $err = "Thanks for the ip (" .$_SERVER['REMOTE_ADDR']. "), have a good day! (1)";
    } 
    else{
        $key = trim($_POST["key"]);
    }
    $hwid = $_POST["hwid"];
    if(empty($err)){

        $sql = "SELECT hwid, idkey, length, created_at FROM money WHERE idkey = '" .$key. "'";
        $row = mysqli_query($link, $sql);
            if(mysqli_num_rows($row) < 2){
                while($result = mysqli_fetch_assoc($row)) {
                        if($result["idkey"] == $key) 
                        {
                            $err = "key";
                            if($result["hwid"] == "")
                            {

                                $err = "nohwid";
                                $sql2 = "UPDATE IceCold SET hwid = '" .$hwid. "' WHERE idkey = '" .$key. "'";

                                if(mysqli_query($link2, $sql2)){
                                    $hwid = $result["hwid"];
                                    mysqli_close($link2); 
                                    echo "debug";
                                }
                                else {
                                    $err = "Oops! Something went wrong. Conntact the support.";
                                }

                            }
                            if ($hwid !== $result["hwid"]) {
                                $err = "Contact the support";
                            }
                            elseif($_SESSION["admin"] == true) {
                                //Do special stuff
                            } 
                            else {
                            ///do other checks

                                if($created_at > $date){
                                    $err = $hwid;
                                } else {
                                    $err = "The key date is too old, buy a new one.";
                                }
                            }
                        }
                        else{

                            $err = "The key you entered was not valid.";
                        }
                    }  mysqli_close($link); 
                } else {
                    $err = "multiple entry, contact support";
                }   
            }


} else {
    $err = "Thanks for the ip (" .$_SERVER['REMOTE_ADDR']. "), have a good day! (3)";
}

echo $err;

?>

Так что в основном, У меня есть этот файл Connect DB с mysqli_connect с именем $link, и я разрабатываю API-интерфейс для своей программы. Моя программа отправит запрос с "idkey" и "hwid" и ждет возвращения hwid. У меня есть запись в моей базе данных sql с зарегистрированным только ключом, и я пытаюсь заставить мою программу работать, генерируя запрос POST с идентификатором и случайным hwid, но я не нашел успеха. Если переменные странно перемещаются, то это из-за отладки.

Прямо сейчас, с моими текущими настройками, я получаю в Контакте ответ службы поддержки, который я не понимаю, почему?!? Запрос и ключ верны, если я смогу получить этот awnser. Возможно, это глупая ошибка, но я просто не могу ее понять ...

Заранее благодарен за вашу помощь

Редактировать: Если утверждение, на которое я ссылаюсь, это

if($hwid !== $result["hwid"])

В коде, который я исправил, была опечатка, но не проблема, как в случае с elseif, которая разрушила бы порядок выполнения кода и разрушила логику, стоящую за ним (если это имело смысл).

Ужасно, после некоторых тестов, я обнаружил, что второй отправляемый мной запрос sql не хочет выполняться ($ sql2), и в логах httpd нет ошибок ... Можете ли вы выполнить два запроса? Я пытался создать $ link2, но ничего не изменилось

РЕДАКТИРОВАТЬ : найденное решение

if($result["hwid"] == "")
                            {
                                $sql2 = "UPDATE money SET hwid = '" .$_POST["hwid"]. "' WHERE idkey = '" .$key. "'";

                                if(mysqli_query($link2, $sql2)){
                                    $newhwid = $_POST["hwid"];
                                    mysqli_close($link2); 
                                }
                                else {
                                    $err = "Oops! Something went wrong. Conntact the support.";
                                }

                            }
                            elseif ($_POST["hwid"] != $result["hwid"]) {
                                $err = "Contact the support";
                            }
                            if($_POST["hwid"] == $newhwid || $_POST["hwid"] == $result["hwid"] ) {
/// do other checks
}

1 Ответ

0 голосов
/ 02 ноября 2019

Условие до этого, if($row['hwid'] = ""), является назначением. Этот код изменяет значение $row['hwid'] на пустую строку, в результате чего условие после него становится истинным. Я предполагаю, что вы хотели написать == в test , если $row['hwid'] пусто;в противном случае не имеет смысла записывать это как оператор if.

Кстати, неясно, не должен ли этот оператор if быть else if. Остальные ответвления здесь else if (или elseif, то же самое в PHP), поэтому вам следует подумать, не пропустили ли вы else и на этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...