Php 无法将表单数据插入数据库

Php 无法将表单数据插入数据库,php,mysql,forms,Php,Mysql,Forms,我需要将所有表单详细信息插入数据库,并将上载的图像保存到某个位置。我成功地将文件上载到指定位置。但表单细节并没有被插入到数据库中 这是pages.php <?php session_start(); if(!empty($_SESSION['uname']) && !empty($_SESSION['pswd'])) { include 'classes/insert.php'; $db_con->dbcon(); $db_con->in

我需要将所有表单详细信息插入数据库,并将上载的图像保存到某个位置。我成功地将文件上载到指定位置。但表单细节并没有被插入到数据库中

这是
pages.php

<?php
session_start();
if(!empty($_SESSION['uname']) && !empty($_SESSION['pswd'])) {
    include 'classes/insert.php';
    $db_con->dbcon();
    $db_con->insert_data();
    $target_path = "uploads/";
    $target_path = $target_path . basename( $_FILES['bg_img']['name']);
    if(move_uploaded_file($_FILES['bg_img']['tmp_name'], $target_path)) {
        echo "The file ".  basename( $_FILES['bg_img']['name']). 
        " has been uploaded";
    } else {
        echo "There was an error uploading the file, please try again!";
    }
?>
<!doctype html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>New Page</title>
    </head>
    <body>
        <p>Add pages</p>
        <a href="logout.php">logout</a>
        <br /><br />
        <a href="dashboard.php">Dashboard</a>
        <br /><br />
        <form method="post" action="" enctype="multipart/form-data">
            <label>Page name</label>
            <input type="text" name="page_name" />
            <br />
            <br />
            <label>Page title</label>
            <input type="text" name="page_title" />
            <br />
            <br />
            <label>Page bg img</label>
            <input type="hidden" name="MAX_FILE_SIZE" value="100000" />
            <input type="file" name="bg_img" />
            <br />
            <br />
            <label>Page content</label>
            <textarea name="page_content"></textarea>
            <br />
            <br />
            <input type="submit" value="Submit" name="submit" />
        </form>
    </body>
</html>
<?php } else {
    $home_loc = 'index.php';
    header ('Location:' .$home_loc);}
?>
class db_con {
    public function dbcon() {
        $hostname = 'localhost';
        $username = 'root';
        $pswd     = 'admin';
        $dbname   = 'web';
        mysql_connect($hostname, $username, $pswd) or die('cudn\'t connect');
        mysql_select_db($dbname) or die('cudn\'t select db');
    }

    function insert_data() {
        $this->dbcon();
        if (isset($_POST['page_name']) && isset($_POST['page_title']) && isset($_POST['bg_img']) && isset($_POST['page_content'])) {
            $pg_name      = mysql_real_escape_string($_POST['page_name']);
            $pg_title     = mysql_real_escape_string($_POST['page_title']);
            $pg_img       = mysql_real_escape_string($_POST['bg_img']);
            $pg_content   = mysql_real_escape_string($_POST['page_content']);
            $insert_query = mysql_query("INSERT INTO pages (page_name, page_title, page_bg_img, page_content) VALUES ('" . $pg_name . "', '" . $pg_title . "', '" . $pg_img . "', '" . $pg_content . "')");
        }
    }
}

$db_con = new db_con();

尝试检查是否已成功连接到数据库,如果未成功连接,请将初始化从
$db\u con=new db\u con
$db_con=新的db_con()

编辑:
我认为你还需要改变你的流程。分离表单、插入过程和数据库连接。我建议您创建3个单独的文件: 1.表单页面(HTML) 2.流程页面(链接表单的PHP文件,或者流程发生的地方) 3.数据库连接文件(PHP文件。将您的数据库连接放在这里以及其他与数据库相关的功能)

下面是我的例子:

表格页:

    <!doctype html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>New Page</title>
    </head>
    <body>
        <p>Add pages</p>
        <a href="logout.php">logout</a>
        <br /><br />
        <a href="dashboard.php">Dashboard</a>
        <br /><br />
        <form method="post" action="process.php" enctype="multipart/form-data">
            <label>Page name</label>
            <input type="text" name="page_name" />
            <br />
            <br />
            <label>Page title</label>
            <input type="text" name="page_title" />
            <br />
            <br />
            <label>Page bg img</label>
            <input type="hidden" name="MAX_FILE_SIZE" value="100000" />
            <input type="file" name="bg_img" />
            <br />
            <br />
            <label>Page content</label>
            <textarea name="page_content"></textarea>
            <br />
            <br />
            <input type="submit" value="Submit" name="submit" />
        </form>
    </body>
</html>

新页
添加页面





页面名称

页面标题

页背景图片

页面内容

如您所见,我将表单的操作指向process.php

下面是我的示例process.php:

<?php
include 'classes/db.php'; 

if(isset($_POST['submit'])){
   // get your post data here
   $post_data = array('your post data');
   // instantiate db
   $db = new Db();
   // create db connection
   $db_connect = $db->connect();
   // check if successfully connected to db
   // then call the insertion process
   $db->insert_data('table_name', $post_data);
}

<代码>

嗯,有很多事情要考虑。

  • 您正在将Javascript与PHP混合

    改变这个

        var $hostname = 'myhostname';
    

其他人也一样

  • 就你的情况来说,你不应该上很多课
使用以下命令:

  class db_con{
       public function dbcon(){
          ......... 
         }
       function insert_data() {
           ...........
         }
     }
  • 您没有调用
    insert\u data()
    函数
可以这样说:

   $insert = new insert; 
   $insert->insert_data();
      $pg_title = mysql_real_escape_string($_POST['page_title']);
  • 您应该转义变量,如下所示:

       $insert = new insert; 
       $insert->insert_data();
    
          $pg_title = mysql_real_escape_string($_POST['page_title']);
    
  • 您应该切换到
    PDO
    MYSQLI

编辑:

试试这个

    session_start();
   if(!empty($_SESSION['uname']) && !empty($_SESSION['pswd'])){
    include 'classes/insert.php';
   $db_con = new db_con();
   $db_con->dbcon();
   $db_con->insert_data();
编辑2:

要获取上载的文件,请使用
$\u FILES
而不是
$\u POST

    $pg_img       = $_FILES['bg_img'];
也要改变这一点

  and $_FILES['bg_img']['name'] != ''
而不是

  && isset($_POST['bg_img'])

在类的实例周围不应该有括号吗<代码>$insert=新插入()产生了什么错误?我在实例中添加了括号,但没有做任何更改。不显示任何错误。但是,如果我删除'enctype=“multipart/form data”“,数据将被插入。您是否将javascript
var
与PHP混合使用?action=”“enctype=“multipart/form data”应该有类似于action=”“enctype=“multipart/form data”的空格,我已经按照您的说法进行了编辑。我可以连接到数据库。我认为您还需要更改您的流程。分离表单、插入过程和数据库连接。我建议您创建3个单独的文件:1。表单页面(HTML)2。流程页面(链接表单的PHP文件,或者流程发生的地方)3。数据库连接文件(PHP文件。将您的数据库连接放在这里,以及其他与数据库相关的功能)。我已经按照您所说的做了更改。但是没有变化。我已经更新了上面的代码。请检查它。你在哪里调用这个
insert_data()
?我在“include”语句下面的“pages.php”中调用“insert_data()”和“dbcon()”函数。我使用了你的代码,但没有更改。我应该从“insert.php”中删除“$db_con=new db_con();”吗?仅供参考,如果我从表单中删除“enctype=”multipart/form data“”,数据将被插入到数据库中。非常感谢。现在它起作用了。现在我收到一条警告,指出“mysql\u real\u escape\u string()期望参数1是字符串,数组给定”。在数据库中,该列为空。你能告诉我如何操作这个“$pg\u img=mysql\u real\u escape\u字符串($\u FILES['bg\u img']);”吗?