或变量 (T_VARIABLE) 或数字 (T_NUM_STRING)

or variable (T_VARIABLE) or number (T_NUM_STRING)

看了很多帖子还是没法改正错误! 我想我的问题是我需要说出用户 ID 是什么,但很好地将其创建为 auto_increment,让我们显示我的数据库:

CREATE TABLE USER(
    id TINYINT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(20) NOT NULL,
    lastname VARCHAR(20) NOT NULL,
    username VARCHAR(20) NOT NULL UNIQUE,
    nif VARCHAR(9) NOT NULL,
    email VARCHAR(30) NOT NULL,
    password VARCHAR(20) NOT NULL,
    country VARCHAR(20),
    age TINYINT
);

CREATE TABLE BOOK(
id TINYINT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(50) NOT NULL,
author VARCHAR(30) NOT NULL,
language VARCHAR(20) NOT NULL,
thematic VARCHAR(30) NOT NULL,
done BOOLEAN DEFAULT FALSE,
userid TINYINT default 1,
    FOREIGN KEY (userid) REFERENCES USER (id)
    ON UPDATE CASCADE);

在看,Mysql-Workbench插入真的很简单,比如:

insert into USER (name, lastname, username, NIF, email, password) values ('victor', 'ribero', 'tureey', '47880680q', 'victor.ribero3@gmail.com', '47880680q');

问题是,当我执行 "sign up" 通过 html 表单界面创建用户时它崩溃了,我不知道为什么:

<div id="form-wrapper">
            <form action="php/insert_user.php" id="sign-up-form">
                <form action="insert_user.php" method="POST">
                        <input required class="shared" type="text" placeholder="Name (*)" name="name" maxlength="20">
                        <input required class="shared" type="text" placeholder="Last name (*)" name="lastname" maxlength="20"><br/>
                        <input required class="shared" type="text" placeholder="nif (*)" name="nif" maxlength="20">
                        <input required class="shared" type="text" placeholder="Email (*)" name="email" maxlength="30"><br/>
                        <input required class="shared" type="text" placeholder="User name (*)" name="username" maxlength="20">
                        <input required class="shared" type="text" placeholder="Password (*)" name="password" maxlength="20"><br/>
                        <input class="shared" type="text" placeholder="Country" name="country" maxlength="20">
                        <input class="shared" type="text" placeholder="Age" name="age"><br/>
                        <input type="text" hidden name="userid" value="1">

                        <p><small>(*) Means its required.</small></p>
                        <input onclick="close_signUp" id="signup-up-confirm" type="submit">
                    </form>
                </div>
        </form>

我试着用这个 insert_user.php

来创建它
require_once 'login.php';
    //////////////////////
    //Connect to the server
    //////////////////////
    $link = mysqli_connect($db_hostname, $db_username, $db_password);
    if (!$link) die("Unable to conect to MYSQL" . mysqli_error($link));
    //////////////////////
    //Select the database
    //////////////////////
    $db = mysqli_select_db($link, $db_database);
        if(!$db)die ("Unable to conect to mysqli: " . mysqli_error($link));

    //Query to add a new user into our database (sign up)

        /******************************************************/
        /******************************************************/
        /******************************************************/


                    //cannot ad a user yet

        /******************************************************/
        /******************************************************/
        /******************************************************/
    $query = "insert into USER (id, name, lastname, username, nif, email, password, country, age) VALUES ('null', $_POST['name'],
                                                                                                    $_POST['lastname'],
                                                                                                    $_POST['username'],
                                                                                                    $_POST['NIF'],
                                                                                                    $_POST['email'],
                                                                                                    $_POST['password'],
                                                                                                    $_POST['country],
                                                                                                    $_POST['age'])";
    //We apply the query to our database
    $result = mysqli_query($link, $query);

    if(!$result) die ("Database access failed: ". mysqli_error($link));
    else{
        ?>
        <!-- Redirection to the index after sign up -->
        <script type="text/javascript">
            alert('Used created successfully!');
            window.location = 'index.php';
        </script>
        <?php
    }
?>

就像我说的,我希望问题出在用户 ID 上,但我不知道该如何解决。

有什么建议吗?非常感谢:)

你不应该为 id 插入值,甚至不为 null 尝试以这种方式删除 (就像@steve 所建议的那样,重新格式化 sql 指令,避免在字符串中使用 $_POST )

  $query = "insert into USER ( name, lastname, username, nif, email, 
     password, country, age) VALUES ( " . $_POST['name'] .", " .    
                                      $_POST['lastname'] .", ".
                                      $_POST['username'] . ", ".
                                      $_POST['NIF']. ", " .
                                      $_POST['email'] .", ".
                                      $_POST['password'] . ", ".
                                      $_POST['country] .", " .
                                      $_POST['age'] .")";

还有一个你不需要的未成年人

<input type="text" hidden name="userid" value="1">

在创建用户

用户id应该是自动创建的