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”“,数据将被插入。您是否将javascriptvar
与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']);”吗?