За последние 24 часа нас посетили 74900 программистов и 10149 роботов. Сейчас ищут 2546 программистов ...

Не добавляет запись в бд mysql, что забыл?

Тема в разделе "PHP для новичков", создана пользователем Exilles, 27 мар 2018.

  1. Exilles

    Exilles Новичок

    С нами с:
    27 мар 2018
    Сообщения:
    2
    Симпатии:
    0
    Здравствуйте.
    Пробую сделать регистрацию на сайте, для этого есть отдельный обработчик account.php с таким кодом:
    PHP:
    1. <?php
    2.  
    3. if ($Module == 'register' and $_POST['enter']) {
    4. $_POST['login'] = FormChars($_POST['login']);
    5. $_POST['email'] = FormChars($_POST['email']);
    6. $_POST['password'] = GenPass(FormChars($_POST['password']), $_POST['login']);
    7. $_POST['name'] = FormChars($_POST['name']);
    8. $_POST['country'] = FormChars($_POST['country']);
    9. $_POST['avatar'] = FormChars($_POST['avatar']);
    10. $_POST['avatar'] = 0;
    11. $_POST['active'] = 1;
    12. $_POST['group'] = 1;
    13. if (!$_POST['login'] or !$_POST['email'] or !$_POST['password'] or !$_POST['name'] or $_POST['country'] > 4) exit('Ошибка валидации формы.');
    14.  
    15. $Row = mysqli_fetch_assoc(mysqli_query($CONNECT, "SELECT `login` FROM `users` WHERE `login` = '$_POST[login]'"));
    16. if ($Row['login']) exit('Логин <b>'.$_POST['login'].'</b> уже используеться.');
    17. $Row = mysqli_fetch_assoc(mysqli_query($CONNECT, "SELECT `email` FROM `users` WHERE `email` = '$_POST[email]'"));
    18. if ($Row['login']) exit('E-Mail <b>'.$_POST['email'].'</b> уже используеться.');
    19. mysqli_query($CONNECT, "INSERT INTO `users`  VALUES ('', '$_POST[login]', '$_POST[password]', '$_POST[name]', NOW(), '$_POST[email]', $_POST[country], $_POST[avatar]), $_POST['active'], $_POST['group']");
    20.  
    21.  
    22. echo 'OK';
    23. }
    24. ?>


    В файле index.php строчки кода с подключением бд и вызовом обработчика:

    PHP:
    1. <?php
    2.  
    3. include_once 'setting.php';
    4. header('Content-Type: text/html; charset=utf-8');
    5. $CONNECT = mysqli_connect(HOST, USER, PASS, DB);
    6. / ещё всякий рабочий код /
    7. else if ($Page == 'register') include('page/register.php');
    8. else if ($Page == 'account') include('form/account.php');
    9. / ещё всякий рабочий код /
    10. ?>



    В setting.php хранятся данные к подключению:

    PHP:
    1. <?php
    2.  
    3. define ('HOST', "127.0.0.1");
    4. define ('USER', "root");
    5. define ('PASS', "1111");
    6. define('DB', "mysite");
    7. ?>[/code]
    8. В register.php просто форма с регистрацией:
    9. [code]<?php Head('Регистрация') ?>
    10. <body>
    11. <div class="wrapper">
    12. <div class="header"></div>
    13. <div class="content">
    14. <?php Menu() ?>
    15. <div class="Page">
    16. <form method="POST" action="/account/register">
    17. <br><input type="text" name="login" placeholder="Логин">
    18. <br><input type="email" name="email" placeholder="E-Mail" required>
    19. <br><input type="password" name="password" placeholder="Пароль" required>
    20. <br><input type="text" name="name" placeholder="Имя" required>
    21. <br><select size="1" name="country"><option value="0">Не скажу</option><option value="1">Украина</option><option value="2">Россия</option><option value="3">США</option><option value="4">Канада</option></select>
    22. <br><input type="file" name="avatar">
    23. <br><br><input type="submit" name="enter" value="Регистрация"> <input type="reset" value="Очистить">
    24. </form>
    25. </div>
    26. </div>
    27.  
    28. <?php Footer() ?>
    29. </div>
    30. </body>
    31. </html>



    К БД подключается, как я понимаю, т.к. ошибок не выводит на странице с сайтом, но вот запись не добавляется, когда заполняю регистрационную форму.
    Что я забыл сделать или сделал не так? Подскажите, пожалуйста.
    Работаю с помощью Notepad++ и БД создаю в MySQL Workbench 6.3
     
  2. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
    WHERE `login` = '$_POST[login]'")); -не верно же нужно как то так WHERE `login` = ".$_POST[login]));
    те ошибка в синтаксисе запроса.
     
  3. Exilles

    Exilles Новичок

    С нами с:
    27 мар 2018
    Сообщения:
    2
    Симпатии:
    0
    Большое спасибо
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    инъекция же
     
  5. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.862
    Симпатии:
    657
    Может, FormChars фильтрует опасные символы.

    Ваш вариант не лучше, чем у ТСа. Можно было оставить в единой строке, подправив сомнительные моменты: "... WHERE `login` = '{$_POST['login']}'"
    --- Добавлено ---
    @Exilles, логика в целом неправильная. Объявите логин и мыло юниками и просто делайте вставку с проверкой результата. SELECT'ы можно оставить, но только в декоративных целях.
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Одно и то же. Это же php.
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    что?