Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 01.03.2022
Сообщений: 21

Где ошибка?

03.03.2022, 16:05. Показов 1064. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Код добавления пользователя в базу данных
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<html>
<head> <title>Добавление пользователя</title> </head>
<body>
<?php
session_start();
    require_once 'config.php'; //Adds connection file
    if (isset($_POST['adduser'])) //Getting value from button adduser, targeting the isset function
    {
        try 
        {
            $login = strip_tags($_POST['login']); //Getting values from registration form
            $fullname = strip_tags($_POST['name']);
            $grade = strip_tags($_POST['grade']);
            $phone = strip_tags($_POST['phone']);
            $email = strip_tags($_POST['mail']);
            $password = strip_tags($_POST['password']);
            $occupation = strip_tags($_POST['occupation']);
            if ($occupation == 0) //If it is teacher
            {
                $query = $connection->prepare("SELECT * FROM teachers WHERE login=:login");//Preparing SQL query to select rows which contain same data with input data
                $query->bindParam("login", $login, PDO::PARAM_STR);
                $query->execute();//Executing prepared SQL query
                if ($query->rowCount() > 0)//If it contains same data
                {
                    echo '<p class="error">Данный пользователь уже зарегистрирован!</p>';
                }
                if ($query->rowCount() == 0)//If it does not contain same data
                {
                        $query = $connection->prepare("INSERT INTO teachers(TeacherIIN, Full_Name, Grade, Phone_number, Email, Password)
                        VALUES (:login, :fullname, :grade, :phone, :email, :password)"); //Preparing SQL query to insert data to the database
                        $query->bindParam("login", $login, PDO::PARAM_STR); //Binds query parametre to variable
                        $query->bindParam("fullname", $fullname, PDO::PARAM_STR);
                        $query->bindParam("grade", $grade, PDO::PARAM_STR);
                        $query->bindParam("phone", $phone, PDO::PARAM_STR);
                        $query->bindParam("email", $email, PDO::PARAM_STR);
                        $query->bindParam("password", $password, PDO::PARAM_STR);
                        $result = $query->execute();
                }
            }
            if ($occupation == 1) //If it is student
            {
                $query = $connection->prepare("SELECT * FROM students WHERE login=:login"); 
                $query->bindParam("login", $login, PDO::PARAM_STR);
                $query->execute(); 
                if ($query->rowCount() > 0) 
                {
                    echo '<p class="error">Данный пользователь уже зарегистрирован!</p>';
                }
                if ($query->rowCount() == 0) 
                {
                    $query = $connection->prepare("INSERT INTO students(StudentIIN, Full_Name, Grade, Phone_number, Email, Password)
                    VALUES (:login, :fullname, :grade, :phone, :email, :password)");
                    $query->bindParam("login", $login, PDO::PARAM_STR);
                    $query->bindParam("fullname", $fullname, PDO::PARAM_STR);
                    $query->bindParam("grade", $grade, PDO::PARAM_STR);
                    $query->bindParam("phone", $phone, PDO::PARAM_STR);
                    $query->bindParam("email", $email, PDO::PARAM_STR);
                    $query->bindParam("password", $password, PDO::PARAM_STR);
                    $result = $query->execute();    
                }
            }
                if (!$result) //If user is not successfully registered
                {
                    echo '<p class="error">Регистрация не удалась</p>';
                }
                else //If yes
                {
                    echo '<p class="success">Регистрация прошла успешно</p>';
                }
        }
        catch(PDOException $e)
        {
            echo $e->getMessage();
        }
    }
?>
</body>
</html>
config.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<html>
<head></head>
<body>
<?php
define('USER', 'root');
    define('PASSWORD', '');
    define('HOST', 'localhost');
    define('DATABASE', 'test');
    try {
        $connection = new PDO("mysql:host=".HOST.";untdb=".DATABASE, USER, PASSWORD);
    } catch (PDOException $e) {
        exit("Error: " . $e->getMessage());
    }
?>
</body>
</html>
Форма ввода данных
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<html>
<head></head>
<body>
    <p>Добавление пользователя</p>
<form action="registration.php" method="post"> <!--Creating a form that executes adding_user.php-->
      <label>Логин пользователя</label>
      <input type="text" name="login" placeholder="Введите логин пользователя" required> <!--Creating textbox in which the variable is entered-->
      <br><br>
      <label>ФИО пользователя</label>
      <input type="text" name="name" placeholder="Введите ФИО пользователя" required>
      <br><br>
      <label>Класс пользователя</label>
      <input type="text" name="grade" placeholder="Введите класс пользователя" required>
      <br><br>
      <label>Номер телефона пользователя</label>
      <input type="text" name="phone" placeholder="Введите номер пользователя" required>
      <br><br>
      <label>Почта пользователя</label>
      <input type="text" name="mail" placeholder="Введите почту пользователя" required> <!--required - must be filled before submitting-->
      <br><br>
      <label>Пароль пользователя</label>
      <input type="password" name="password" placeholder="Введите пароль пользователя" required> 
      <br><br>
      <input type="radio" name="occupation" value="0" required> <!--Creating radiobuttons in which a variable is selected-->
      <label for="0">Учитель</label>
      <input type="radio" name="occupation" value="1" required>
      <label for="1">Ученик</label>
      <br><br>
      <button type="submit" name="adduser" value="adduser">Добавить</button> <!--Submit button which sends the form-->
</form>
</body>
</html>
Проблема в том, что пользователь не добавляется (Не выводит ошибку, выводит сообщение "Регистрация не удалась")
Где ошибка в коде?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.03.2022, 16:05
Ответы с готовыми решениями:

Где ошибка?)
$sql = 'SELECT * FROM users AS t, polosa_0 AS pol WHERE t.dom = \'Россия\' AND pol.stroka_2 &lt;= 1 AND pol.stroka_5 = 2 AND...

Где ошибка?
Здравствуйте, уважаемые форумчане. Подскажите как можно вывести все данные из строки $row(тут у меня контент для каждой страницы), чтобы...

Где ошибка в коде?
include &quot;db.php&quot;; $fp = file_get_contents(&quot;goinsert.txt&quot;); $echo = explode(&quot;\n&quot;, $fp); echo $echo; foreach ($echo as $value)...

19
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
03.03.2022, 16:17
PHP
1
2
3
4
5
6
...
        if (!$result) //If user is not successfully registered
        {
            echo '<p class="error">Регистрация не удалась</p>';
            echo '<pre>', print_r($query->errorInfo(), true), '</pre>';
        }
Добавлено через 13 секунд
Выведи ошибки базы на экран
0
0 / 0 / 0
Регистрация: 01.03.2022
Сообщений: 21
03.03.2022, 18:08  [ТС]
Теперь пишет:
Регистрация не удалась

Array
(
[0] => 3D000
[1] => 1046
[2] => No database selected
)
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
03.03.2022, 18:21
Ну, выбери базу
0
0 / 0 / 0
Регистрация: 01.03.2022
Сообщений: 21
03.03.2022, 18:22  [ТС]
я ведь уже выбрал базу данных в config.php, нет?
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
03.03.2022, 18:25
Цитата Сообщение от ieraasyl Посмотреть сообщение
untdb
что такое untdb? Не вижу в доке, чтобы так база выбиралась.
0
0 / 0 / 0
Регистрация: 01.03.2022
Сообщений: 21
03.03.2022, 18:26  [ТС]
untdb это имя базы данных

UPD: исправил test на untdb
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
03.03.2022, 18:28
Лучший ответ Сообщение было отмечено ieraasyl как решение

Решение

https://www.php.net/manual/en/... t-examples
корректная запись
PHP
1
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
dbname=имя-базы;
1
0 / 0 / 0
Регистрация: 01.03.2022
Сообщений: 21
03.03.2022, 19:30  [ТС]
Спасибо, благодаря вам понял в чем была ошибка

исправил код config.php на
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<html>
<head></head>
<body>
<?php
define('USER', 'root');
    define('PASSWORD', '');
    define('HOST', 'localhost');
    define('DATABASE', 'untdb');
    try {
        $connection = new PDO("mysql:host=".HOST.";dbname=".DATABASE, USER, PASSWORD);
    } catch (PDOException $e) {
        exit("Error: " . $e->getMessage());
    }
?>
</body>
</html>
и все заработало

Добавлено через 58 минут
Здравствуйте.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
    session_start();
    require_once 'config.php'; //Adds connection file
    if (isset($_POST['log_in'])) //Getting value from button log_in, targeting the isset function
    {
        $login = strip_tags($_POST['login']); //Getting values from authorization form
        $password = strip_tags($_POST['password']);
        $occupation = strip_tags($_POST['occupation']);
        if ($occupation == 0) //If it is teacher
        {
            $query = $connection->prepare("SELECT * FROM teachers WHERE login=:login");
            $query->bindParam("login", $login, PDO::PARAM_STR);
            $query->execute();
            $result = $query->fetch(PDO::FETCH_ASSOC);
        }
        if ($occupation == 1) //If it is student
        {
            $query = $connection->prepare("SELECT * FROM students WHERE login=:login");
            $query->bindParam("login", $login, PDO::PARAM_STR);
            $query->execute();
            $result = $query->fetch(PDO::FETCH_ASSOC);
        }
        if (!$result) {
            echo '<p class="error">Неверные пароль или имя пользователя!</p>';
            echo $result["passworld"];
        } else {
            if (password_verify($password, $result['password'])) {
                $_SESSION['user_id'] = $result['id'];
                echo '<p class="success">Поздравляем, вы прошли авторизацию!</p>';
            } else {
                echo '<p class="error"> Неверные пароль или имя пользователя!</p>';
                echo $password, $result["passworld"];
            }
        }
    }
?>
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML>
<html>
<head></head>
<body>
<form action="authorization.php" method="post">
    <label>Логин пользователя</label>
    <input type="text" name="login" placeholder="Введите логин пользователя" required>
    <br><br>
    <label>Пароль пользователя</label>
    <input type="password" name="password" placeholder="Введите пароль пользователя" required>
    <br><br>
    <input type="radio" name="occupation" value="0" required> <!--Creating radiobuttons in which a variable is selected-->
    <label for="0">Учитель</label>
    <input type="radio" name="occupation" value="1" required>
    <label for="1">Ученик</label>
    <br><br>
    <button type="submit" name="log_in" value="log_in">Log In</button>
</form>
</body>
</html>
Не удается авторизоваться, можете найти ошибку?
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
03.03.2022, 19:35
Пароль вы сохраняете в чистом виде, а сверяете с хэшем
https://www.php.net/manual/ru/... verify.php
password_verify — Проверяет, соответствует ли пароль хешу
Это
PHP
1
if (password_verify($password, $result['password'])) {
заменить на
PHP
1
if ($password === $result['password']) {
0
0 / 0 / 0
Регистрация: 01.03.2022
Сообщений: 21
03.03.2022, 19:37  [ТС]
то же выводит
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
03.03.2022, 19:40
PHP
1
 echo $password, $result["passworld"];
А этот дебаг показывает разные пароли?
0
0 / 0 / 0
Регистрация: 01.03.2022
Сообщений: 21
03.03.2022, 19:42  [ТС]
$result["password"]; ничего не выводит
$password выводит введенный пароль
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
03.03.2022, 19:45
Посмотри в базе пароль сохранился под этим логином, может там пусто?

Добавлено через 49 секунд
Блин, passworld
0
0 / 0 / 0
Регистрация: 01.03.2022
Сообщений: 21
03.03.2022, 19:45  [ТС]
Сохранился

заменил passworld на password, все так же нет вывода
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
03.03.2022, 19:50
Цитата Сообщение от ieraasyl Посмотреть сообщение
PHP
1
$query = $connection->prepare("INSERT INTO teachers(TeacherIIN, Full_Name, Grade, Phone_number, Email, Password)
И у тебя в базе с большой буквы Password

Добавлено через 3 минуты
Всегда можешь просто вывести весь $result и спомотреть что в нем через print_r()
Как выше с ошибками базы.
Я домой еду с работы, удачи
0
0 / 0 / 0
Регистрация: 01.03.2022
Сообщений: 21
03.03.2022, 19:52  [ТС]
поменял все password внутри $result на Password, ничего не поменялось

Добавлено через 47 секунд
Большое вам спасибо
0
0 / 0 / 0
Регистрация: 01.03.2022
Сообщений: 21
04.03.2022, 20:43  [ТС]
config.php
PHP
1
2
3
4
5
6
7
8
9
10
11
<?php
    try
    {
        $connection = new PDO('mysql:host=localhost;dbname=untdb;charset=utf8mb4', 'root', '');
        session_start(); 
    }
    catch (PDOException $e)
    {
        exit("Error: " . $e->getMessage());
    }
?>
index.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
    require_once 'config.php';
?>
<html>
    <head>
        <meta http-equiv="Content-type" content="text/html; charset=utf-8">
        <title>Главная страница</title>
    </head>
    <body>
        <?php
            if (isset($_SESSION['user_id'])):
        ?>
            Авторизован! <br>
            Здравствуйте, <?php echo $_SESSION['user_id']->login;?>!
        <?php
            else:
        ?>
            <form action="authorization_form.php" method="post">
            <button type="submit" name="log_in" value="log_in">Войти</button>
            </form>
            <br>
            <form action="registration_form.php" method="post">
            <button type="submit" name="sign_in" value="sign_in">Зарегистрироваться</button>
            </form>
        <?php
            endif;
        ?>
    </body>
</html>
authorization.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?php
    require_once 'config.php';
?>
<html>
    <head>
        <title>Регистрация</title>
    </head>
</html>
<?php
    if (isset($_POST['log_in'])) //Getting value from button log_in, targeting the isset function
    {
        $login = trim($_POST['login']); //Getting values from authorization form
        $password = trim($_POST['password']);
        $occupation = trim($_POST['occupation']);
        if ($occupation == 0) //If it is teacher
        {
            $query = $connection->prepare("SELECT * FROM teachers WHERE TeacherIIN=:login");
            $query->bindParam("login", $login, PDO::PARAM_STR);
            $query->execute();
            $result = $query->fetch(PDO::FETCH_ASSOC);
            if (!$result)
            {
                echo '<p class="error">Неверные пароль или имя пользователя</p>';
            }
            else 
            {
                if ($password == $result['Password'])
                {
                    $_SESSION['user_id'] = $result;
                    $name = $result["Full_Name"];
                    echo "<script>
                    alert('Здравствуйте, ' + '$name' + ', вы автоматически перейдете на главную страницу сайта через 3 секунды. Если этого не произошло - http://testsite.nis/ ');
                    setTimeout(function(){
                    window.location.replace('http://testsite.nis/index.php ');
                    }, 3000);
                    </script>";
                }
                else
                {
                    echo '<p class="error">Неверные пароль или имя пользователя</p>';
                }
            }
        }
        if ($occupation == 1) //If it is student
        {
            $query = $connection->prepare("SELECT * FROM students WHERE StudentIIN=:login");
            $query->bindParam("login", $login, PDO::PARAM_STR);
            $query->execute();
            $result = $query->fetch(PDO::FETCH_ASSOC);
            if (!$result)
            {
                echo '<p class="error">Неверные пароль или имя пользователя</p>';
            }
            else 
            {
                if ($password == $result['Password'])
                {
                    $_SESSION['user_id'] = $result;
                    $name = $result["Full_Name"];
                    echo "<script>
                    alert('Здравствуйте, ' + '$name' + ', вы автоматически перейдете на главную страницу сайта через 3 секунды. Если этого не произошло - http://testsite.nis/mainpage.html ');
                    setTimeout(function(){
                    window.location.replace('http://testsite.nis/index.php ');
                    }, 3000);
                    </script>";
                }
                else
                {
                    echo '<p class="error">Неверные пароль или имя пользователя</p>';
                }
        }
        }
    }
?>



Выводит ошибку в index.php
Авторизован!
Здравствуйте,
Notice: Trying to get property 'login' of non-object in D:\xampp\htdocs\testsite.nis\index.php on line 14
!
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
08.03.2022, 16:11
PHP
1
<?php echo $_SESSION['user_id']->login;?>
это обращение к объекту, а у тебя там массив, потому что
Цитата Сообщение от ieraasyl Посмотреть сообщение
PHP
1
$result = $query->fetch(PDO::FETCH_ASSOC);
А не FETCH_OBJ
1
0 / 0 / 0
Регистрация: 01.03.2022
Сообщений: 21
08.03.2022, 16:22  [ТС]
все эти проблемы я уже решил

большое вам спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.03.2022, 16:22
Помогаю со студенческими работами здесь

Где ошибка в запросе?
Здравствуйте! Где ошибка в запросе PDO? $connect = new PDO(&quot;mysql:host=$dbhost;dbname=$dbname&quot;, $dbuser, $dbpass); $prep =...

mysql_fetch_array() Где ошибка ?
Ошибка в 199 строке : &quot;Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in...

Update, где ошибка?
Добрый день! Вот такой скрипт для обновления актуальных дат и статусов в таблице: &lt;?php /** * обновление статусов и...

где ошибка в коде?
Нашел в интернете код В нем где то ошибка не могу не как найти session_start(); session_set_cookie_params('0'); $id = session_id();...

Подскажите где ошибка?
$sql = 'SELECT id, product, name, phone, metro, adres, delivery FROM stavr'; $rs = $pdo-&gt;query($sql); Ошибка: Call to a member...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru