За последние 24 часа нас посетили 22326 программистов и 996 роботов. Сейчас ищут 654 программиста ...

Работа с JSON

Тема в разделе "Сделайте за меня", создана пользователем Andrew21, 8 ноя 2021.

  1. Andrew21

    Andrew21 Новичок

    С нами с:
    1 ноя 2021
    Сообщения:
    55
    Симпатии:
    0
    Пишу форму регистрации/авторизации и не могу разобраться с скриптом по проверке на валидность логина (существует такой уже или нет), если нет то можно создавать, если да, то выдать ошибку, что такой логин уже есть , у меня получилось сделать проверку, но оно вписывает туда первый элемент массива и дальше не идёт. Так же при отсутствии записей скрипт не выполняется, т.е. даёт ошибку, не могу разобраться как сделать проверку на отсутствие записей.

    вот сам код

    файл регистрации

    <!--подключение jquery и ajax библиотек-->
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
    <!--подключение CRUD файла-->
    <?php require_once "CRUD.php";
    // нажатие кнопки "зарегистрироваться"
    if(isset($_POST['signup']))
    {
    // использование функции ValidLog
    $validlogin($log);
    if ($log == 1)
    {
    print_r("Этот логин уже занят придумайте другой ");
    }
    else
    {
    $add();
    }
    // использование функции CRUD_ADD

    }
    ?>
    <!--форма регистрации-->
    <form action="/signup.php" method = "POST" name="register">
    <p>
    <p><stronh></strong>Введите логин</p>
    <input type="text" name="login" placeholder="Не менее 6 символов">
    </p>
    <p>
    <p><stronh></strong>Введите пароль</strong>:</p>
    <input type="text" name="password1" placeholder="не менее 6 символов">
    </p>
    <p>
    <p><stronh></strong>Подтвердите пароль</strong>:</p>
    <input type="text" name="password2">
    </p>
    <p>
    <p><stronh></strong>введите E-mail</strong>:</p>
    <input type="text" name="email">
    </p>
    <p>
    <p><stronh></strong>Введите имя</strong>:</p>
    <input type="text" name="name">
    </p>
    <p>
    <input type="submit" class="signupbtn" value="Зарегистрироваться" name="signup">
    </p>
    </form>

    файл функций и валидации


    <?php
    function CRUD_ADD()
    {
    //чтение файла
    $data = file_get_contents('user.json');
    //декодирование файла из json
    $data = json_decode($data, true);
    //создание нового юзера
    $add_arr = array(
    'login' => $_POST['login'],
    'password' => md5($_POST['password1']),
    'email' => $_POST['email'],
    'name' => $_POST['name']
    );
    // присвоение масива переменной
    $data[] = $add_arr;
    //кодирование в json формат
    $data = json_encode($data, JSON_PRETTY_PRINT);
    //запись данных в файл
    file_put_contents('user.json', $data);
    }
    function ValidLog($log)
    {
    //чтение файла
    $data = file_get_contents('user.json');
    //декодирование файла из json
    $data = json_decode($data,true);
    foreach ($data as $value)
    {
    if ($value['login'] == $_POST['login'])
    {
    $log=1;
    break;
    }
    else
    {
    $log=0;
    break;
    }
    }

    }
    $validlogin = 'ValidLog';
    $add = 'CRUD_ADD';
    ?>
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    Для начала - оформить код в окно соответствующие, читать невозможно
     
  3. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    "в теги" ..
     
  4. Andrew21

    Andrew21 Новичок

    С нами с:
    1 ноя 2021
    Сообщения:
    55
    Симпатии:
    0
    Код (Text):
    1. <!--подключение jquery и ajax библиотек-->
    2. <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
    3. <!--подключение CRUD файла-->
    4. <?php require_once "CRUD.php";
    5.  
    6. // нажатие кнопки "зарегистрироваться"
    7. if(isset($_POST['signup']))
    8.     {
    9.         // использование функции ValidLog
    10.         $validlogin($log);
    11.         if ($log == 1)
    12.         {
    13.             print_r("Этот логин уже занят придумайте другой ");
    14.         }
    15.         else
    16.         {
    17.             $add();
    18.         }
    19.         // использование функции CRUD_ADD
    20.     }
    21. ?>
    22. <!--форма регистрации-->
    23. <form action="/signup.php" method = "POST" name="register">
    24.     <p>
    25.         <p><stronh></strong>Введите логин</p>
    26.             <input type="text" name="login" placeholder="Не менее 6 символов">
    27.         </p>
    28.             <p>
    29.                 <p><stronh></strong>Введите пароль</strong>:</p>
    30.                 <input type="text" name="password1" placeholder="не менее 6 символов">
    31.             </p>
    32.         <p>
    33.             <p><stronh></strong>Подтвердите пароль</strong>:</p>
    34.             <input type="text" name="password2">
    35.         </p>
    36.             <p>
    37.                 <p><stronh></strong>введите E-mail</strong>:</p>
    38.                 <input type="text" name="email">
    39.             </p>
    40.         <p>
    41.             <p><stronh></strong>Введите имя</strong>:</p>
    42.             <input type="text" name="name">
    43.         </p>
    44.             <p>
    45.                 <input type="submit" class="signupbtn" value="Зарегистрироваться" name="signup">
    46.             </p>
    47.         </form>
    48.  
    49.  
    50. сами функции
    51.  
    52.  
    53. <?php
    54.     function CRUD_ADD()
    55.         {
    56.             //чтение файла
    57.         $data = file_get_contents('user.json');
    58.             //декодирование файла из json
    59.         $data = json_decode($data, true);
    60.             //создание нового юзера
    61.         $add_arr = array(
    62.             'login' => $_POST['login'],
    63.             'password' => md5($_POST['password1']),
    64.             'email' => $_POST['email'],
    65.             'name' => $_POST['name']
    66.         );
    67.             // присвоение масива переменной
    68.         $data[] = $add_arr;
    69.             //кодирование в json формат
    70.         $data = json_encode($data, JSON_PRETTY_PRINT);
    71.             //запись данных в файл
    72.         file_put_contents('user.json', $data);
    73.     }
    74.     function ValidLog($log)
    75.     {
    76.         print_r('1');
    77.             //чтение файла
    78.         $data = file_get_contents('user.json');
    79.             //декодирование файла из json
    80.         $data = json_decode($data,true);
    81.         foreach ($data as $value)
    82.         {
    83.             if ($value['login'] == $_POST['login'])
    84.             {
    85.                 $log=1;
    86.             }
    87.             else
    88.             {
    89.                 $log=0;
    90.             }
    91.         }
    92.     }
    93.     $validlogin = 'ValidLog';
    94.     $add = 'CRUD_ADD';
    95. ?>
     
  5. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    лучше, но есть прям конкретный тег для php
     
  6. Andrew21

    Andrew21 Новичок

    С нами с:
    1 ноя 2021
    Сообщения:
    55
    Симпатии:
    0
    PHP:
    1. <!--подключение jquery и ajax библиотек-->
    2. <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
    3. <!--подключение CRUD файла-->
    4. <?php require_once "CRUD.php";
    5. // нажатие кнопки "зарегистрироваться"
    6. if(isset($_POST['signup']))
    7.     {
    8.         // использование функции ValidLog
    9.         $validlogin($log);
    10.         if ($log == 1)
    11.         {
    12.             print_r("Этот логин уже занят придумайте другой ");
    13.         }
    14.         else
    15.         {
    16.             $add();
    17.         }
    18.         // использование функции CRUD_ADD
    19.     }
    20. ?>
    21. <!--форма регистрации-->
    22. <form action="/signup.php" method = "POST" name="register">
    23.     <p>
    24.         <p><stronh></strong>Введите логин</p>
    25.             <input type="text" name="login" placeholder="Не менее 6 символов">
    26.         </p>
    27.             <p>
    28.                 <p><stronh></strong>Введите пароль</strong>:</p>
    29.                 <input type="text" name="password1" placeholder="не менее 6 символов">
    30.             </p>
    31.         <p>
    32.             <p><stronh></strong>Подтвердите пароль</strong>:</p>
    33.             <input type="text" name="password2">
    34.         </p>
    35.             <p>
    36.                 <p><stronh></strong>введите E-mail</strong>:</p>
    37.                 <input type="text" name="email">
    38.             </p>
    39.         <p>
    40.             <p><stronh></strong>Введите имя</strong>:</p>
    41.             <input type="text" name="name">
    42.         </p>
    43.             <p>
    44.                 <input type="submit" class="signupbtn" value="Зарегистрироваться" name="signup">
    45.             </p>
    46.         </form>
    47. сами функции
    48. <?php
    49.     function CRUD_ADD()
    50.         {
    51.             //чтение файла
    52.         $data = file_get_contents('user.json');
    53.             //декодирование файла из json
    54.         $data = json_decode($data, true);
    55.             //создание нового юзера
    56.         $add_arr = array(
    57.             'login' => $_POST['login'],
    58.             'password' => md5($_POST['password1']),
    59.             'email' => $_POST['email'],
    60.             'name' => $_POST['name']
    61.         );
    62.             // присвоение масива переменной
    63.         $data[] = $add_arr;
    64.             //кодирование в json формат
    65.         $data = json_encode($data, JSON_PRETTY_PRINT);
    66.             //запись данных в файл
    67.         file_put_contents('user.json', $data);
    68.     }
    69.     function ValidLog($log)
    70.     {
    71.         print_r('1');
    72.             //чтение файла
    73.         $data = file_get_contents('user.json');
    74.             //декодирование файла из json
    75.         $data = json_decode($data,true);
    76.         foreach ($data as $value)
    77.         {
    78.             if ($value['login'] == $_POST['login'])
    79.             {
    80.                 $log=1;
    81.             }
    82.             else
    83.             {
    84.                 $log=0;
    85.             }
    86.         }
    87.     }
    88.     $validlogin = 'ValidLog';
    89.     $add = 'CRUD_ADD';
    90. ?>
     
  7. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    @Andrew21, почитайте для начала, что такое функция, зачем ей аргументы (параметры), про возврат значения.
    Информация про переменные и их область видимости тоже не будет лишней.
    --- Добавлено ---
    break, кстати, в одном из вариантов ветвления надо оставить.
     
  8. Andrew21

    Andrew21 Новичок

    С нами с:
    1 ноя 2021
    Сообщения:
    55
    Симпатии:
    0
    я пробовал и без переменных и break всё одно и то же, и глобально переменную объявлял но что-то не получается как будто её не видит совсем.
     
    #8 Andrew21, 8 ноя 2021
    Последнее редактирование: 8 ноя 2021
  9. Andrew21

    Andrew21 Новичок

    С нами с:
    1 ноя 2021
    Сообщения:
    55
    Симпатии:
    0
    С этой проблемой разобрался переменной $GLOBAL, но появилась следующая проблема. Когда я дописываю ещё одно условие на проверку пароля, то выводит, что такой пользователь уже есть но всё рано добавляет его. Почему так происходит ?
    PHP:
    1. Проверки
    2. if(isset($_POST['signup']))
    3.     {
    4.         // использование функции ValidLog
    5.         $validlogin();
    6.         if ($GLOBALS['log']== 1)
    7.         {
    8.             print_r("Этот логин уже занят придумайте другой ");
    9.         }
    10.         if ($_POST['password1']!=$_POST['password2'])
    11.         {
    12.             print_r("Пароли не совпадают");
    13.         }
    14.         else
    15.         {
    16.             $add();
    17.         }
    18.         // использование функции CRUD_ADD
    19.     }
    20. ?>
     
  10. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    Потому что не выполняется условие $_POST['password1']!=$_POST['password2'].
    Нет в коде причины не добавлять.
     
  11. Andrew21

    Andrew21 Новичок

    С нами с:
    1 ноя 2021
    Сообщения:
    55
    Симпатии:
    0
    Как это не выполняется, я проверил, всё выполняется, когда пароли не совпадают оно и выводит сообщение, но когда пароли совпадают а логин ввожу уже существующий, мне пишет, что уже такой есть но всё равно добавляет
     
  12. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    а почему он не должен добавлять?
    ну ладно прошли проверку - сказали - и все... дальше то код выполняется))))

    PHP:
    1. if(isset($_POST['signup'])) {
    2.         // использование функции ValidLog
    3.         $validlogin();
    4.         if ($GLOBALS['log']== 1) {
    5.             print_r("Этот логин уже занят придумайте другой ");
    6.         }
    7.  
    8.         if ($_POST['password1']!=$_POST['password2'])
    9.            print_r("Пароли не совпадают");
    10.         } else  {
    11.             $add();
    12.         }
    13.         // использование функции CRUD_ADD
    14.     }
    15. ?>
    так нагляднее - видны логические блоки
    1. if ($GLOBALS['log']== 1) ? - да, ну выведем сообщение пойдем дальше
    2. пароли равны - равны, добавим
     
  13. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    никаких вопросов....

    почему не идти дальше - если код так написан?
    --- Добавлено ---
    надо как-то так в вашем случае

    PHP:
    1. if(isset($_POST['signup'])) {
    2.         // использование функции ValidLog
    3.         $validlogin();
    4.         if ($GLOBALS['log']== 1) {
    5.             print_r("Этот логин уже занят придумайте другой ");
    6.         } else {
    7.  
    8.         if ($_POST['password1']!=$_POST['password2'])
    9.            print_r("Пароли не совпадают");
    10.         } else  {
    11.             $add();
    12.         }
    13.         // использование функции CRUD_ADD
    14.     }
    15. }
    16. ?>
    но $GLOBALS['log'] это давно устаревший отстой
     
  14. Andrew21

    Andrew21 Новичок

    С нами с:
    1 ноя 2021
    Сообщения:
    55
    Симпатии:
    0
    я в php только неделю разбираюсь скинули тестовое задание которое нужно сдать, вот использую то, что знаю, как можно без $GLOBAL['log']?
     
  15. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    в двух словах не объяснить..
    что мешает именно в этом месте проверить? вместо сверки с переменной - сделать запрос и посмотреть результат?
     
  16. Andrew21

    Andrew21 Новичок

    С нами с:
    1 ноя 2021
    Сообщения:
    55
    Симпатии:
    0
    сделал так
    PHP:
    1. $validlogin();
    2.         if ($GLOBALS['log']== 1)
    3.         {
    4.             print_r("Этот логин уже занят придумайте другой ");
    5.         }
    6.         elseif($_POST['password1']!=$_POST['password2'])
    7.             {
    8.             print_r("Пароли не совпадают");
    9.             }
    10.         else
    11.         {
    12.             // использование функции CRUD_ADD
    13.             $add();
    14.         }
    --- Добавлено ---
    Стараюсь хоть как-то придерживать ООП без повторения кода
     
  17. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    (с) лучше уж никак - чем, хоть как нибудь
     
  18. Andrew21

    Andrew21 Новичок

    С нами с:
    1 ноя 2021
    Сообщения:
    55
    Симпатии:
    0
    :(