Загрузка...

Как подключить форму регистрации + авторизации с занесением данных в бд?

Тема в разделе Backend создана пользователем Ягода 3 июн 2024. 344 просмотра

Загрузка...
  1. Ягода
    Ягода Автор темы 3 июн 2024 Twitch party - новости twitch 24 432 29 июн 2019
    есть у меня 3 файла -
    registration.php

    Код
    <!doctype html>
    <html lang="en">
    <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <title>Document</title>
    </head>
    <body>

    <form action="register.php" method="post">
    <input type="text" placeholder="Login" name="login">
    <input type="text" placeholder="email" name="email">
    <input type="text" placeholder="pass" name="pass">
    <input type="text" placeholder="repeatpass" name="repeatpass">
    <button class="btn" type="submit">reg</button>
    </form>
    </body>
    </html>
    register.php

    Код
    <?php
    require_once('db.php');
    $login = $_POST ['login'];
    $email = $_POST ['email'];
    $pass = $_POST ['pass'];
    $repeatpass = $_POST ['repeatpass'];


    $sql = "insert into `users` (login,pass,email) VALUES ('$login', '$pass', '$email')";

    $conn -> query($sql);
    db.php

    Код
    <?php

    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "Users"

    $conn = mysqli_connect($servername, $username, $password ,$dbname);

    if(!$conn){
    die ("Connection Failed". mysqli_connect_error());
    } else {
    echo "done";
    }?>
    при успешной регистрации должна выводиться надпись - done с занесением данных в таблицу, но как я понял нет тупо связи с бд, что я делаю не так? может в коде ошибка где-то ? пользователей создавать я пробовал, 0 толку.

    если у вас есть альтернативные варианты - можете их предложить, я сломал себе всю голову, мои нервные клетки уже не восстановятся
     
    3 июн 2024 Изменено
  2. Shadowraze
    Shadowraze 3 июн 2024 687 15 июл 2018
    Не используй
    ⁡mysqli_connect()
    ⁡, устаревшая функция. Лучше вызывать соединение так:
    ⁡$conn = new mysqli($servername, $username, $password)
    ⁡, а еще лучше использовать PDO:
    ⁡$conn = new PDO("mysql:host=$servername;dbname=Users", $username, $password)
     
    1. Ягода Автор темы
      Shadowraze, сейчас попробую, спасибо
    2. Ягода Автор темы
      Bl0rm, лучше б помог
  3. Author_inactive4936070
    <?php
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "Users";

    // Создаем подключение к базе данных
    $conn = mysqli_connect($servername, $username, $password, $dbname);

    // Проверяем подключение
    if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
    }
    ?>
    --- Сообщение объединено с предыдущим 3 июн 2024
    <!doctype html>
    <html lang="en">
    <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <title>Регистрация</title>
    </head>
    <body>
    <form action="register.php" method="post">
    <input type="text" placeholder="Login" name="login" required>
    <input type="email" placeholder="Email" name="email" required>
    <input type="password" placeholder="Password" name="pass" required>
    <input type="password" placeholder="Repeat Password" name="repeatpass" required>
    <button class="btn" type="submit">Register</button>
    </form>
    </body>
    </html>
    --- Сообщение объединено с предыдущим 3 июн 2024
    <?php
    require_once('db.php');

    $login = mysqli_real_escape_string($conn, $_POST['login']);
    $email = mysqli_real_escape_string($conn, $_POST['email']);
    $pass = mysqli_real_escape_string($conn, $_POST['pass']);
    $repeatpass = mysqli_real_escape_string($conn, $_POST['repeatpass']);

    if ($pass !== $repeatpass) {
    die("Passwords do not match!");
    }

    $hashed_pass = password_hash($pass, PASSWORD_DEFAULT);

    $sql = "INSERT INTO `users` (login, pass, email) VALUES ('$login', '$hashed_pass', '$email')";

    if ($conn->query($sql) === TRUE) {
    echo "Registration successful!";
    } else {
    echo "Error: " . $sql . "<br>" . $conn->error;
    }

    $conn->close();
    ?>
    --- Сообщение объединено с предыдущим 3 июн 2024
    Убедись, что у тебя существует база данных с именем Users и таблица users в ней с полями id, login, pass, email.
    --- Сообщение объединено с предыдущим 3 июн 2024
    CREATE TABLE `users` (
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `login` VARCHAR(50) NOT NULL,
    `pass` VARCHAR(255) NOT NULL,
    `email` VARCHAR(100) NOT NULL
    );
    --- Сообщение объединено с предыдущим 3 июн 2024
    теперь должно работать
     
    1. Ягода Автор темы
      Author_inactive4936070, 
      указывал это еще при создании бд и таблицы к ней
    2. Ягода Автор темы
      Author_inactive4936070, полностью скопировал код, аналогично - 0 эффекта
  4. Author_inactive4936070
    Посмотри ошибки, вставив в начале php файла код
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL);
    --- Сообщение объединено с предыдущим 4 июн 2024
    Для отладки и выявления неполадок давай так
    <?php
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "Users";

    // Создаем подключение к базе данных
    $conn = mysqli_connect($servername, $username, $password, $dbname);

    // Проверяем подключение
    if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
    } else {
    echo "Connected successfully!";
    }
    ?>
    --- Сообщение объединено с предыдущим 4 июн 2024
    Этот код поможет тебе убедиться, что соединение с базой данных установлено правильно.
    --- Сообщение объединено с предыдущим 4 июн 2024
    <?php
    require_once('db.php');

    $login = mysqli_real_escape_string($conn, $_POST['login']);
    $email = mysqli_real_escape_string($conn, $_POST['email']);
    $pass = mysqli_real_escape_string($conn, $_POST['pass']);
    $repeatpass = mysqli_real_escape_string($conn, $_POST['repeatpass']);

    if ($pass !== $repeatpass) {
    die("Passwords do not match!");
    }

    $hashed_pass = password_hash($pass, PASSWORD_DEFAULT);

    $sql = "INSERT INTO `users` (login, pass, email) VALUES ('$login', '$hashed_pass', '$email')";

    if ($conn->query($sql) === TRUE) {
    echo "Registration successful!";
    } else {
    echo "Error: " . $sql . "<br>" . $conn->error;
    }

    $conn->close();
    ?>

    Этот код включает проверку паролей и выводит сообщение об ошибке, если запрос не выполнен успешно.
    --- Сообщение объединено с предыдущим 4 июн 2024
    <!doctype html>
    <html lang="en">
    <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <title>Регистрация</title>
    </head>
    <body>
    <form action="register.php" method="post">
    <input type="text" placeholder="Login" name="login" required>
    <input type="email" placeholder="Email" name="email" required>
    <input type="password" placeholder="Password" name="pass" required>
    <input type="password" placeholder="Repeat Password" name="repeatpass" required>
    <button class="btn" type="submit">Register</button>
    </form>
    </body>
    </html>

    Убедимся, что форма регистрации правильно отправляет данные на сервер:
     
    1. Ягода Автор темы
    2. Ягода Автор темы
      Author_inactive4936070, разобрался я с подключением - оно есть все-таки, но данные почему-то не передает
Top