我正在研究表格并学习MySQL。我想只将数据插入MySQL数据库。 这是我的档案。
我的insert.php文件包含:
<?php
include_once('ressources/init.php');
if ( isset($_POST['title'], $_POST['contents'])){
// Here we use MySQL-Code
mysql_query("
INSERT INTO `posts` SET
`title` = '{$_POST['title']}',
`contents` = '{$_POST['contents']}'
");
}
?>
<html lang="en">
<head>
<title>Simple Form</title>
</head>
<body>
<form action="">
<label for="title">Title:</label>
<input type="text">
<label for="post">Post:</label>
<textarea name="post" id="post" cols="30" rows="10"></textarea>
<input type="submit">
</form>
</body>
</html>
我的init.php包含:
<?php
include_once('config.php');
mysql_connect(DB_HOST, DB_USER, DB_PASS);
mysql_select_db(DB_NAME);
?>
我的上一个文件是config.php:
<?php
$config['db_host'] = 'localhost';
$config['db_user'] = 'root';
$config['db_pass'] = 'root';
$config['db_name'] = 'php_tutorial';
foreach ( $config as $k => $v ){
define(strtoupper($k), $v);
}
?>
登录数据应该是正确的。我不知道,为什么我不可能用新数据填充数据库。任何帮助和任何提示将不胜感激。
这是我的phpmyadmin控制面板图片的链接: http://i.imgur.com/VE68nZ8.jpg
非常感谢你。
答案 0 :(得分:0)
将<form action="">
更改为<form method="POST">
- 这将解决问题
下一项<input type="text">
将其更改为<input type="text" name="title">
另外,请考虑代码中的SQL注入问题,使用mysql_escape_string
,而不是$_POST
,您可以使用$_REQUEST
数组
并且不要忘记使用mysql_query(...) or die(mysql_error());
更新:感谢@Neal - 当然不要使用已弃用和过时的MYSQL_ api,而是使用MYSQLI或PDO代替参数查询
答案 1 :(得分:0)
首先,您需要停止使用mysql并切换到mysqli / PDO。
也就是说,使用您当前的代码,
你的insert.php应该是:
<?php
include_once('ressources/init.php');
if (isset($_POST['title']){
$title = mysql_real_escape_string($_POST['title']);
$contents = mysql_real_escape_string($_POST['contents']);
$q="INSERT INTO posts SET (title, contents) VALUES ('$title','$contents')";
mysql_query($q);
}
?>
<html lang="en">
<head>
<title>Simple Form</title>
</head>
<body>
<form action="" method="POST">
<label for="title">Title:</label>
<input name="title" type="text">
<label for="contents">Post:</label>
<textarea name="contents" id="contents" cols="30" rows="10"></textarea>
<input type="submit">
</form>
</body>
</html>
mysql_real_escape_string()函数有助于防止注入(有害字符将从查询字符串中转义)。
这应该让你开始。
此外,作为安全方面的注意事项:如果您还没有,请确保将config.php文件放在网站的公共根文件夹下,以帮助保护您的mysql用户名/密码不被浏览器轻松查看/等。
答案 2 :(得分:-1)
您可以尝试使用PDO: (从php.net复制并修改)
<?php
$dsn = 'mysql:dbname='.DB_NAME.';host='.DB_HOST;
try {
$dbh = new PDO($dsn, DB_USER, DB_PASS);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
?>
在您的表单中有一个代码如:
<input type="text">
请指定字段的名称,如:
<input type="text" name="title">
稍后,您可以像$ _GET [&#39; title&#39;]一样获取此字段的内容。 由于GET请求的限制,如果你添加方法=&#34; POST&#34;你的表格。
<form action="" method="POST">
你可以获得类似$ _POST [&#39; title&#39;]
的标题if ( isset($_POST['title'], $_POST['contents'])){
// Here we use MySQL-Code
$stmt = $dbh->prepare("
INSERT INTO posts (title, contents) VALUES(:title, :post)
");
$stmt->bind_value(':title', $_POST['title']);
$stmt->bind_value(':post', $_POST['post');
$stmt->execute();
}
我并非100%确定mysql支持命名参数,但您可以尝试。