“字段列表”中的未知列'(值)'

时间:2013-07-01 10:07:03

标签: php mysql syntax-error

好吧,也许我是个傻瓜,但我不知道这里有什么不对。 :)

我收到此错误

  

“字段列表”

中的“未知列”(用户从下拉列表中选择的值)

是的,我知道之前已经多次询问过这个问题了,我试图用旧答案解决我的问题,但我无法理解。 我正在尝试为论坛制作一个发布表单而我的错误是因为“选择主题类型”下拉菜单。

 <?php
//create_topic.php
include 'connect.php';
include 'header.php';

echo '<h2>Create a topic</h2>';
if($_SESSION['signed_in'] == false)
{
    //the user is not signed in
    echo 'Sorry, you have to be <a href="/forum/signin.php">signed in</a> to create a topic.';
}
else
{
    //the user is signed in
    if($_SERVER['REQUEST_METHOD'] != 'POST')
    {   
        //the form hasn't been posted yet, display it
        //retrieve the categories from the database for use in the dropdown
        $sql = "SELECT
                    cat_id,
                    cat_name,
                    cat_description
                FROM
                    categories";

        $result = mysql_query($sql);

        if(!$result)
        {
            //the query failed, uh-oh :-(
            echo 'Error while selecting from database. Please try again later.';
        }
        else
        {
            if(mysql_num_rows($result) == 0)
            {
                //there are no categories, so a topic can't be posted
                if($_SESSION['user_level'] == 1)
                {
                    echo 'You have not created categories yet.';
                }
                else
                {
                    echo 'Before you can post a topic, you must wait for an admin to create some categories.';
                }
            }
            else
            {

                echo '<form method="post" action="">
                    Subject: <input type="text" name="topic_subject" /><br />
                    Category:'; 

                echo '<select name="topic_cat">';
                    while($row = mysql_fetch_assoc($result))
                    {
                        echo '<option value="' . $row['cat_id'] . '">' . $row['cat_name'] . '</option>';
                    }
                echo '</select><br />
                <select name="topic_type">
                <option value="Q&A">Q&A</option>
                <option value="Development">Development</option>
                <option value="Rooting and tweeking">Rooting and tweeking</option>
                <option value="Other">Other</option>
                </select><br />';   

                echo 'Message: <br /><textarea name="post_content" /></textarea><br /><br />
                    <input type="submit" value="Create topic" />
                 </form>';
            }
        }
    }
    else
    {
        //start the transaction
        $query  = "BEGIN WORK;";
        $result = mysql_query($query);

        if(!$result)
        {
            //Damn! the query failed, quit
            echo 'An error occured while creating your topic. Please try again later.';
        }
        else
        {

            //the form has been posted, so save it
            //insert the topic into the topics table first, then we'll save the post into the posts table
            $sql = "INSERT INTO 
                        topics(topic_subject,
                               topic_date,
                               topic_cat,
                               topic_by,
                               topic_type)
                   VALUES('" . mysql_real_escape_string($_POST['topic_subject']) . "',
                               NOW(),
                               " . mysql_real_escape_string($_POST['topic_cat']) . ",
                               " . $_SESSION['user_id'] . ",
                               " . mysql_real_escape_string($_POST['topic_type']) . "
                               )";

            $result = mysql_query($sql);
            if(!$result)
            {
                //something went wrong, display the error
                echo 'An error occured while inserting your data. Please try again later.<br /><br />' . mysql_error();
                $sql = "ROLLBACK;";
                $result = mysql_query($sql);
            }
            else
            {
                //the first query worked, now start the second, posts query
                //retrieve the id of the freshly created topic for usage in the posts query
                $topicid = mysql_insert_id();

                $sql = "INSERT INTO
                            posts(post_content,
                                  post_date,
                                  post_topic,
                                  post_by,
                                  post_type)
                        VALUES
                            ('" . mysql_real_escape_string($_POST['post_content']) . "',
                                  NOW(),
                                  " . $topicid . ",
                                  " . $_SESSION['user_id'] . "
                                  " . mysql_real_escape_string($_POST['post_type']) . ",
                            )";
                $result = mysql_query($sql);

                if(!$result)
                {
                    //something went wrong, display the error
                    echo 'An error occured while inserting your post. Please try again later.<br /><br />' . mysql_error();
                    $sql = "ROLLBACK;";
                    $result = mysql_query($sql);
                }
                else
                {
                    $sql = "COMMIT;";
                    $result = mysql_query($sql);

                    //after a lot of work, the query succeeded!
                    echo 'You have succesfully created <a href="topic.php?id='. $topicid . '">your new topic</a>.';
                }
            }
        }
    }
}

include 'footer.php';
?>

表格结构

帖子

Kolonne类型Null标准Kommentarer post_id int(8)内.. post_content文本内 post_date datetime Nei
post_topic int(8)内.. post_by int(8)内.. post_type varchar(255)Nei

主题

Kolonne类型Null标准链接器直到Kommentarer topic_id int(8)内.. topic_subject varchar(255)内.. topic_date datetime Nei
topic_cat int(8)Nei类别 - &gt; CAT_ID
topic_by int(8)内.. topic_type varchar(100)Nei

(挪威语,但我想你会明白的) 谢谢:))

1 个答案:

答案 0 :(得分:1)

顺便说一句......

topic_type似乎是一个字符串,因此您应该在插入查询中加上引号:

 $sql = "INSERT INTO 
           topics(topic_subject,
                   topic_date,
                   topic_cat,
                   topic_by,
                   topic_type)
          VALUES('" . mysql_real_escape_string($_POST['topic_subject']) . "',
                  NOW(),
                  " . mysql_real_escape_string($_POST['topic_cat']) . ",
                  " . $_SESSION['user_id'] . ",
                  '" . mysql_real_escape_string($_POST['topic_type']) . "'
          )";

也许这就是你错误的原因。

我看到post_type也是一个字符串。所以在第二个插入查询中也一样!