Проблема с поиском файла говорит код php

Я не пойму почему не ищет файл с id 1 хоть он должен его искать по результатам на страничке. id ника 1 находится в API/name_id/'.$_GET['accname'].'.json

сам файл json accounts/1.json выглядит вот так

{"1":{"TVOFFicial1":{"Name":"TVOFFicial1","Avatar":"none","Description":"","Password":"5c28c7f51296e7b129220d40118cb46d","Email":"","Ban":false,"Role":"member"}}}

а API/name_id/1.json

{
    "TVOFFicial1": "1"
}

Только я не пойму 1 почему говорит что такого файла нету...

Не пойму в чём проблема

<?
$proy = file_get_contents('API/name_id/'.$_GET['accname'].'.json');
$prov2 = json_decode($proy, true);
$id = $prov2[$_GET['accname']];
// err1 - Такой аккаунт уже существует
// err2 - Такого аккаунта не существует
// err3 - Неверный пароль
// err4 - Аккаунт в бане
function ca($accname,$accpass){
if(file_exists('accounts/'.$id.'.json')){
$jsoned = file_get_contents('accounts/'.$id.'.json');
$j = json_decode($jsoned,true);
if(md5($accpass) == $j[$id][$accname]['Password']){
if($j[$id][$accname]['Ban'] == true){
return "4";
}
if($j[$id][$accname]['Ban'] == "1days"){
return "5";
}
if($j[$id][$accname]['Ban'] == "7days"){
return "6";
}
if($j[$id][$accname]['Ban'] == "30days"){
return "7";
} else {
return "ok";
}
} else {
return "3";
}
} else {
return "2";
}
}
if($_COOKIE['accboolg1'] == false){
$accname = $_GET['accname'];
$accpass = $_GET['accpass'];
if(ca($accname,$accpass) == "ok"){
setcookie("accname", $accname);
setcookie("accpass", $accpass);
setcookie("id", $id);
setcookie("accboolg1", true);
echo 'Бачит';
echo '<!doctype html><html lang="en"><head><meta http-equiv="refresh" content="0; url=../user.php" /></head></html>';
} else {
//echo '<!doctype html><html lang="en"><head><meta http-equiv="refresh" content="0; url=../index.php?iderr='.ca($accname,$accpass).'" /></head></html>';
echo "ok";
}
}
$jsoned12346 = file_get_contents('accounts/'.$id.'.json');
$j12346 = json_decode($jsoned12346,true);
echo '<br>';
echo 'Id ника'. $id;
echo '<br>';
echo 'Твой пароль в md5 '.$j12346[$id][$accname]['Password'];
echo '<br>';
echo 'Твой пароль из строки в md5 '.md5($_GET['accpass']);echo '<br>';
echo ca($accname,$accpass);echo '<br>';

if(file_exists('accounts/'.$id.'.json')){
echo 'Файла есть!';
echo '<br>';
if(md5($_GET['accpass']) == $j12346[$id][$accname]['Password']){
       echo 'Пароль верный';
}
else{
   echo 'Пароль не верный';
}
}
else{
    echo 'Файла нету!';
}
?>

Ответы (1 шт):

Автор решения: HardlinePeak

Во первых, это ужас :) Во вторых, функции file_get_contents и json_decode могут возвращать значения обозначающие ошибку. В третьих, в функции ca переменная $id недоступная. В четвёртых, некоторые (либо все) параметры GET запроса могут отсутствовать. В пятых, в PHP есть такая вещь, как elseif. В шестых, md5 лучше не использовать. В седьмых, вам стоит поработать над оформлением кода. По доброте душевной я переписал для вас ваш код, но не думайте что это будут тут делать всегда (:

<?php
if (!isset($_GET["accname"])) {
    echo "Отсутствует параметр accname!";
    exit();
} elseif (!isset($_GET["accpass"])) {
    echo "Отсутствует параметр accpass!";
    exit();
}
$proy = file_get_contents("API/name_id/" . $_GET["accname"] . ".json");
if ($proy === false) {
    echo "Не удалось получить содержимое файла API/name_id/" . $_GET["accname"] . ".json!";
    exit();
}
$prov2 = json_decode($proy, true);
if ($prov2 == null) {
    echo "Не удалось перевести JSON строку в массив!";
    exit();
}
$id = $prov2[$_GET["accname"]];
function ca($accname, $accpass) {
    global $id;
    if (file_exists("accounts/" . $id . ".json")) {
        $jsoned = file_get_contents("accounts/" . $id . ".json");
        if ($jsoned === false)
            return "2";
        $j = json_decode($jsoned, true);
        if ($j == null)
            return "3";
        if (md5($accpass) == $j[$id][$accname]["Password"]) {
            if ($j[$id][$accname]["Ban"] == true)
                return "5";
            elseif ($j[$id][$accname]["Ban"] == "1days")
                return "6";
            elseif ($j[$id][$accname]["Ban"] == "7days")
                return "7";
            elseif ($j[$id][$accname]["Ban"] == "30days")
                return "8";
            else
                return "ok";
        } else
            return "4";
    } else
        return "1";
}
if ($_COOKIE["accboolg1"] == false) {
    if (ca($_GET["accname"], $_GET["accpass"]) == "ok") {
        setcookie("accname", $_GET["accname"]);
        setcookie("accpass", $_GET["accpass"]);
        setcookie("id", $id);
        setcookie("accboolg1", true);
        echo "Бачит";
        echo "<!doctype html><html lang="en"><head><meta http-equiv="refresh" content="0; url=../user.php" /></head></html>";
    } else {
        //echo "<!doctype html><html lang="en"><head><meta http-equiv="refresh" content="0; url=../index.php?iderr=".ca($accname,$accpass)."" /></head></html>";
        echo "ok";
    }
}
$jsoned12346 = file_get_contents("accounts/" . $id . ".json");
if ($jsoned12346 === false) {
    echo "Не удалось получить содержимое файла accounts/" . $id . ".json!";
    exit();
}
$j12346 = json_decode($jsoned12346, true);
if ($j12346 == null) {
    echo "Не удалось перевести JSON строку в массив!";
    exit();
}
if (file_exists("accounts/" . $id . ".json")) {
    if (md5($_GET["accpass"]) == $j12346[$id][$accname]["Password"])
        echo "Пароль верный";
    else
        echo "Пароль не верный";
} else
    echo "Файла нету!";
?>

P.s.Код не тестировал, если где-то допустил ошибку, то извините, я тоже человек :)

→ Ссылка