Создайте таблицу для каждого пользователя с его идентификатором - PullRequest
0 голосов
/ 09 июля 2020

У меня проблема с веб-сайтом, который я сейчас создаю: мне нужна таблица для каждого пользователя, но она не работает. Я попытался создать таблицу во время регистрации или при первом входе в систему, что тоже работает. Моя проблема связана с именованием таблицы, потому что я хочу, чтобы таблица имела следующее имя. "user_1" "Пользователь" фиксирован, и номер должен быть идентификатором пользователя. Вот как это должно выглядеть, таблица user работает без проблем, но другие таблицы не работают.

DB сейчас:

  • users
  • user_

Желаемое содержимое БД:

  • пользователи
  • user_1
  • user_2

Пользователи таблицы:

+----+--------------+-----------+------------------+---------------|
| id |  first name  | last name |  email           | password      |
+------------------------------------------------------------------+
|  1 |  user1       | user1     |  user1@gmail.com | password Hash||
+------------------------------------------------------------------+
|  2 |  user2       | user2     |  user2@gmail.com | passowrd Hash |
+----+--------------+-----------+------------------+---------------+

Мои предыдущие возможности: До сих пор я пытался создать таблицу, если регистрация прошла успешно. Здесь была ошибка, я мог создать таблицу, но он создал ее под именем «user_». «Id» был просто пропущен, поэтому я могу создать таблицу.

При втором подходе я попытался сохранить значение «False» в таблице во время регистрации и проверить во время входа в систему, является ли значение «False» ", в таком случае измените это значение на" Истина "и создайте таблицу. Но здесь у меня возникла та же проблема, что и при первой попытке, когда мне не дали id.

Мой код: registration. php:

//Keine Fehler, wir können den Nutzer registrieren
if(!$error) {    
    $passwort_hash = password_hash($passwort, PASSWORD_DEFAULT);
    
    $statement = $pdo->prepare("INSERT INTO users (email, passwort, vorname, nachname) VALUES (:email, :passwort, :vorname, :nachname)");
    $result = $statement->execute(array('email' => $email, 'passwort' => $passwort_hash, 'vorname' => $vorname, 'nachname' => $nachname));
    
    if($result) {
            $pdo = new PDO('mysql:host=localhost;dbname=fitnessstats', 'root', '');

            if(isset($_GET['login'])) {
            $email = $_POST['email'];
            $passwort = $_POST['passwort'];

            $statement = $pdo->prepare("SELECT * FROM users WHERE email = :email");
            $result = $statement->execute(array('email' => $email));
            $user = $statement->fetch();
    
            //Überprüfung des Passworts
            if ($user !== false && password_verify($passwort, $user['passwort'])) {
                $_SESSION['userid'] = $user['id'];
                include 'createPersonalTable.php';
                die('<script language="javascript" type="text/javascript"> document.location="geheim.php"; </script>'); //'Login erfolgreich. Weiter zu <a href="geheim.php">internen Bereich</a>'
            } else {
                $errorMessage = "E-Mail oder Passwort war ungültig<br>";
            }
        }
        //User ID
        $showFormular = false;
    } else {
        echo 'Beim Abspeichern ist leider ein Fehler aufgetreten<br>';
    }
} 

createPersonalTable. php :

<?php
session_start();
$pdo = new PDO('mysql:host=localhost;dbname=fitnessstats', 'root', '');

        $selectID = $pdo->prepare("SELECT * FROM users WHERE email = $email");
        $idOutput = $selectID->execute(array('id' => $useridTable));
        echo "$useridTable";

        $tablename = "user_" . $useridTable;
        //$tablename = "user_" . $vorname . $nachname;
        $createTable = "CREATE TABLE $tablename (
            id INT(255) AUTO_INCREMENT PRIMARY KEY,
            gewicht FLOAT,
            dauer FLOAT,
            anzahl INT
        )";
        if(mysqli_query($conn, $createTable)){
            echo "Table created successfully.";
            //  
        } else{
            echo "ERROR: Could not able to execute $createTable. " . mysqli_error($conn);
        }      
        if(isset($errorMessage)) {
            echo $errorMessage;
        }
?>

Думаю, основная проблема заключается в чтении ID (т.е. в этом разделе).

$selectID = $pdo->prepare("SELECT * FROM users WHERE email = $email");
        $idOutput = $selectID->execute(array('id' => $useridTable));
        echo "$useridTable";

Заранее спасибо

1 Ответ

0 голосов
/ 09 июля 2020

Я использую PDO, и там есть функция lastInsertId (). Вы можете использовать ее, когда сохраняете нового пользователя в базе данных пользователей. Например: $ id = pdo-> lastInsertId ();

Затем вы добавляете эта переменная $ id в вашей таблице имя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...