Создание таблицы с именем переменной PHP не работает - PullRequest
0 голосов
/ 29 апреля 2018

То, что я уже посмотрел

Я серьезно новичок в PHP, и я надеялся, что вы, ребята, сможете указать мне правильное направление. Я прочитал следующие темы и адаптировал их ответы, но, очевидно, что-то делаю неправильно:

Создание таблицы с именем переменной php mysql

Использование переменной в качестве имени таблицы при создании таблицы в mysql

Создать таблицу mysql с неработающей переменной php

В частности, это этот блок кода, который я пытался адаптировать к своим собственным потребностям, так как это был один из немногих примеров, использующих heredocs, который мы научили использовать:

$create = <<<SQL
CREATE TABLE `$tableusername` (
    `ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `please` VARCHAR(50) NOT NULL,
    `make` VARCHAR(50) NOT NULL,
    `this` VARCHAR(50) NOT NULL,
    `work` VARCHAR(50) NOT NULL
)

Моя ситуация

Я хочу, чтобы мой register.php создал новую таблицу, используя имя пользователя, которое выбрал пользователь. (Register.php недоступен, если пользователь уже вошел в систему, поэтому дубликаты таблицы никогда не будут возможны.) Позже эта таблица будет использоваться для отображения данных, содержащихся в таблице, поэтому я не установил PK, поскольку таблица никогда не будет объединена или ее содержимое будет использоваться совместно с другой таблицей. (Если окажется, что это не работает, я добавлю идентификатор с автоматическим увеличением).

Проблема

Таблица не создается.

Мой register.php РЕДАКТИРОВАТЬ: В соответствии с предложением я добавил к коду

Я получил сообщение об ошибке, касающееся синтаксиса инкапсуляции имени каждого столбца в кавычках, поэтому я удалил их, чтобы затем получить следующее сообщение об ошибке:

Could not query database1064 : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 11

<?php
include('template.php');
if (isset($_POST['username']) and isset($_POST['password'])) {
    $name = $mysqli->real_escape_string($_POST['username']);
    $pwd = $mysqli->real_escape_string($_POST['password']);
    $mail = $mysqli->real_escape_string($_POST['email']);
    $first = $mysqli->real_escape_string($_POST['fname']);
    $last = $mysqli->real_escape_string($_POST['lname']);
    $query = <<<END
    INSERT INTO p_users(username,password,email,fname,lname)
        VALUES('{$name}','{$pwd}','
            {$mail}','{$first}','{$last}')
END;
    $table = <<<END
        CREATE TABLE `$name` (
            steps_per_day int,
            energy_expenditure int,
            distance_walked_per_day int,
            bed_time int,
            waking_time int,
            hours_slept int,
            num_daytime_naps int,
            outdoor_temp int,
            indoor_temp int
        )
END;
    if ($mysqli->query($table) !== TRUE) {
            die("Could not query database" . $mysqli->errno . " : " . $mysqli->error);
                header('Location:index.php');
        }
    if ($mysqli->query($query) !== TRUE) {
        die("Could not query database" . $mysqli->errno . " : " . $mysqli->error);
            header('Location:index.php');
    }

}

$content = <<<END
<form method="post" action="register.php">
<input type="text" name="username" placeholder="username"><br>
<input type="password" name="password" placeholder="password"><br>
<input type="text" name="email" placeholder="email"><br>
<input type="text" name="fname" placeholder="first name"><br>
<input type="text" name="lname" placeholder="last name"><br>
<input type="submit" value="Register">
<input type="Reset" value="reset">
</form>
END;
echo $navigation;
echo $content;
?>

1 Ответ

0 голосов
/ 29 апреля 2018

indoor_temp int, - этой последней запятой не должно быть, поскольку она является последним столбцом, что приводит к ... outdoor_temp int, indoor_temp int, )

Sidenotes:

И вам следует ДЕЙСТВИТЕЛЬНО взглянуть на комментарий Дэдушки. real_escape_string не препятствует внедрению SQL при использовании значения в качестве имени таблицы !!!

Вероятно, единственная таблица со всеми пользовательскими чтениями и дополнительным столбцом username (или userid) - лучший и более безопасный дизайн базы данных.

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