我试图将数据插入到mysql数据库中。但我的代码不起作用

时间:2013-10-14 22:23:56

标签: php html mysql

我正在研究表格并学习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

非常感谢你。

3 个答案:

答案 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支持命名参数,但您可以尝试。