为每个用户及其ID创建一个表

时间:2020-07-09 11:30:19

标签: php sql

我正在创建一个网站时遇到问题,我需要为每个用户提供一个表,但该表不起作用。我尝试在注册或首次登录时创建表,这也可以。我的问题是表的命名,因为我希望表具有以下名称。 “ user_1” “用户”是固定的,数字应为用户的ID。 这是应该的样子,表用户可以正常工作,而其他表则不能工作。

当前数据库:

  • 用户
  • 用户_

数据库所需的内容:

  • 用户
  • 用户_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”,如果是,则将该值更改为“ True”并创建表。但是在这里,我遇到了与第一次尝试相同的问题,即没有给我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";

预先感谢

2 个答案:

答案 0 :(得分:1)

回顾一下:回想一下,上面的问题并没有多大意义,因为通常在表之间创建关系,如果将来遇到此问题,请在此处寻找合适的解决方案。

我在这里没有写所有代码,因为它很多,但是我对表进行了一些重新排列,W3schools帮助我以不同的方式解决了很多问题。

https://www.w3schools.com/sql/sql_foreignkey.asp

https://www.w3schools.com/sql/sql_join.asp

答案 1 :(得分:-1)

我使用PDO,并且有一个名为lastInsertId()的函数 在用户数据库中存储新用户时可以使用它 例如:$ id = pdo-> lastInsertId();

然后将这个$ id变量添加到表名中