Вот мой код. У меня возникла ошибка, и я новичок в PHP. Я делаю проект, в котором мне нужно получить вводимые значения и отобразить их в таблице HTML. Не могли бы вы порекомендовать мне хороший способ решить эту ошибку.

Ошибка: INSERT INTO levels (level, maxTotal, minTotal, steps) VALUES ('one', 'восемь', 'two', 'three') Повторяющаяся запись 'one' для ключевого 'level'. Примечание. Попытка получить свойство non -объект в H: \ webdev3 \ www \ try2 \ dashBoard.php в строке 7 0 результатов

{
    public $host;
    public $username;
    public $password;
    public $dab;
    public $conn;

    public function dbConnect()
    {
        $this->conn = mysqli_connect($this->host, $this->username, $this->password);

        if (!$this->conn) {
            die("Connection failed: " . mysqli_connect_error());
        } else {
            //echo "Connected successfully to server";
        }

        $db_selected = mysqli_select_db($this->conn, $this->dab);

        if (!$db_selected) {
            // if the given database doesn't exists
            // creates new database with that name
            $db_sql = 'CREATE DATABASE userLogin';

            // verify the database is created
            if (mysqli_query($this->conn, $db_sql)) {
                echo "Database userlogin already exists or created successfully\n";
            } else {
                echo 'Error creating database: ' . mysqli_error() . "\n";
            }
        }

        // creating tables
        $table_sql = "CREATE TABLE IF NOT EXISTS users (" . "uid INT PRIMARY KEY AUTO_INCREMENT," . "username VARCHAR(30) UNIQUE," . "password VARCHAR(50)," . "name VARCHAR(100)," . "email VARCHAR(70) UNIQUE); ";
        $table_sql = "CREATE TABLE IF NOT EXISTS levels (" . "uid INT PRIMARY KEY AUTO_INCREMENT," . "level VARCHAR(30) UNIQUE," . "maxTotal VARCHAR(50)," . "minTotal VARCHAR(100)," . "steps VARCHAR(70) UNIQUE); ";

        $sql = "INSERT INTO levels (level, maxTotal,minTotal,steps) VALUES ('one', 'eight', 'two','three')";
        // verify the table is created
        if (mysqli_query($this->conn, $sql)) {
            echo "New record created successfully";
        } else {
            echo "Error: " . $sql . "<br>" . mysqli_error($this->conn);
        }
        if (mysqli_query($this->conn, $table_sql)) {
            // echo "Table: users already exists or created successfully\n";
        } else {
            echo 'Error creating table: ' . mysqli_error($table_sql) . "\n";
        }

    }
}

$obj = new dbConfig();

$obj->host     = 'localhost';
$obj->username = 'root';
$obj->password = '';
$obj->dab      = 'user';
$obj->dbConnect();
0
Lost Kid 24 Июн 2017 в 05:14
Возможно, таблица уровней уже содержит данные? В вашем запросе на создание таблицы есть «если не существует».
 – 
Paul T.
24 Июн 2017 в 05:24
@PaulT. его нет в банкомате данных, я просто добавил пользовательские значения, чтобы проверить, могу ли я запрашивать данные для отображения в таблице html.
 – 
Lost Kid
24 Июн 2017 в 05:31
Можете ли вы опубликовать результаты этого запроса: SELECT COUNT(*) FROM userLogin.levels
 – 
Paul T.
24 Июн 2017 в 05:55
Кроме того, возможно, вы работаете с двумя базами данных? (может быть). Когда объект создается, его имя - user. Но затем в коде, если select_db не работает, тогда база данных создания использует userLogin в качестве имени базы данных.
 – 
Paul T.
24 Июн 2017 в 06:05

2 ответа

Если проблема, которую вы получаете, является проблемой, вы можете решить ее, удалив "UNIQUE" при создании таблицы, или изменив "INSERT INTO ..." на "INSERT IGNORE INTO ..." или не пытаясь вставить повторяющееся значение в уникальное поле.

Если вы пытаетесь обработать такую ​​ошибку, если пользователь отправил проблему, вы можете вложить вызов вставки в оператор try / catch, где вы сможете обработать ошибку изящным образом.

Я недостаточно знаю ваше конкретное приложение или требования, чтобы понять, чего вы действительно хотите. Если вы немного подробнее расскажете о желаемом результате, я уверен, что смогу дать вам лучший ответ.

0
Altimus Prime 24 Июн 2017 в 06:03

Проблема в том, что у вас есть уникальный ключ, а данные явно уже есть в этой таблице. Я заметил, что ваш код пытается добавить данные в таблицу до того, как он попытается ее создать, поэтому вам, вероятно, также следует исправить это. И, благодаря перезаписи оператора создания таблицы, невозможно создать таблицу пользователей.

Мой совет: повторите описанное выше, чтобы последовательно и правильно обрабатывать различные случаи, когда БД или таблицы не существуют или в них нет данных. На самом базовом уровне вы можете безоговорочно выполнить CREATE IF NOT EXISTS и INSERT IGNORE. Это, безусловно, несколько упростило бы ваш код.

0
Jon Kloske 26 Июн 2017 в 07:45
Спасибо, сэр! да, я понимаю, что повторил одно и то же значение, имеющее уникальное значение.
 – 
Lost Kid
30 Июн 2017 в 03:25