我正在创建一个网站时遇到问题,我需要为每个用户提供一个表,但该表不起作用。我尝试在注册或首次登录时创建表,这也可以。我的问题是表的命名,因为我希望表具有以下名称。 “ user_1” “用户”是固定的,数字应为用户的ID。 这是应该的样子,表用户可以正常工作,而其他表则不能工作。
+----+--------------+-----------+------------------+---------------|
| 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";
预先感谢
答案 0 :(得分:1)
回顾一下:回想一下,上面的问题并没有多大意义,因为通常在表之间创建关系,如果将来遇到此问题,请在此处寻找合适的解决方案。
我在这里没有写所有代码,因为它很多,但是我对表进行了一些重新排列,W3schools帮助我以不同的方式解决了很多问题。
答案 1 :(得分:-1)
我使用PDO,并且有一个名为lastInsertId()的函数 在用户数据库中存储新用户时可以使用它 例如:$ id = pdo-> lastInsertId();
然后将这个$ id变量添加到表名中